使用蓝牙从 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

Arduino 和 PyBluez 之间的蓝牙通信

通过 Arduino Micro Pro 和蓝牙获取 MPU6050 数据

怎么读取Android的蓝牙接收到的数据

arduino入门-用arduino uno制作基于蓝牙的数据监控系统