15 分钟搞定:ESP32-C6 打造低功耗 Zigbee 光照传感器
15 分钟搞定ESP32-C6 打造低功耗 Zigbee 光照传感器【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32用 arduino-esp32 仓库里的现成示例你只需要一块 ESP32-C6 或 H2 开发板加一个光敏电阻就能做出一个标准 ESP32 Zigbee 光照传感器。它是 Arduino Zigbee 终端设备入网后自动向协调器上报 lux 值平台里直接看到光照曲线。成果速览成品行为是这样的传感器加入 Zigbee 网络后每秒读一次光照lux 值变化超过阈值就上报一次串口里滚动打印原始值与换算结果平台侧自动识别为 illuminance 实体。接线只有四根线光敏电阻和 10kΩ 下拉电阻构成分压[ESP32-C6] [光敏电阻模块] 3V3 ------------ VCC GND ------------ GND GPIO6 ---------- OUT GND ------------ 下拉电阻另一端GPIO6 是模拟输入引脚代码里可以改。备料硬件清单与 IDE 配置硬件清单如下类别规格说明主控ESP32-C6 / ESP32-H2 开发板二者都支持 Zigbee 3.0传感器GL5528 光敏电阻模拟输出型电阻10kΩ 下拉电阻与光敏电阻构成分压电源MicroUSB 5V 数据线烧录与调试共用软件侧在 Arduino IDE 里完成两件事。第一安装开发板包文件 首选项添加 esp32 包索引网址然后工具 开发板 开发板管理器搜索esp32安装第二四个关键选项一次设好菜单项选择值作用开发板ESP32C6 Dev Module或 ESP32H2 Dev Module选中板子Zigbee 模式Zigbee ED (end device)终端设备模式编译期校验分区方案Zigbee 4MB with spiffsZigbee 专用分区USB CDC On BootEnabled串口监视器可用Zigbee 库在仓库的 libraries/Zigbee/ 目录里跟随开发板包一起就位装好后检查 Zigbee.h 是否存在即可。固件三处关键代码走查示例代码在 Zigbee_Illuminance_Sensor.ino打开它重点看三处。1端点注册与启动第 38、40、79-107 行端点Endpoint是 Zigbee 设备里的房间号协调器靠它找你要数据。下面代码做了四件事把 GPIO6 定义为传感器引脚创建端点对象注册进 Zigbee 核心启动并等入网。哪里可以改端点号、厂商名、量程上下限。// Zigbee_Illuminance_Sensor.ino 第38、40、79-107行节选 uint8_t illuminance_sensor_pin 6; ZigbeeIlluminanceSensor zbIlluminanceSensor ZigbeeIlluminanceSensor(ZIGBEE_ILLUMINANCE_SENSOR_ENDPOINT); // 端点号 9 // setup() 内 zbIlluminanceSensor.setManufacturerAndModel(Espressif, ZigbeeIlluminanceSensor); zbIlluminanceSensor.setMinMaxValue(0, 50000); Zigbee.addEndpoint(zbIlluminanceSensor); if (!Zigbee.begin()) { ESP.restart(); } while (!Zigbee.connected()) { delay(100); }2ADC 采集与 ADC 值换算成 lux 公式第 46-61 行12 位 ADC 读出 0-4095 的原始值。先线性映射到 Zigbee 量程 0-50000再套 ZCLZigbee Cluster LibraryZigbee 的标准化数据字典公式lux pow(10, raw / 10000.0) - 1。这个对数换算好比把米制刻度换算成摄氏度输入是协议值输出才是人能读的 lux。哪里可以改map() 的两个区间就是你的校准旋钮。// Zigbee_Illuminance_Sensor.ino 第46-61行节选 int lsens_analog_raw analogRead(illuminance_sensor_pin); // 0-4095 int lsens_illuminance_raw map(lsens_analog_raw, 0, 4095, 0, 50000); int lsens_illuminance_lux round(pow(10, (lsens_illuminance_raw / 10000.0)) - 1); // lux zbIlluminanceSensor.setIlluminance(lsens_illuminance_raw); // 上报原始值3上报策略第 113-119 行setReporting()的三个参数是最小间隔 1 秒、最大间隔 0 秒禁用定时上报、变化量阈值 1000。含义是值变化超过 1000 才上报且最多每秒一次这是低功耗 Zigbee 节点省流量的关键。注意配网时协调器可能用它的默认值覆盖这个策略。// Zigbee_Illuminance_Sensor.ino 第119行 zbIlluminanceSensor.setReporting(1, 0, 1000);Zigbee 入网与联调 3 步协调器是 Zigbee 网络的管理者负责开门收人。你可以用另一块 C6/H2 刷 Zigbee_Coordinator 示例自制或直接用商业网关。确认协调器网络开放。协调器重启或烧录后默认关闭入网需要在它的固件里保持开放状态传感器才能进得去。传感器首次上电自动进入配网流程不用按任何键。看串口输出出现入网成功日志与 Short Address 即完成[Illuminance Sensor] raw analog value: 2048 [Illuminance Sensor] lux value: 99 lux [Zigbee] Network joined successfully! [Zigbee] Short Address: 0x5A3B入网失败怎么办长按 BOOT 键 3 秒固件会执行工厂重置Factory Reset把设备里存的家门钥匙删掉让它重新认网并重启。还不行就在 IDE 里把Erase All Flash Before Sketch Upload设为 Enabled整个闪存清空后重烧。进阶与收口深度睡眠想更省电参考 Zigbee_Temp_Hum_Sensor_Sleepy 的睡眠唤醒写法让节点大部分时间睡大觉。接入 Home Assistant装好 Zigbee2MQTT 并连上协调器设备入网后自动识别为 illuminance_sensor仪表板直接显示。注意一个细节示例代码按 ZCL 公式减 1 换算 luxZigbee2MQTT 用的是不减 1 的版本读数会有微小差异属正常现象。OTA 升级固件跑起来之后用仓库里的 tools/espota.py 工具无线刷固件不用再插 USB。FAQlux 读数不准怎么办按传感器实际响应调整map()的参数区间这就是校准。串口完全没输出检查 USB CDC On Boot 是否为 Enabled换一根带数据线的 USB 线。持续入网失败长按 BOOT 3 秒工厂重置配合上传前擦除全部闪存重烧一次。资源清单完整示例代码Zigbee_Illuminance_Sensor.ino芯片数据手册ESP32-C6 DatasheetEspressif 官网API 文档docs/en/zigbee/【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →