安卓蓝牙连接问题
我正在尝试在我的安卓手机上运行一个简单的Python脚本(使用SL4A),目的是连接一个BlueSMiRF蓝牙调制解调器(基于RN41设备)。但是无论我怎么尝试,连接时总是出现以下错误。
java.io.IOException: 无法启动服务发现
下面是我的Python脚本
import android
droid = android.Android()
droid.toggleBluetoothState(True)
result = droid.bluetoothConnect()
#result = droid.bluetoothConnect('00001101-0000-1000-8000-00805f9B34fb')
#result = droid.bluetoothConnect('00001101-0000-1000-8000-00805f9B34fb', '00:06:66:07:AE:44')
print repr(result)
droid.toggleBluetoothState(False)
我尝试了代码中显示的三种不同的bluetoothConnect()
方法。如果我使用前两种连接方式,我可以在设备列表中看到blueSMiRF
。
我的Arduino程序(在Arduino Mega上运行)如下。它只是将一个端口的字符转发到另一个端口。Serial
连接到我的笔记本电脑,波特率为9600,而Serial1
连接到BlueSMiRF
,波特率为115200。
void setup ()
{
// initialise serial
Serial.begin(9600);
Serial1.begin(115200);
}
void loop ()
{
if (Serial1.available())
{
char c = Serial1.read();
Serial.print(c);
}
if (Serial.available())
{
char c = Serial.read();
Serial1.print(c);
}
}
我可以使用Putty通过输入$$$
来访问blueSMiRF
的命令模式。一切看起来都正常。我只是对服务类和设备类的设置有些担心。这些设置都是出厂默认值,分别是0x0000
和0x1f00
,我在想服务类是否需要设置为0x1101
(SSP的UUID)。
其他信息: 安卓版本 2.3.3 SL4A r4
2 个回答
PyBluez这个模块总体上运行得不错,我在使用SL4A的时候也没有遇到什么问题。你可以试试直接用这个模块,完全跳过Java部分,可能会更顺利。
不过,PyBluez并不是一个纯粹的Python模块,所以它需要编译才能使用。不过这个问题已经解决了,最近的版本可以在Py4A网站的下载部分找到。我个人就是用这个版本,使用起来没有任何问题。
你只需要把这个版本下载到你的安卓手机上,打开Python4Android应用,点击导入模块,然后选择PyBluez的文件就可以了。
当蓝色的蓝牙模块 blueSMiRF 要和 Arduino 板子通信时,需要把 RX 和 TX 线对调一下。
如果你能通过电脑连接到 blueSMiRF,那么它的 RX 和 TX 设置就和 Arduino 板子一样。
电脑到 blueSMiRF 的连接方式是:
电脑的 TX 线连接到 Arduino 的 RX 线,再连接到 blueSMiRF 的 RX 线。
电脑的 RX 线则是连接到 Arduino 的 TX 线,再连接到 blueSMiRF 的 TX 线。
Arduino 到 blueSMiRF 的连接方式是:
Arduino 的 RX 线连接到 blueSMiRF 的 TX 线。
Arduino 的 TX 线连接到 blueSMiRF 的 RX 线。