如何通过Arduino蓝牙模块向PC的Python脚本实时传输FSR数据?
解决FSR数据通过蓝牙从Arduino传输到Windows Python脚本的问题
我来帮你搞定这个蓝牙传输的问题,先从Arduino代码和Python脚本的修改说起,再给你提几个关键注意事项:
一、Arduino端(FSR+LinkSprite蓝牙屏蔽板)代码修改
LinkSprite蓝牙屏蔽板本质是通过串口与Arduino通信,核心要确保蓝牙模块的串口参数和代码匹配。你的原FSR代码逻辑没问题,只需要做小调整并注意上传细节:
修改后的Arduino代码:
const int fsrAnalogPin = A0; int fsrReading; void setup(void) { // 蓝牙模块默认波特率多为9600,和这里保持一致即可 Serial.begin(9600); // 多数LinkSprite蓝牙板默认是透传模式,无需额外设置AT指令 } void loop(void) { fsrReading = analogRead(fsrAnalogPin); int num = fsrReading / 3; // 两种发送方案可选: // 方案1(推荐):只发送纯数值,方便Python端解析 Serial.println(num); // 方案2:保持原带描述的字符串格式 // Serial.print("Analog reading = "); // Serial.println(num); delay(50); }
注意:上传代码时容易因为蓝牙模块占用串口导致失败,解决方法:
- 先把蓝牙屏蔽板从Arduino上拔下来,上传完代码再插回去
- 若蓝牙板有模式开关,切换到"Program"模式上传,完成后切回"Bluetooth"模式
二、Python端脚本修改
你的原脚本逻辑正确,但有几个坑必须修正:
- 蓝牙配对后Windows会分配新的COM口,不是原来的USB串口(比如你写的COM4),要去设备管理器找"Bluetooth Serial Port"对应的COM号
- 要处理串口读取的编码和空数据问题,避免乱码或卡死
- 加入异常处理,防止断开连接时程序崩溃
修改后的Python脚本:
import serial import time # 替换成你蓝牙串口的实际COM号,比如COM6 bluetooth_port = 'COM6' baud_rate = 9600 try: # 初始化串口,添加超时时间避免无数据时卡死 serial_bt = serial.Serial(bluetooth_port, baud_rate, timeout=1) print(f"已成功连接蓝牙串口 {bluetooth_port}") while True: # 读取一行数据,解码为字符串并去掉首尾换行/空格 value_read = serial_bt.readline().decode('utf-8').strip() # 只打印有效非空数据 if value_read: # 如果用方案1的纯数值,可转成整数输出 # print(f"FSR处理后数值:{int(value_read)}") # 如果用方案2的字符串,直接打印 print(f"收到数据:{value_read}") time.sleep(0.05) # 和Arduino的delay对应,降低CPU占用 except serial.SerialException as e: print(f"串口连接失败:{e}") print("请检查蓝牙COM号是否正确,或蓝牙是否已配对成功") except KeyboardInterrupt: print("程序已手动停止") finally: if 'serial_bt' in locals() and serial_bt.is_open: serial_bt.close() print("蓝牙串口已关闭")
三、必做的前置操作
- 蓝牙配对:在Windows设置里搜索LinkSprite蓝牙模块(通常名称是HC-05或LinkSprite Bluetooth),完成配对后去设备管理器查看分配的COM号
- 波特率校验:确保Arduino代码的波特率和蓝牙模块的默认波特率一致(默认9600,若之前修改过蓝牙模块波特率,要同步修改代码里的数值)
内容的提问来源于stack exchange,提问作者Arun Ajay




