【问题标题】:Send AT-command through bluetooth with python使用python通过蓝牙发送AT命令
【发布时间】:2015-05-13 10:06:46
【问题描述】:

我尝试通过蓝牙将 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

我在 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))

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

谁能告诉我哪里出了问题以及我可以尝试什么?

【问题讨论】:

  • 只是一个调试思路:可能在连接失败后立即发送AT命令,尝试在两者之间添加延迟,看看是否有什么不同?。

标签: android python bluetooth at-command rfcomm


【解决方案1】:

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

【讨论】:

  • 是的,但是如何测试我的电脑和手机之间的通信?我用 l2ping ping 了设备,够了吗?我知道如何将字符串从计算机发送到手机,但我不明白如果手机上没有运行代码,手机如何响应。
猜你喜欢
  • 1970-01-01
  • 2014-07-12
  • 2016-05-08
  • 1970-01-01
  • 2019-05-16
  • 2016-05-07
  • 2020-02-01
  • 1970-01-01
相关资源
最近更新 更多