【Funpack】使用 pygatt 读取 Thunderboard 温度数值并控制 LED

网友投稿 574 2022-11-09

【Funpack】使用 pygatt 读取 Thunderboard 温度数值并控制 LED

【Funpack】使用 pygatt 读取 Thunderboard 温度数值并控制 LED

​​pygatt​​ 是一个用于读写蓝牙设备的 GATT 描述符的 Python 模块,可用于任何符合标准 GATT 描述符行为的设备,例如健身追踪器、传感器等等。

pygatt 支持两种不同后端并提供了 Pythonic API:

BlueZ (requires Linux), using the​​gatttool​​ command-line utility.Bluegiga’s BGAPI, compatible with USB adapters like the BLED112.

我们在 Linux 上进行测试,因此选择使用 gatttool 后端即可。

安装

$ pip install

API

这里主要介绍几个常用的读写 characteristic 的接口函数。

char_read

功能:通过 UUID 读取一个特征值

char_read(uuid, *args, **kwargs) method of pygatt.backends.gatttool.device.GATTToolBLEDevice instance Reads a Characteristic by UUID. uuid -- UUID of Characteristic to read as a string. Returns a bytearray containing the characteristic value on success. Example: my_ble_device.char_read('a1e8f5b1-696b-4e4c-87c6-69dfe0b0093b')

char_read_handle

功能:通过 handle 读取一个特征值

char_read_handle(handle, *args, **kwargs) method of pygatt.backends.gatttool.device.GATTToolBLEDevice instance Reads a Characteristic by handle. handle -- handle of Characteristic to read. Returns a bytearray containing the characteristic value on success. Example: my_ble_device.char_read_handle(5)

char_write

功能:通过 UUID 找到特征值,并写入 value

char_write(uuid, value, wait_for_response=True) method of pygatt.backends.gatttool.device.GATTToolBLEDevice instance Writes a value to a given characteristic UUID. uuid -- the UUID of the characteristic to write to. value -- a bytearray to write to the characteristic. wait_for_response -- wait for response after writing. A GATT "command" is used when not waiting for a response. The remote host will not acknowledge the write. Example: my_ble_device.char_write('a1e8f5b1-696b-4e4c-87c6-69dfe0b0093b', bytearray([0x00, 0xFF]))

char_write_handle

功能:通过 handle 找到特征值,并写入 value

char_write_handle(handle, *args, **kwargs) method of pygatt.backends.gatttool.device.GATTToolBLEDevice instance Writes a value to a given characteristic handle. This can be used to write to the characteristic config handle for a primary characteristic. hande -- the handle to write to. value -- a bytearray to write to the characteristic. wait_for_response -- wait for response after writing. Example: my_ble_device.char_write_handle(42, bytearray([0x00, 0xFF]))

示例代码

针对 Thunderboard,我们要完成以下任务:

通过蓝牙读取开发板上的温度传感器数值;当温度超过一定门槛后,再通过蓝牙控制开发板上的 LED 灯点亮以作报警。

实际上就变得很简单了!前面《​​BlueZ gatttool 操作 Thunderboard 蓝牙开发板​​》已经知道了 Thunderboard 的地址、温度传感器和 LED IO 特征值的 UUID 和 handle。

import timeimport pygattadapter = pygatt.GATTToolBackend()counter = 10threshold = 25try: adapter.start() device = adapter.connect('60:A4:23:C9:69:9C') while counter > 0: value = device.char_read("00002a6e-0000-1000-8000-00805f9b34fb") temp = (value[1] * 256 + value[0]) / 100 print("[{:0>2d}] temp: {:.2f} 'C".format(counter, temp)) if temp > threshold: device.char_write_handle(0x0022, bytearray([0x01])) # LED on else: device.char_write_handle(0x0022, bytearray([0x00])) # LED off time.sleep(1) counter -= 1finally: print("end") adapter.stop()

这里设置了温度阈值为 25 ℃。运行程序,你将会可以看到:当温度超过 25 ℃ 时,Thunderboard 板载的 LED 灯就会亮起;当温度降到 25 ℃ 以下,LED 等就会熄灭。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot配置mysql数据库spring.datasource.url报错的解决
下一篇:python 删除gbk无法编码符号——递归函数返回None的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~