实现功能
任务:
- 通过蓝牙读取开发板上的温度传感器数值;
- 当温度超过一定门槛后,再通过蓝牙控制开发板上的 LED 灯点亮以作报警。
针对这次活动和实现的功能,我一共整理了五篇文章:
- Thunderboard BG22 蓝牙开发板
- 蓝牙技术 Q&A
- 低功耗蓝牙 BLE 协议架构
- BlueZ gatttool 操作 Thunderboard 蓝牙开发板
- 使用 pygatt 读取 Thunderboard 温度数值并控制 LED
视频介绍:
https://www.bilibili.com/video/BV1Wf4y1y72k/
代码仓库:
https://github.com/luhuadong/Thunderboard-BG22
Thunderboard 的代码位于 demo/soc_thunderboard_brd4184a;应用程序的代码位于code/pygatt_test.py,一共 27 行代码。
代码:
import time
import pygatt
adapter = pygatt.GATTToolBackend()
counter = 30
threshold = 25
try:
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 -= 1
finally:
print("end")
adapter.stop()
心得体会
Funpack 第四期活动带来了精致小巧、功能齐全的 Thunderboard BG22 蓝牙开发板。本期任务不多,对于初次接触蓝牙开发的小伙伴来说,难点不在于写多少代码,而在于如何理解蓝牙协议栈及其工作方式。
我在本次实验中,Thunderboard BG22 的固件直接使用 Simplicity Studio 5 的 demo,不需要写一行代码,同时图形化的配置也能让用户更直观地理解蓝牙模型和配置 GATT 服务。应用程序部分,我是直接通过 gatttool 和 pygatt 来完成的,虽然只是很简单的命令行程序,但能帮助我们理解蓝牙模型。
总的来说,通过这次学习,我对 BLE 蓝牙协议栈有了一个大致的了解,也体验到好的开发工具(比如Simplicity Studio 5)对开发效率的提升。物联网有很大的未来,蓝牙是不可或缺的一种连接方式,还需要不断学习才能掌握蓝牙技术。
最后,再次感谢得捷电子和硬禾学堂,感谢 Funpack 第四期的各位小伙伴!