18 | 场景联动:智能电灯如何感知光线?(上)
郭朝斌
你好,我是郭朝斌。
在上一讲,我们打造了自己的联网智能电灯,你可以通过手机小程序来控制它的打开和关闭,也就是实现远程控制。
其实,我们还可以进一步提高体验,让智能电灯可以基于环境的明暗来自动地打开和关闭。要做到这一点并不难,可以分为两个阶段,第一阶段是打造传感器设备来感知光照的强弱,判断出环境的明暗状态,第二阶段是创建一个场景联动,根据传感器的数值来控制智能电灯的状态。
第一步:通信技术
首先,我们为光照传感器设备选择通信技术。
因为光照传感器设备的部署位置比较灵活,不太可能像智能电灯一样连接房间里的电源线,所以我们要用一种比 Wi-Fi 功耗更低的通信技术。这样的话,就算使用电池供电,也可以长时间(一年以上)持续工作。
经过对比,我建议选择 BLE 低功耗蓝牙技术(关于通信技术的选择策略,你可以参考第 2 讲)。随着智能手机的发展,蓝牙早已成为手机标配的通信技术,蓝牙芯片和协议栈的成熟度非常高,而且在设备的供应链方面,蓝牙芯片可以选择的供应商也非常多。
不过在正式开发之前,我还得为你补充说明一些 BLE 的相关知识。
BLE 设备可以在 4 种模式下工作:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何通过搭建光照传感器设备,实现智能电灯根据环境明暗自动开关的功能。首先选择了低功耗蓝牙技术作为光照传感器设备的通信技术,并介绍了BLE设备的四种工作模式。其次,选择了基于ESP32芯片的NodeMCU开发板,并准备了MicroPython环境。然后,通过安装MicroPython固件和搭建光照传感器的硬件电路,实现了光照强度数据的读取。最后,通过代码实现了光照强度的转换,使得智能电灯可以根据环境光线的强弱进行自动控制。文章还介绍了蓝牙广播包的格式定义和验证光照传感器设备的方法。总结一下,本文详细介绍了光照传感器的开发过程,补充了低功耗蓝牙技术的相关知识,并提供了思考题引发读者思考和交流。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《物联网开发实战》,新⼈⾸单¥59
《物联网开发实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(14)
- 最新
- 精选
- 郭朝斌置顶由于MicroPython官方的ble_advertising.py中payload函数,不支持广播service data,所以我进行了增补: 常量定义增加:_ADV_TYPE_SERVICE_DATA = const(0x16) advertising_payload函数中增加: if service_data: _append(_ADV_TYPE_SERVICE_DATA, service_data) 希望大家可以自己动手实践一下哈。2020-12-27
- 加油加油老师您好,关于开发板这类的硬件知识如何学习比较好?我平时是做云平台的业务,对硬件部分有点陌生
作者回复: 可以先跟着实验做一下,熟悉起来。专门了解硬件的话可以买本书,比如Arduino
2020-12-2123 - 王宁MiBeacon 需要安装吗?有没有安装步骤
作者回复: Mibeacon是一个协议规范,不需要安装
2021-01-021 - Lee请问第四步的电路图是用的什么软件呀?看着3D模组做的很好看呀;
作者回复: fritzing
2020-12-2221 - LDxy在我提供的代码中其实也包含了一个可供连接获取数据的 Service 和 Characteristic,你发现了吗?你知道这些是基于低功耗蓝牙中的什么 Profile 协议吗? self._ble.gatts_write(self._handle, struct.pack("!h", int(light_den))) GATT (Generic Attribute Profile) 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。
作者回复: 完全正确👍
2020-12-2121 - Josen老师,我是一个软件工程师,已经在软件行业工作两年了,最近想进军物联网,对硬件这块不是特别熟悉,买了块esp32 想让它作为gatt server,然后用蓝牙调试宝测试能否连接成功,但是我发现很吃力,我去micropython官网查看了esp32的相关文档,发现还是云里雾里的,没有esp32完整的例子可以参考的,请问老师我需要去哪里寻找资源呢?csdn,博客园这些我都找了,关于esp32 micropython调用蓝牙的案例少之又少
作者回复: 现在资料不多,建议看看官网ubluetooth server部分的介绍,然后就是源码,只要理解蓝牙gatt的原理,代码很好读的
2021-02-22 - 加油加油老师,由于晚购买的实验套件,想问两个问题:1. 我运行程序之后,输出信息 Light Lux: 2268 Light ADC value: 1553 Service Data: b'\x95\xfe\x10\x00\x02\x00\x01\xe8\xdb\x84\x01\tj\x07\x10\x03\x00\xe3\x08' GAP procedure initiated: stop advertising. GAP procedure initiated: advertise; disc_mode=2 adv_channel_map=7 own_addr_type=0 adv_filter_policy=0 adv_itvl_min=800 adv_itvl_max=800 sd_adv bytearray(b'\x02\x01\x06\x14\x16\x95\xfe\x10\x00\x02\x00\x01\xe8\xdb\x84\x01\tj\x07\x10\x03\x00\xe3\x08') sdddd_adv bytearray(b'\x02\x01\x06\x14\x16\x95\xfe\x10\x00\x02\x00\x01\xe8\xdb\x84\x01\tj\x07\x10\x03\x00\xe3\x08') GAP procedure initiated: stop advertising. GAP procedure initiated: advertise; disc_mode=2 adv_channel_map=7 own_addr_type=0 adv_filter_policy=0 adv_itvl_min=800 adv_itvl_max=800 这个是否正常呢,我打开软件没有扫描到nodemcu的蓝牙 2. 是不是esp32 运行这个程序的时候 ampy连接不到串口 我一直连接不上
作者回复: 运行过程中,可以连接串口,你可以连接上看看具体调试信息
2021-01-102 - 小伟学习本讲课程后,这边做个补充和勘误: 1. 补充ble_advertising.py源文件来源(https://raw.githubusercontent.com/micropython/micropython/master/examples/bluetooth/ble_advertising.py) 2. ble_lightsensor.py中build_mi_sdadv方法下语句`service_data = struct.pack("<3HB",uuid,fc,pid,fcnt)+mac+struct.pack("<H2BH",objid,objlen,0,objval)`里的mac应修改为mac[1]; 原因: mac是一个tuple对象 ex: (0, b'4\\x86]\\xb6\\xeb\\x0e'), 应取第二个值 3. 本讲相关代码已上传github,供大家参考:https://github.com/Kevin181/geektime/tree/main/iot/led/light-sensor2022-03-017
- A=X+Y+Z老师,这个报错,换了几个版本的固件都没有用 File "main.py", line 3, in <module> File "ble_lightsensor.py", line 6, in <module> ImportError: no module named 'ble_advertising' MicroPython v1.13 on 2020-09-02; ESP32 module with ESP322021-07-0412
- RG购买ESP32如果选择其他开发板,需要注意是什么系列,ESP32?EPS32-C3?ESP32-S3?ESP32-S2?需要注意这个S2,不带蓝牙。同时买了几块,发现s2没有蓝牙,其他的都有,看了一眼 spec 的确是只有这个s2没有2022-07-05
收起评论