DIY个单片机,优雅地“偷”数据吧!
起因
最近因为个人项目需要,要将不允许联网的主机里数据库的数据发送至远程服务器。考虑到既然主机无法联网,不如用单片机作为中间人,通过串口将数据发送给单片机,再由联网的单片机将数据发送至服务器。这不就完美实现“偷数据”的操作了么!说干就干!
主机数据抓取
既然要将数据发送至单片机,那首先我得先拿到数据。由于主机是离线且最高权限状态,果断装一个python环境(这样可以先分析一波数据,将异常值与有效的数据进行区分后选择发送),通过pyserial和pymssql进行数据抓取。详细的代码就不列了,说下在过程中碰到的一个坑。
最开始由于python程序中没有设计发送截至符,所以测试时,单片机无法确定数据截至位置在哪,导致发送至远端服务器的数据都是断断续续的。而在主程序中添加截至符发送后,完美解决该问题。
1 | import serial |
对了,由于主机无法联网而且还是windows7操作系统,其实配置python环境也格外艰难!在趟过了各种坑后,成功运行抓数据的脚本时,我的眼角都湿润了。
单片机程序编写
由于esp8266可以非常愉快的使用arduino框架进行开发,大大降低了我们这种萌新的上手难度。参考《arduino(2)–通过ESP8266模块实现串口接收数据,使用TCP协议进行局域网通信》文章,略作修改,就成功实现了串口数据的读取与发送。
1 |
|
事情到了这一步,整个流程其实已经完全跑通了,也成功实现了“偷”数据。但是主机后边插一根数据线,数据线再连接到一个大大的NodeMCU开发板上。实在太不优雅了!令我完全无法接受!
上淘宝看看有没有更简约的方案。似乎简单的USB转TTL通讯板+ESP-01s就能解决这个问题。果断买来换掉原方案。
然而,想象的很美好,这个方案却有一个致命问题,那就是通讯不稳定。导致主机的数据无法正确发送到单片机上。为此我还特地找来两台主机上分别实验了一下,其中一台能够正常通讯,另一台就一直失败。而旧方案相比之下就非常稳定,都能成功偷发数据。初步怀疑可能是新方案供电不稳定导致的,但是没有继续验证,如果有大佬懂得,麻烦告知一下,谢谢!
DIY单片机
既然现有方案无法满足我的需求,那只有一条路了!自己制作一个小巧玲珑,性能稳定的单片机。像我这样的萌新,直接开干,那肯定是不可能的了,还是得上开源硬件平台看看有没有大佬已经做过类似的项目。成功仿造一个,不就成了么!
usb-esp8266 - 嘉立创EDA开源硬件平台 (oshwhub.com)
感谢moguiliue大佬开源的项目,直接打板,开干!
大佬的方案确实可以!成品能够稳定运行,完美满足我的需求。不过过程中发现原设计USB公头位置的PCB会有干涉问题(不知道是不是我买的元器件不对🤦)。每套主板前端都要把干涉的位置用锉刀磨掉,才能焊上USB头。有点费力
而且这个方案只能满足最基本的数据通讯,没有将其他GPIO口引出,导致后续无法外接传感器或者显示屏。虽然优雅,但可玩性又差点意思。怎么办?
DIY单片机2.0
既要优雅,又要能扩展,不如参考大佬的思路,自己再从头设计一版!
自己从头设计的开发板,将原有CH340G的方案改为CH340C,省下外围晶振电路的空间,增加一个4pin母座用于引出I2C通讯。由于原设计的走线和布局很难改动了,只能重构整体。目前进度是已打板,但还未制作。希望等材料到了之后,这块自己第一次从头设计的单片机能成功运行!
2023/4/23 update:
今天终于把自己第一次设计的单片机做出来了,一切运行正常,开心~