发布日期:2025-10-16 15:35浏览次数:
今天蹲阳台上捣鼓我的智能花盆项目,突然发现上位机死活读不到传感器数据。拍大腿一想,干脆把Python跟硬件那点事捋清楚,还能给大伙儿避避坑。
先从抽屉底扒拉出吃灰的Arduino板,插上USB线连电脑。打开Python写的监控软件,好家伙,直接弹红字报错:"串口已被占用"!我寻思也没开其他软件,结果一查任务管理器——这破板子驱动装了俩版本,后台服务正在偷偷抢端口。赶紧卸干净重装驱动,世界终于清净了。
想着无线更利索,换成蓝牙模块HC-05。配对上挺顺利,代码里import个pybluez库就开始浪。结果数据传着传着,突然像被掐了脖子似的卡住。盯着调试窗口骂街时,发现手机通知栏弹出条天气预报——好么!这蓝牙模块跟手机WiFi信号撞车了!赶紧把路由器信道从拥堵的13改成冷门的4,再试:
结论很扎心:蓝牙传数据就跟谈恋爱似的,得凑近点,中间别挡东西。
改回串口踏实搞协议。定义了个帧格式:头+数据长度+内容+校验位。Python这边用pyserial收数据,本来美滋滋解析着,突然收到半个残帧!打印原始数据一看,好家伙,硬件那边每行数据结尾偷偷塞了个换行符\n,Python的readline()直接截肢了。气得我掏出十六进制查看器怼着调试,在接收代码里加了个超时拼接:
读到开头符才收集,超时没后续就扔掉。这招专治各种手抖焊歪的硬件。
不信邪换成ESP8266搞TCP。路由器给模块分配IP是192.168.1.101,Python脚本用socket连它。运行!报错:拒绝连接!抓狂查了两小时,发现电脑连着手机热点,模块连着家里WiFi,压根不在同一个局域网!插网线改连同个路由器后,又撞上防火墙拦截。怒关Windows防火墙,数据终于刷屏了——这哪是通信,简直是谍战!
折腾到半夜终于搞定,盯着稳定刷新的湿度数据喝了口凉透的茶。跟硬件打交道就像驯野马,你以为Python是缰绳,更多时候是当铲屎官——清理各种意想不到的粪球!