使用蓝牙从 Arduino 读取数据到 Python
Posted
技术标签:
【中文标题】使用蓝牙从 Arduino 读取数据到 Python【英文标题】:Reading data from Arduino to Python using bluetooth 【发布时间】:2019-02-13 17:06:36 【问题描述】:我正在通过蓝牙 (jy-mcu HC-06) 使用 Arduino 发送数据,使用以下简单代码:
int a;
void setup()
Serial.begin(57600);
a = 0;
delay(2000);
void loop()
Serial.println(a);
a++;
delay(40);
我的问题是,当我尝试使用 Python(在 Linux 上)读取数据时,前 20 秒(大约),一些数据已损坏。但在此之后,我可以正确读取数据而不会出现任何其他错误。 Python代码:
import serial
ser = serial.Serial()
ser.port = "/dev/rfcomm0"
ser.baudrate = 57600
ser.open()
while True:
print(ser.readline())
Arduino 代码是一个循环,它每 40 毫秒发送一个整数,并将一个与该整数相加。数据损坏示例:
108
109
11161831191
192
193
194
195
1111
122222222222
2220
22266
267
268
269
270
133333533333633333373
33333333344444444444444444444444444444544444444444444444491
492
493
494
我使用外部电源为 Arduino 供电,该电源可提供 5V 和 3A 的稳定电流。
我尝试使用 android 蓝牙终端应用程序读取数据,它一直运行良好。因此,我认为错误出在 Python 代码中。
我在网上查阅了很多资料,对代码做了很多修改,但都没有解决问题。这是我最新的代码之一,只是为了展示我的一些测试:
import serial, time
import sys
ser = serial.Serial()
ser.port = "/dev/rfcomm0"
ser.baudrate = 57600
ser.timeout = 1
ser.setDTR(False)
ser.setRTS(False)
ser.open()
old_data = 0
new_data = 0
ser.flushInput()
ser.flush()
ser.flushOutput()
time.sleep(1)
print("Start")
while True:
raw_data = ser.readline()
try:
ser.flushInput()
new_data = int(raw_data)
ser.flush()
except ValueError:
pass
print raw_data
if (old_data != new_data -1 and old_data != 0):
print('ERROR#####################################################')
old_data = new_data
time.sleep(0.01)
感谢您的帮助,当然,我会在此处发布有关此问题的任何更新。
提前谢谢你!
【问题讨论】:
【参考方案1】:蓝牙模块(HC-06)的波特率与Arduino不同。
在你的 python 代码中尝试ser.baudrate = 115200
。
【讨论】:
以上是关于使用蓝牙从 Arduino 读取数据到 Python的主要内容,如果未能解决你的问题,请参考以下文章
Arduino没有形成蓝牙连接/将传感器数据从arduino发送到android
将数据从腻子发送到连接在 Arduino 上的蓝牙 HC-6