Arduino与PyBluez之间的蓝牙通信

3 投票
2 回答
16468 浏览
提问于 2025-04-17 19:33

我正在尝试让一个Arduino Uno开发板(上面装了蓝牙模块)和我的Linux操作系统通过Python的PyBluez库进行蓝牙通信。

我已经成功地将我的笔记本电脑和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。

2 个回答

-1

使用Itade Studio的蓝牙扩展板时,你需要先在没有连接扩展板的情况下上传代码,然后再把扩展板连接上。我很好奇其他蓝牙设备是否也需要这样操作。

为了让你更清楚如何让你的笔记本电脑和带蓝牙扩展板的Arduino Uno建立连接,下面是一些步骤:

  1. 先把你的笔记本电脑和蓝牙扩展板配对。

  2. 在没有连接扩展板的情况下上传Arduino代码。

  3. 然后把扩展板连接上。

  4. 最后运行Python模块。

在Itade扩展板上,当连接成功时,D1指示灯会变成稳定的绿色,而不是闪烁的绿色。

0

你这行代码:

data = sock.recv(1)

可能没有接收到足够的数据,所以可以试试Tim分享的信息:

只接收到一个字节的数据

撰写回答