HC-05传输Arduino数据至树莓派Python时收到异常数值问题
问题现象
- 基于HC-05蓝牙模块搭建Arduino到树莓派的通信链路,按TX/RX交叉规则接线,HC-05接Arduino 1、2号引脚
- 前期使用
int.from_bytes实现字节转整数的解析逻辑可正常运行,后续接收端持续收到255、254、10这类异常数值 - 已完成排查操作:断开Arduino与PC的USB连接,改用电池独立供电,异常未消除;修改Arduino端固件,配置为仅发送固定值2,树莓派端Python程序依旧收到前述异常值
排查&修复方案
按优先级依次排查以下问题,绝大多数同类乱码问题都可解决:
- 三端波特率不匹配
HC-05出厂默认波特率通常为9600(部分批次为38400),必须保证Arduino端串口初始化波特率、HC-05实际配置波特率、树莓派端Python串口打开时设置的波特率三者完全一致,且统一配置为1停止位、无校验位。
可将HC-05切换到AT模式,发送AT+UART?指令查询模块当前实际波特率,不要直接按经验值设置参数。 - 串口引脚接线错误
Arduino Uno/Nano的硬件串口固定为0脚(RX)、1脚(TX),2脚是通用数字IO,不具备硬件串口功能。如果把HC-05的RX端接到2脚,通信链路根本没有正确连通,必然出现乱码。
两种修正方式可选:- 用硬件串口通信:HC-05 TX接Arduino 0(RX),HC-05 RX接Arduino 1(TX),注意:烧录Arduino固件时必须拔掉HC-05接线,避免和USB串口冲突导致烧录失败
- 用软串口通信:将HC-05接到2个非0/1的数字引脚,使用
SoftwareSerial库初始化模拟串口和HC-05通信,不占用USB调试用的硬件串口
- 电平不匹配
HC-05是3.3V逻辑电平器件,Arduino引脚输出为5V电平,如果直接把Arduino的TX引脚接到HC-05的RX引脚,会出现电平识别错误,长期使用还可能烧坏HC-05模块。
可在Arduino TX到HC-05 RX的线路上串联1个1k~2kΩ的电阻做简单分压,将5V电平降到3.3V区间即可。 - 解析逻辑错误
Python端读取串口数据时,不要先做字符串解码再转数值,直接对原始字节做转换即可,参考实现:import serial # 端口根据实际情况修改,波特率和模块配置保持一致 bt_ser = serial.Serial('/dev/rfcomm0', baudrate=9600, timeout=1) while True: raw_data = bt_ser.read(1) if raw_data: recv_num = int.from_bytes(raw_data, byteorder='little', signed=False) print(recv_num)
内容的提问来源于stack exchange,提问作者PabloUY
相关产品推荐
相关产品推荐

