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

Android 使用python通过蓝牙发送AT命令,android,python,bluetooth,at-command,rfcomm,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命令 我尝试使用pySerial,将rfcomm绑定并连接到手机,但没有响应: import serial phone = ser

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

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

hcitool scan
我使用以下工具浏览设备上的所有可用服务:

sdptool browse XX:XX:XX:XX:XX:XX
我获得了用于SMS/MMS服务的良好RFCOMM通道,现在我正在尝试发送AT命令

我尝试使用pySerial,将rfcomm绑定并连接到手机,但没有响应:

import serial

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

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

# *EMRDY: 1

# AT
# OK
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))
我在USB串行端口上尝试了相同的代码,得到了响应:

import serial

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

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

# *EMRDY: 1

# AT
# OK
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))
我尝试使用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 serial

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

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

# *EMRDY: 1

# AT
# OK
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))
注意:手机会显示一个提示窗口,提示我的电脑访问我的短信。我当然接受了


有人能告诉我哪里出了问题,我可以试试什么吗?

好吧,对于初学者来说,最好先检查一下你的主机和手机之间是否有蓝牙双向通信,就像你说的,它可以通过USB工作,那么,除非你还没有建立良好的通信,否则没有理由不使用蓝牙,所以我认为最好先尝试通过使用相同的字符串(类似于握手协议)发送和回复来实现良好的通信,并确保你知道python代码实际发送的内容,可能是使用蓝牙时看不见的额外字符,您不注意,这会使您的手机无法识别AT命令。

只是一个调试想法:可能在连接失败后立即发送AT命令,尝试在两者之间添加延迟,看看这是否有什么不同。是,但是我怎样才能测试计算机和电话之间的通信呢?我用l2ping打了这个设备,够了吗?我知道如何从计算机向手机发送字符串,但我不明白如果手机上没有运行代码,手机会如何响应。