Arduino 和 PyBluez 之间的蓝牙通信

Posted

技术标签:

【中文标题】Arduino 和 PyBluez 之间的蓝牙通信【英文标题】:Bluetooth communication between Arduino and PyBluez 【发布时间】:2013-03-07 08:45:15 【问题描述】:

我正在尝试使用 Python PyBluez 在 Arduino Uno 板(带有蓝牙屏蔽)和我的 Linux 操作系统之间建立蓝牙通信。

我已成功将笔记本电脑与 Uno 配对。我可以连接到板子,但是板子没有读取正在发送的数据,也无法发送数据。

这是 Arduino 草图

#include <SoftwareSerial.h>

#define RxD 0    //receive data on digital 0
#define TxD 1 //transmit on digital 1

SoftwareSerial blueToothSerial(RxD, TxD);
int counter = 0;
int incoming;
void setup(void)
  Serial.begin(9600);
  //pinMode(RxD,INPUT);
  //pinMode(TxD,OUTPUT);
  setupBlueToothConnection();


void setupBlueToothConnection()
  blueToothSerial.begin(19200);
  blueToothSerial.print("\r\n+STWMOD=0\r\n"); //set the bluetooth work in slave mode
  blueToothSerial.print("\r\n+STNA=SeeedBTSlave\r\n"); //set the bluetooth name as     "SeeedBTSlave"
  blueToothSerial.print("\r\n+STOAUT=1\r\n"); // Permit Paired device to connect me
  //blueToothSerial.print("\r\n+STAUTO=0\r\n"); // Auto-connection should be forbidden here
  delay(2000); // This delay is required.
  blueToothSerial.print("\r\n+INQ=1\r\n"); //make the slave bluetooth inquirable
  Serial.println("The slave bluetooth is inquirable!");
  delay(2000); // This delay is required.
  blueToothSerial.flush();
 

void loop()
  if(blueToothSerial.available())
     Serial.println(blueToothSerial.read());
  blueToothSerial.write('x');

还有我的 Python 模块:

import bluetooth
import sys
bd_addr = "00:12:10:23:10:18" #itade address

port = 1
sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
sock.connect((bd_addr, port))
print 'Connected'
sock.settimeout(1.0)
sock.send("x")
print 'Sent data'

data = sock.recv(1)
print 'received [%s]'%data

sock.close()

我有 Arduino IDE 1.0.4,我的笔记本电脑运行的是 Ubuntu 11.10

【问题讨论】:

您可以使用 Arduino IDE 中的串行监视器向/从 Arduino 板发送和接收数据吗? 似乎对我有用。我在我的 Arduino Uno 上上传了你的脚本。并执行了python脚本。结果如下:user@ubuntu:~/$ python w.py Connected Sent data received [2]。您确定您的 Arduino 和蓝牙设备连接正常吗? 你使用的是哪个 Bth 盾牌:是this one? 不,RS232 @ton1c 是的,我可以通过 Arduino IDE 内的串行监视器发送/接收数据。 【参考方案1】:

你的这行:

data = sock.recv(1)

可能没有收到足够的字节,因此请尝试 Tim 发布的以下信息: Only receiving one byte from socket

【讨论】:

【参考方案2】:

使用 Itade Studio 蓝牙屏蔽,您必须在没有附加屏蔽的情况下上传代码,然后附加屏蔽。我很好奇其他蓝牙设备是否也是如此。

为了完成,在您的笔记本电脑和 Arduino Uno w/BT shield 之间建立通信:

    将您的笔记本电脑与蓝牙防护罩配对

    上传 Arduino 代码,屏蔽分离。

    附加防护罩

    运行 python 模块。

在 itade shield 上,当 D1 LED 变为绿色常亮时,您知道何时建立连接,而不是闪烁绿色。

【讨论】:

以上是关于Arduino 和 PyBluez 之间的蓝牙通信的主要内容,如果未能解决你的问题,请参考以下文章

arduino 怎么和上位机通信

Arduino---HC-05 蓝牙模块

Android蓝牙串口通信控制Arduino全彩呼吸灯

Python 连接蓝牙 python3.8 安装 pybluez

Python 连接蓝牙 python3.8 安装 pybluez

Android通过蓝牙HC06与Arduino通信实例