【发布时间】:2017-08-09 08:21:51
【问题描述】:
这是我的第一个问题,我是工程师,不是程序员,所以请多多包涵:
我正在尝试将数据从 BLE 设备提取到我的树莓派 3。BLE 设备是一个 HC 05 模块,通过一个简单的 Arduino 脚本每 1 秒发送一次串行数据“9999”。
BlueZ 5.44 似乎配置正确,因为我可以毫无问题地连接和断开连接。
相关库的文档在这里:https://bitbucket.org/OscarAcena/pygattlib/overview
这是我的测试脚本:
from __future__ import print_function
import sys
from gattlib import GATTRequester, GATTResponse
import time
class Reader(object):
def __init__(self, address):
store=''
self.requester = GATTRequester(address, False)
self.connect()
self.request_data()
def connect(self):
print("Connecting...", end=' ')
self.requester.connect()
print("OK!")
def request_data(self):
time.sleep(2)
data = self.requester.read_by_handle(0x5)
print (data)
if __name__ == '__main__':
if len(sys.argv) < 2:
print("Usage: {} <addr>".format(sys.argv[0]))
sys.exit(1)
Reader(sys.argv[1])
print("Done.")
控制台输出:
Connecting... OK!
on notification, handle: 0x12 -> 00:39:39:39:39:
on notification, handle: 0x12 -> 00:39:39:39:39:
['\x00\x00']
Done.
后面列出的信息:
on notification, handle: 0x12 ->
是我正在寻找的数据。 ASCII“9999”的十六进制等效项。
但是,该信息从 pygattlib 库中包含的 C 文件打印到控制台。
在我的代码中,我可以访问的唯一输出是:
['\x00\x00']
这显然不是我要找的数据。
所以我的问题是:如何将所需的数据获取到脚本中的变量?我只是想避免使用 subprocess.Popen 来获取控制台数据,而这对我来说似乎完全没有必要。
【问题讨论】:
标签: python bluetooth serial-port raspberry-pi3 bluez