使用pyserial或pybluez从arduino和HC-05模块接收数据

时间:2016-10-16 04:11:59

标签: python-2.7 bluetooth arduino-uno pyserial pybluez

我无法从arduino和蓝牙模块HC-05接收数据。我试图用PySerial和Pybluez接收数据,但没有一个对我有效。如果有人能够回顾我做错了什么,我感激不尽。

我在StackOverflow中发现了这个,但它没有用。 Bluetooth communication between Arduino and PyBluez

这是我的arduino代码:

  #include <SoftwareSerial.h>

  #define RxD 10
  #define TxD 11

  SoftwareSerial BTSerial(RxD, TxD);

  void setup()
  {
    BTSerial.flush();
    delay(500);

    BTSerial.begin(9600);
    BTSerial.println("The controller has successfuly connected to the PC");

    Serial.begin(9600);
    delay(100);
  }

  void loop()
  {
    BTSerial.write("{Dato1: 545}");
  }

这是我用pyserial测试它的方式:

import serial

device_handler = serial.Serial('COM6', 9600, timeout=1)
count = 0
while (count < 5):
    print device_handler.readline()
    count += 1

device_handler.close()

这是我尝试使用pybluez的方式,如此链接中所述: https://people.csail.mit.edu/albert/bluez-intro/x232.html

import bluetooth
import sys
bd_addr = "20:15:03:19:27:02"

port = 1
sock = bluetooth.BluetoothSocket( bluetooth.RFCOMM )
sock.connect((bd_addr, port))
print 'Connected'
sock.settimeout(1.0)

count = 0;
while (count < 10):
    data = sock.recv(12)
    print 'received: %s'%data

    count += 1


sock.close()

这两种形式都不适合我。 Pyserial不会抛出错误并执行五个读数。显然它什么都没得到。另一方面,pybluez抛出了这个异常:

IOError: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

请求你的帮助,抱歉我的英语太差了。

1 个答案:

答案 0 :(得分:0)

在你的PyBluez代码中,你有这行代码

sock.settimeout(1.0)

这是导致您的错误的行,因为Arduino在1(第二?)时间段内没有响应您的蓝牙连接。要解决此问题,请删除该行代码或对超时进行数学处理。