好大一只荣哥哥 - 检测温度,再通过蓝牙控制LED灯
通过蓝牙读取开发板上的温度传感器数值,超过一定门槛后,再通过蓝牙控制开发板上的LED灯点亮以作报警
标签
显示
理工男
更新2021-02-09
742

硬件介绍

Thunderboard™ BG22 开发套件

 

设计思路

方案选定:

前期大佬的方案很多,给了我这个小白很多的方向去研究、去思考,怎么来完成中间的过程。具体尝试过的:

​ 1、魔改官方的APP,在源码里修改,添加一个界面来实现;(放弃)

​ 2、用auto.js、Fv悬浮球等可以自动化的软件,做一个“外挂悬浮窗”用在官方Thunderboard 或者eFR Connect 等蓝牙调试工具来实现自动点击切换页面,不停的读取页面控件的属性值来判断是否需要点灯;(放弃)

​ 3、用第一期的STM32MP157C,使用python工具pygatt等来实现。

 

指定完成任务的功能演示

任务要求:

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

 

代码片段及操作步骤

STM32MP157C 在上次的基础上配置好后,安装必须的一些比如git、gcc、make、ssh、python、pip等工具之后,安装blueZ、pyserial、pygatt等。

普遍的操作:

```
sudo apt install bluez
pip install pyserial
pip install pygatt
```

当然,常规的方法也就是上面第三条命令我尝试了接近5天,总是不会报任何错误,但就是没有下文,在向各路大神请教完之后,大佬们表示并不常见(毕竟没有打印错误信息,鬼知道是哪儿的问题),终于看到离线安装的方法:

```
//首先还是用图形界面把下载的源码解压复制到了开发版用户目录下
cd pygatt-4.0.5/
python setup.py setup
```

这样操作完之后终于看到了successed,到此环境也就搭建好了。

===================================================================================

安装完 Bluez 协议栈后,系统会增加一些调试工具,包括 bluetootchctl、hciconfig、hcitool 和 gatttool 。

通过这调试工具 hcitool lescan 我们可以看到BG22的mac地址为84:2E:14:31:B8:9E

```
debian@npi:~$ sudo hcitool lescan
LE Scan ...
5D:5B:2B:7A:80:96 (unknown)
5D:5B:2B:7A:80:96 (unknown)
EA:24:9A:D6:3F:35 LS Band 5
54:48:E6:51:8E:80 (unknown)
40:2C:76:D0:82:61 QJB2
84:2E:14:31:B8:9E Thunderboard #47262
84:2E:14:31:B8:9E (unknown)
57:4C:54:24:7B:65 (unknown)
5D:5D:6B:29:5C:7B (unknown)

//通过gatttool -b mac地址 -I命令建立连接
gatttool -b 60:A4:23:C9:69:9C -I
```

建立连接后,通过characteristics 命令输出明细

```
debian@npi:~$ gatttool -b 84:2E:14:31:B8:9E -I
[84:2E:14:31:B8:9E][LE]> connect
Attempting to connect to 84:2E:14:31:B8:9E
Connection successful
[84:2E:14:31:B8:9E][LE]> characteristics
handle: 0x0002, char properties: 0x20, char value handle: 0x0003, uuid: 00002a05-0000-1000-8000-00805f9b34fb
handle: 0x0005, char properties: 0x02, char value handle: 0x0006, uuid: 00002b2a-0000-1000-8000-00805f9b34fb
handle: 0x0007, char properties: 0x0a, char value handle: 0x0008, uuid: 00002b29-0000-1000-8000-00805f9b34fb
handle: 0x000a, char properties: 0x0a, char value handle: 0x000b, uuid: 00002a00-0000-1000-8000-00805f9b34fb
handle: 0x000c, char properties: 0x02, char value handle: 0x000d, uuid: 00002a01-0000-1000-8000-00805f9b34fb
handle: 0x000f, char properties: 0x02, char value handle: 0x0010, uuid: 00002a29-0000-1000-8000-00805f9b34fb
handle: 0x0011, char properties: 0x02, char value handle: 0x0012, uuid: 00002a24-0000-1000-8000-00805f9b34fb
handle: 0x0013, char properties: 0x02, char value handle: 0x0014, uuid: 00002a25-0000-1000-8000-00805f9b34fb
handle: 0x0015, char properties: 0x02, char value handle: 0x0016, uuid: 00002a27-0000-1000-8000-00805f9b34fb
handle: 0x0017, char properties: 0x02, char value handle: 0x0018, uuid: 00002a26-0000-1000-8000-00805f9b34fb
handle: 0x0019, char properties: 0x02, char value handle: 0x001a, uuid: 00002a23-0000-1000-8000-00805f9b34fb
handle: 0x001c, char properties: 0x12, char value handle: 0x001d, uuid: 00002a19-0000-1000-8000-00805f9b34fb
handle: 0x0020, char properties: 0x02, char value handle: 0x0021, uuid: 00002a76-0000-1000-8000-00805f9b34fb
handle: 0x0022, char properties: 0x02, char value handle: 0x0023, uuid: 00002a6e-0000-1000-8000-00805f9b34fb
handle: 0x0024, char properties: 0x02, char value handle: 0x0025, uuid: 00002a6f-0000-1000-8000-00805f9b34fb
handle: 0x0026, char properties: 0x02, char value handle: 0x0027, uuid: c8546913-bfd9-45eb-8dde-9f8754f4a32e
handle: 0x0028, char properties: 0x28, char value handle: 0x0029, uuid: c8546913-bf03-45eb-8dde-9f8754f4a32e
handle: 0x002c, char properties: 0x02, char value handle: 0x002d, uuid: ec61a454-ed01-a5e8-b8f9-de9ec026ec51
handle: 0x002f, char properties: 0x12, char value handle: 0x0030, uuid: 00002a56-0000-1000-8000-00805f9b34fb
handle: 0x0034, char properties: 0x0a, char value handle: 0x0035, uuid: 00002a56-0000-1000-8000-00805f9b34fb
handle: 0x0039, char properties: 0x10, char value handle: 0x003a, uuid: c4c1f6e2-4be5-11e5-885d-feff819cdc9f
handle: 0x003c, char properties: 0x10, char value handle: 0x003d, uuid: b7c4b694-bee3-45dd-ba9f-f3b5e994f49a
handle: 0x003f, char properties: 0x28, char value handle: 0x0040, uuid: 71e30b8c-4131-4703-b0a0-b0bbba75856b
handle: 0x0043, char properties: 0x12, char value handle: 0x0044, uuid: f598dbc5-2f01-4ec5-9936-b3d1aa4f957f
handle: 0x0046, char properties: 0x12, char value handle: 0x0047, uuid: f598dbc5-2f02-4ec5-9936-b3d1aa4f957f
handle: 0x0049, char properties: 0x28, char value handle: 0x004a, uuid: f598dbc5-2f03-4ec5-9936-b3d1aa4f957f
```

我们依次通过 char-read-hnd 0x0049 */char-read-hnd handle地址*

查到了温度的uuid为 00002a6e-0000-1000-8000-00805f9b34fb

LED读写对应的handle为 0x0035

从互联网上东拼西凑,摸索出这个循环判断的主程序:

```
# -*- coding: UTF-8 -*-
import time
import pygatt

adapter = pygatt.GATTToolBackend()
counter = 50 #循环次数,当前延迟1秒执行一次循环,总环节即30秒
tempset = 19 #设定点亮LED灯的温度阈值

try:
adapter.start()
device = adapter.connect('84:2E:14:31:B8:9E') #开发版的MAC地址

while counter > 0:
value = device.char_read("00002a6e-0000-1000-8000-00805f9b34fb") #温度的UUID
temp = (value[1] * 256 + value[0]) / 100
print("[{:0>2d}] temp: {:.2f} °C".format(counter, temp))
if temp > tempset:
device.char_write_handle(0x0035, bytearray([0x01])) #handle地址为led的地址
print("LED ON")
else:
device.char_write_handle(0x0035, bytearray([0x00]))
print("LED OFF")
time.sleep(1)
counter -= 1
finally:
print("监测结束,请重新运行!")
adapter.stop()
```

检查代码的缩进格式,格式无误后保存为.py文件,上传到用户目录下,通过以下方式执行:

```
python temp.py
```

运行后会在ssh端口输出当前的温度以及LED的状态:

```
debian@npi:~$ python temp.py
[30] temp: 14.00 °C
LED OFF
[29] temp: 14.00 °C
LED OFF
·····
[01] temp: 19.00 °C
LED ON
监测结束,请重新运行!
```

可以看到温度超过设定温度后led会常亮做警示,温度降低后led会熄灭。

 

心得体会

​首先,条条大路通罗马,同样的一道题可以有很多解题思路。开源的一个方式给了爱好者们更好的一个相互学习的环境,可以在交流中成长。在实践的过程中,经常发现自己的知识技能储备总是太少,不够用。不过这也是一个成长的过程,只要不停的学习,不要在落后的路上越走越远就是小小的成功。

​最后还是希望硬禾学堂的老师们多多推出一些好玩的“玩具”,能够再有机会跟随大佬们一起学习、进步!

​谢谢各位老师,新年快乐!

​ == Happy New Year!===

 

 

 

团队介绍
好大一只荣哥哥
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号