遇到问题。有一个功耗低的蓝牙设备。 BLE。目标是向设备发送命令并获取数据。 例如:command - 0x ** 0x ** 0x **,其中first 0x ** - code命令,second 0x - data lenght。响应桅杆为 - 0x ** 0x ** 0x **。我无法向设备发送命令。该设备由RFCOMM工作。实际上是可用的代码,但它没有给出结果 - 它表示设备已关闭。
from bluetooth import *
import socket
class Work:
def __init__(self):
self.rfcon = BluetoothSocket(RFCOMM)
# self.socket = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM)
self.server = '**:**:**:**:**:**'
self.port = 1
self.data = '0x01 0x00 0x00'
def scan_device(self):
connection = self.rfcon.connect((self.server, self.port))
print('con ===>>> ', connection)
senddata = self.rfcon.send(self.data)
print('senddata ====>>>> ', senddata)
data = self.rfcon.recv(256)
if not data:
print("no data!!!")
self.rfcon.close()
else:
print(data)
self.rfcon.close()
if __name__ == '__main__':
a = Work()
a.scan_device()
a.rfcon.close()
我通过另一个图书馆 - 代码:
from bluepy.btle import *
class Work:
def __init__(self):
self.initialize = Peripheral()
def scan_devices(self):
scanner = Scanner()
devices = scanner.scan(10.0)
for dev in devices:
print("Device %s (%s), RSSI=%d dB" % (dev.addr, dev.addrType, dev.rssi))
for (adtype, desc, value) in dev.getScanData():
print(" %s = %s" % (desc, value))
def connect_to_device(self):
print('start con')
connection = self.initialize.connect('**:**:**:**:**:**', 'public')
print('initialize complite')
return connection
def check_device_status(self):
print('test ====>>> ', self.initialize.getCharacteristics())
cmd = '0x01 0x00 0x00 0x20 0x00'.encode('UTF-8')
print(cmd)
status_device = self.initialize.readCharacteristic(cmd)
print('Device status => ', status_device)
def diconnect(self):
self.initialize.disconnect()
if __name__ == '__main__':
a = Work()
a.connect_to_device()
a.check_device_status()
a.diconnect()
它提供连接但不发送命令并且不返回值,因为此库不知道RFCOMM是什么。也许有人在python中遇到过这个问题而且知道如何解决它?
答案 0 :(得分:0)
RFCOMM是Bluetooth Classic的协议,BLE不支持它。使用RFCOMM与BLE设备通信是不可能的。
您应该阅读introduction到BLE,它将为您提供对BLE的基本了解。 任何进一步的猜测,都取决于BLE设备的配置方式。
如果您使用自己可以配置的设备,则可以创建一个支持Write和Indicate的特性。您可以指示(在特征值更改时通知以及新值是什么)并编写命令。将通过指示收到回复。