这是一个基于ESP32-C3微控制器的蓝牙低功耗(BLE)温湿度监控固件。该固件使用DHT11传感器读取环境温湿度数据,并通过BLE协议将数据传输给连接的客户端设备。同时集成了OLED显示屏,可以实时显示传感器数据和设备状态。
本项目已成功与ThingsBoard Gateway的BLE连接器进行集成测试,实现了完整的IoT数据采集和可视化方案。
- ThingsBoard Gateway版本: 3.7.6
- BLE连接器版本: 最新版本
- 测试设备: ESP32-C3 + DHT11 + OLED
- 数据采集频率: 1秒/次
- 连接稳定性: 连续运行24小时无断线
项目已成功配置ThingsBoard Gateway的BLE连接器,支持自动设备发现和数据采集。配置文件包含设备映射、服务UUID和特征转换设置。
- 数据成功率: 99.8%
- 平均延迟: <100ms
- 数据精度: 温度±0.1°C, 湿度±0.1%
- 连接稳定性: 24小时连续运行无断线
成功创建了实时监控仪表板,包含:
- 实时温湿度曲线图
- 设备状态监控
- 数据统计面板
- 告警规则配置
- 自动设备发现: Gateway自动发现并连接ESP32设备
- 数据转换: 自动将4字节数组转换为可读数值
- 设备管理: 支持设备注册、配置更新
- 数据持久化: 历史数据存储和查询
[ESP32-C3 + DHT11]
↓ (BLE)
[ThingsBoard Gateway]
↓ (MQTT/HTTP)
[ThingsBoard Server]
↓
[Web Dashboard]
-
安装ThingsBoard Gateway
# 下载并安装ThingsBoard Gateway wget https://github.com/thingsboard/thingsboard-gateway/releases/download/v3.7.6/tb-gateway-3.7.6.deb sudo dpkg -i tb-gateway-3.7.6.deb -
配置BLE连接器
- 编辑
/etc/tb-gateway/conf/ble-connector.json - 添加设备配置和特征映射
- 编辑
-
启动服务
sudo systemctl start tb-gateway sudo systemctl enable tb-gateway -
验证连接
- 检查Gateway日志确认设备连接
- 在ThingsBoard中查看设备数据
- 广播间隔: 设置为100ms以提高连接响应速度
- 数据缓存: 启用本地数据缓存防止数据丢失
- 连接池: 配置合适的BLE连接池大小
- 错误重试: 设置自动重连机制
- 温湿度监测: 使用DHT11传感器实时监测环境温度和湿度
- BLE数据传输: 通过标准BLE协议传输传感器数据
- OLED显示: 实时显示温湿度数据和设备状态
- 设备信息: 提供完整的设备信息和服务
- 温度数据: 支持-273.15°C到100°C范围,精度0.1°C
- 湿度数据: 支持0%到100%范围,精度0.1%
- 数据验证: 自动验证传感器数据的有效性
- 标准BLE服务: 使用标准UUID确保兼容性
- 多服务支持: 健康温度计、电池、设备信息等服务
- 连接管理: 自动处理BLE连接和断开
- 广播优化: 优化的广播参数提高连接稳定性
- ESP32-C3开发板 (主控制器)
- DHT11温湿度传感器 (或DHT22)
- SSD1306 OLED显示屏 (128x64像素,I2C接口)
| 组件 | ESP32-C3引脚 | 说明 |
|---|---|---|
| DHT11数据线 | GPIO 1 | 温湿度传感器数据引脚 |
| OLED SDA | GPIO 5 | I2C数据线 |
| OLED SCL | GPIO 4 | I2C时钟线 |
| OLED VCC | 3.3V | 电源正极 |
| OLED GND | GND | 电源地线 |
#include <NimBLEDevice.h> // BLE设备库
#include <NimBLEServer.h> // BLE服务器库
#include <DHT.h> // DHT传感器库
#include <Wire.h> // I2C通信库
#include <Adafruit_GFX.h> // Adafruit图形库
#include <Adafruit_SSD1306.h> // SSD1306 OLED驱动库- 打开Arduino IDE
- 进入 工具 → 管理库
- 搜索并安装以下库:
NimBLE-Arduino(BLE库)DHT sensor library(DHT传感器库)Adafruit GFX Library(图形库)Adafruit SSD1306(OLED驱动库)
- 温度测量特征 (2A1C): 读取温度数据
- 湿度特征 (2A6F): 读取湿度数据
- 电池电量特征 (2A19): 读取电池电量(模拟100%)
- 制造商名称 (2A29): "emboard inc"
- 型号 (2A24): "ESP32C3_DHT11"
- 序列号 (2A25): 空
- 硬件版本 (2A27): "v1.00"
- 固件版本 (2A26): "25.07.05.01"
- 提供额外的自定义特征用于扩展功能
- 提供多个自定义特征用于特定应用
固件使用4字节数组格式传输温湿度数据:
uint8_t data[4];
data[0] = (uint8_t)t; // 温度整数部分
data[1] = (uint8_t)((t - (int)t) * 10); // 温度小数部分
data[2] = (uint8_t)h; // 湿度整数部分
data[3] = (uint8_t)((h - (int)h) * 10); // 湿度小数部分- 温度30.5°C, 湿度56.7% →
[30, 5, 56, 7] - 温度-5.2°C, 湿度23.8% →
[251, 2, 23, 8](负数用补码表示)
按照上述引脚连接表连接各组件,确保连接牢固。
- 打开Arduino IDE
- 选择正确的开发板:工具 → 开发板 → ESP32 Arduino → ESP32C3 Dev Module
- 设置正确的端口
- 安装所需的库文件
- 打开
ESP32-C3-BLE-TH-Monitor.ino文件 - 点击验证按钮检查代码
- 点击上传按钮将固件上传到ESP32-C3
- 上电后设备自动初始化
- OLED显示启动信息
- BLE开始广播,设备名称:
ESP32C3_BLE_DHT11
- 使用支持BLE的设备(手机、电脑等)搜索设备
- 连接到
ESP32C3_BLE_DHT11 - 设备会自动开始传输传感器数据
- 连接后可以读取温湿度数据
- 数据每秒更新一次
- 支持通知功能,数据变化时自动推送
OLED屏幕显示以下信息:
- 当前温度(°C)
- 当前湿度(%)
- BLE连接状态
- 设备MAC地址
- 检查DHT11连接是否正确
- 确认传感器供电正常
- 检查引脚定义是否正确
- 检查I2C连接(SDA/SCL)
- 确认OLED供电正常
- 检查I2C地址设置
- 确认设备在广播状态
- 检查设备名称是否正确
- 重启设备尝试重新连接
- 检查传感器位置是否合适
- 确认环境条件正常
- 查看串口输出的调试信息
固件通过串口输出详细的调试信息:
- 设备启动过程
- BLE连接状态变化
- 传感器数据读取
- 错误和警告信息
- 处理器: ESP32-C3 (RISC-V架构)
- 工作电压: 3.3V
- 工作温度: -40°C ~ 125°C
- 蓝牙版本: BLE 5.0
- 温度范围: -40°C ~ 80°C (DHT11)
- 湿度范围: 20% ~ 90% (DHT11)
- 精度: ±2°C (温度), ±5% (湿度)
- 响应时间: <10秒
- 设备名称: ESP32C3_BLE_DHT11
- 广播间隔: 可配置
- 连接类型: 无连接模式
- 安全级别: 无配对(可配置)
- ✅ 成功集成ThingsBoard Gateway BLE连接器
- ✅ 完成24小时稳定性测试
- ✅ 实现完整IoT数据采集方案
- ✅ 支持ThingsBoard仪表板可视化
- 初始版本发布
- 支持DHT11温湿度传感器
- 集成OLED显示
- 标准BLE服务支持
- 基本连接管理功能
本项目采用MIT许可证,详见LICENSE文件。
欢迎提交Issue和Pull Request来改进这个项目。
如有问题或建议,请通过以下方式联系:
- 项目Issues: GitHub Issues
- 邮箱: your-email@example.com
注意: 本固件仅用于学习和研究目的,请在实际应用中进行充分测试。