物联网开发实战
郭朝斌
小米生态链企业秒秒测 IoT 事业部总监,前诺基亚高级工程师
17380 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 36 讲
物联网开发实战
15
15
1.0x
00:00/00:00
登录|注册

18 | 场景联动:智能电灯如何感知光线?(上)

你好,我是郭朝斌。
在上一讲,我们打造了自己的联网智能电灯,你可以通过手机小程序来控制它的打开和关闭,也就是实现远程控制。
其实,我们还可以进一步提高体验,让智能电灯可以基于环境的明暗来自动地打开和关闭。要做到这一点并不难,可以分为两个阶段,第一阶段是打造传感器设备来感知光照的强弱,判断出环境的明暗状态,第二阶段是创建一个场景联动,根据传感器的数值来控制智能电灯的状态。
这一讲,我先带你一步一步地实现第一阶段的工作(如有需要,你可以根据这份文档自行采购相关硬件)。

第一步:通信技术

首先,我们为光照传感器设备选择通信技术。
因为光照传感器设备的部署位置比较灵活,不太可能像智能电灯一样连接房间里的电源线,所以我们要用一种比 Wi-Fi 功耗更低的通信技术。这样的话,就算使用电池供电,也可以长时间(一年以上)持续工作。
经过对比,我建议选择 BLE 低功耗蓝牙技术(关于通信技术的选择策略,你可以参考第 2 讲)。随着智能手机的发展,蓝牙早已成为手机标配的通信技术,蓝牙芯片和协议栈的成熟度非常高,而且在设备的供应链方面,蓝牙芯片可以选择的供应商也非常多。
不过在正式开发之前,我还得为你补充说明一些 BLE 的相关知识。
BLE 设备可以在 4 种模式下工作:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何通过搭建光照传感器设备,实现智能电灯根据环境明暗自动开关的功能。首先选择了低功耗蓝牙技术作为光照传感器设备的通信技术,并介绍了BLE设备的四种工作模式。其次,选择了基于ESP32芯片的NodeMCU开发板,并准备了MicroPython环境。然后,通过安装MicroPython固件和搭建光照传感器的硬件电路,实现了光照强度数据的读取。最后,通过代码实现了光照强度的转换,使得智能电灯可以根据环境光线的强弱进行自动控制。文章还介绍了蓝牙广播包的格式定义和验证光照传感器设备的方法。总结一下,本文详细介绍了光照传感器的开发过程,补充了低功耗蓝牙技术的相关知识,并提供了思考题引发读者思考和交流。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《物联网开发实战》
新⼈⾸单¥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-21
    2
    3
  • 王宁
    MiBeacon 需要安装吗?有没有安装步骤

    作者回复: Mibeacon是一个协议规范,不需要安装

    2021-01-02
    1
  • Lee
    请问第四步的电路图是用的什么软件呀?看着3D模组做的很好看呀;

    作者回复: fritzing

    2020-12-22
    2
    1
  • LDxy
    在我提供的代码中其实也包含了一个可供连接获取数据的 Service 和 Characteristic,你发现了吗?你知道这些是基于低功耗蓝牙中的什么 Profile 协议吗? self._ble.gatts_write(self._handle, struct.pack("!h", int(light_den))) GATT (Generic Attribute Profile) 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。

    作者回复: 完全正确👍

    2020-12-21
    2
    1
  • 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-10
    2
  • 小伟
    学习本讲课程后,这边做个补充和勘误: 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-sensor
    2022-03-01
    7
  • 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 ESP32
    2021-07-04
    1
    2
  • RG
    购买ESP32如果选择其他开发板,需要注意是什么系列,ESP32?EPS32-C3?ESP32-S3?ESP32-S2?需要注意这个S2,不带蓝牙。同时买了几块,发现s2没有蓝牙,其他的都有,看了一眼 spec 的确是只有这个s2没有
    2022-07-05
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部