从蓝牙设备读取数据低能量rfcomm python3

时间:2018-05-24 07:41:47

标签: python-3.x bluetooth bluetooth-lowenergy

遇到问题。有一个功耗低的蓝牙设备。 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中遇到过这个问题而且知道如何解决它?

1 个答案:

答案 0 :(得分:0)

RFCOMM是Bluetooth Classic的协议,BLE不支持它。使用RFCOMM与BLE设备通信是不可能的。

您应该阅读introduction到BLE,它将为您提供对BLE的基本了解。 任何进一步的猜测,都取决于BLE设备的配置方式。

如果您使用自己可以配置的设备,则可以创建一个支持Write和Indicate的特性。您可以指示(在特征值更改时通知以及新值是什么)并编写命令。将通过指示收到回复。