使用python通过蓝牙发送AT命令

时间:2015-05-13 10:06:47

标签: android python bluetooth at-command rfcomm

我尝试通过蓝牙将AT命令从我的电脑(ubuntu 13.04)发送到我的手机(Android 5.1)。我想阅读短信。

我通过以下方式检索手机的MAC地址:

hcitool scan

我使用以下方式浏览设备上的所有可用服务:

sdptool browse XX:XX:XX:XX:XX:XX

我获得了用于SMS / MMS服务的良好RFCOMM频道,现在我尝试发送AT命令。

我尝试使用带有绑定和连接的rfcomm的pySerial到我的手机但没有响应:

import serial

phone = serial.Serial('/dev/rfcomm0', 115200, timeout=2)
phone.write(b'AT\r')
data = phone.readall()
print data

我在USB串口尝试了相同的代码,我得到了回复:

import serial

phone = serial.Serial('/dev/ttyACM0', 115200, timeout=2)
phone.write(b'AT\r')
data = phone.readall()
print data

# *EMRDY: 1

# AT
# OK

我尝试使用pyBluez但问题相同,我的AT命令没有响应:

import bluetooth

client_sock = bluetooth.BluetoothSocket( bluetooth.RFCOMM )
client_sock.connect(('XX:XX:XX:XX:XX:XX', 4))
client_sock.send(b'AT\r')
data = client_sock.recv(1024)
print "received [%s]" % data

我终于尝试使用原生的python套接字,但没有回复:

import socket

s = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
s.connect(('XX:XX:XX:XX:XX:XX',4))
s.send(b'AT\r')
data = s.recv(1024)
s.close()
print('Received', repr(data))

注意:手机会显示一个提示窗口,表示我的电脑可以访问我的短信。我当然接受了。

谁能告诉我什么是错的?我可以尝试什么?

1 个答案:

答案 0 :(得分:0)

嗯,首先,最好先检查一下你的主机与蓝牙电话之间是否有双向通信,就像你说的那样,它确实可以用USB工作,那么就没有理由不这样做使用蓝牙,除非你还没有建立良好的沟通,所以我认为最好首先尝试通过发送和回复相同的字符串(有点握手协议)进行良好的沟通,并确保你知道你的python代码实际发送了什么,可能是使用蓝牙的看不见的额外字符,你不注意,这使你的AT命令无法通过手机识别。