本项目基于 ESP32 与 BME680,打造一款室内光能自供电的 BLE 环境传感器。采用 50F 超级电容储能,无需锂电池;设备每 5‑分钟短暂唤醒采集温湿度气压,以 20ms 蓝牙广播上报数据。无光环境可连续工作 19 天,室内日常光照下近乎永久运行。项目开源 PCB、3D 外壳、ESP‑IDF 固件以及 ESP32‑C6 数据接收程序。

一. 硬件核心参数
项目 | 详情 |
|---|---|
主控 MCU | ESP32(ESP‑IDF 框架,搭配 NimBLE 蓝牙协议栈) |
环境传感器 | BOSCH BME680(采集温度、湿度、气压) |
通信方式 | BLE 不可连接广播(Non‑connectable advertising) |
BLE 设备名 | EnvSensor |
广播时长 | 单次仅 20ms |
休眠周期 | 300 秒(5 分钟)唤醒一次 |
能量来源 | 室内可用太阳能光伏板 |
储能元件 | 50F 超级电容 |
无光续航 | 最长约 19 天 |
二. 设备运行逻辑(工作循环)
每 5 分钟执行一轮完整周期:
ESP32 从深度休眠唤醒;
读取 BME680 获取温湿度、气压数据;
仅用 20ms 时间向外发送 BLE 广播数据包;
再次进入深度休眠,等待下一个 5 分钟周期。
设计思路:虽然唤醒瞬间电流较高,但平均占空比极低(20ms / 300s),平均功耗极低,依靠室内微弱光照即可持续补能。
三. BLE 广播数据包格式(厂商自定义数据)
广播报文一共占用 8 字节:
字节范围 | 字段 | 数据类型 | 缩放规则 |
|---|---|---|---|
0‑1 | Company ID(0x0CDE) | uint16_t | 固定值 |
2‑3 | 温度 | int16_t | 实际值 = 数值 ÷ 100 (℃) |
4‑5 | 湿度 | uint16_t | 实际值 = 数值 ÷ 100 (% RH) |
6‑7 | 气压 | uint16_t | 实际值 = 数值 ÷10 (hPa) |
示例:如果温度字段读到 2540,代表温度为 25.40℃。
四. 配套 Demo:BLERouter 接收端
硬件:ESP32‑C6 开发板;
功能:持续扫描
EnvSensor的 BLE 广播帧;解析温湿度气压;通过 NTP 网络时间给读数打上时间戳,串口打印数据;部署方式:参考
demo/BLERouter/README.md编译烧录。
五. 硬件配套资源
PCB 文件:仓库内提供 PCB 正面、背面版图,可以直接打板生产;
结构外壳:STL 文件分为上下两半,3D 打印即可装配电路板和太阳能板;
固件编译方式:基于 ESP‑IDF 编译框架,执行指令:
bash
运行
cd everAlive_Firmware idf.py set-target esp32 idf.py -p /dev/ttyUSB0 flash monitor
六. 版权与项目定位
License:CC‑BY‑NC‑SA‑4.0
项目性质:个人实验项目,禁止直接商用,制作者提醒如果自行复刻需要自己承担风险。
七、项目亮点
超低功耗设计:依靠超级电容代替锂电池,规避电池老化、更换问题;室内灯光就能充电;
选用不可连接 BLE 广播模式:省去蓝牙握手连接过程,最大限度缩短工作时长;
硬件完全开源:PCB、结构、驱动代码全部开放,适合 ESP32 低功耗、能量采集学习;
配套接收端方案完整,不需要手机 APP,用 ESP32‑C6 就能搭建本地监测节点。
