Skip to content

ESP32-C3 温湿度监测和显示案例 ​

实验概述 ​

通过 ESP32-C3 开发板连接 DHT11 温湿度传感器(GPIO10)和板载 0.42 寸 OLED 显示屏(I2C:SDA=GPIO5,SCL=GPIO6),体验 FastBee 从固件烧录 → 配网 → 传感器采集 → OLED 本地显示 → 规则触发 → 平台远程查看的完整流程。

ESP32-C3 开发板

硬件信息 ​

ESP32-C3 开发板基于乐鑫 ESP32-C3FH4 模组(QFN32 5×5mm),板载 USB Type-C 接口、40MHz 晶振和 ME6211 3.3V LDO。

项目说明
模组ESP32-C3FH4(RISC-V 单核 160MHz,WiFi + BLE 5)
板载 OLED0.42 寸 SSD1306,72×40,I2C 接口(SDA=GPIO5,SCL=GPIO6)
板载 LED蓝色 LED2(GPIO8)
接口USB Type-C(供电 + 串口)
尺寸25.00mm × 20.50mm

DHT11 温湿度传感器 ​

项目说明
型号DHT11(3 线制模块)
湿度范围20%–95% RH(误差 ±5%)
温度范围0°C–50°C(误差 ±2°C)
工作电压3.3V–5V
输出形式数字单总线
最小采样间隔≥ 1 秒(固件内部限制 2 秒)

接线说明 ​

模块模块引脚ESP32-C3 引脚说明
DHT11VCC3V3供电 3.3V
DHT11GNDGND共地
DHT11DO(DATA)GPIO10数据引脚(模块自带上拉)
OLED(板载)SDAGPIO5I2C 数据线
OLED(板载)SCLGPIO6I2C 时钟线
LED(板载)GPIOGPIO8LED 引脚

⚠️ 注意:OLED 为板载集成,无需额外接线。DHT11 的 DATA 引脚不要接 GPIO5/GPIO6,避免与 I2C 总线冲突。

ESP32-C3 原理图(OLED 与按键 LED 部分)

实现流程 ​

步骤1:烧录固件 ​

方式A — 在线烧录(推荐)

  1. 打开 在线烧录工具
  2. 选择波特率 → 选择串口 → 选择固件文件 fastbee-esp32c3-F4R0.bin
  3. 点击 烧录 按钮,等待完成

方式B — 源码烧录

powershell
powershell -ExecutionPolicy Bypass -File scripts\deploy.ps1 -Env esp32c3-F4R0 -Port <serial-port>

详见 烧录与测试。

esp32c3-F4R0 是 4MB 单 app 环境,不支持 OTA,且不编译以太网和 4G;本例仅使用 WiFi。

步骤2:配置网络 ​

  1. 固件烧录后设备重启,电脑连接 WiFi 热点 fastbee-xxxx(密码:admin123)
  2. 浏览器访问 http://192.168.4.1 或 http://fastbee.local,使用 admin / admin123 登录
  3. 进入 网络配置,模式选择 客户端模式(STA),填写 WiFi 名称和密码,点击保存
  4. 等待设备重启,电脑重新连接正常 WiFi,再通过核验后的STA地址访问设备;mDNS实际启用且解析成功时才使用fastbee.local

AP 仅用于首次配置和恢复。日常使用及脚本验证应切换到 STA,并使用路由器分配的设备地址;测试脚本会拒绝 192.168.4.1。

步骤3:传感器配置 ​

进入 外设配置 页面,新建外设:

字段填写内容
名称温湿度传感器(自定义)
IDdht11(需与导入配置和规则引用一致)
引脚10(对应 GPIO10)
外设类型SENSOR_GENERIC(通用传感器)

保存后,进入 外设执行管理 配置传感器数据源:

字段填写内容
传感器类别DHT11
数据字段temperature(温度)/ humidity(湿度)
采样间隔≥ 5 秒(建议 10 秒)

⚠️ 注意:DHT11 硬件最小采样间隔为 1 秒,固件内部缓存间隔为 2 秒。设置过短的轮询间隔不会提高采样率,只会返回缓存值。

步骤4:显示屏配置 ​

先在 功能配置 中启用 OLED/LCD 并重启,再进入 外设配置 页面新建外设:

字段填写内容
名称OLED显示屏(自定义)
IDoled
引脚5, 6(SDA=GPIO5,SCL=GPIO6)
外设类型LCD

显示屏参数:

参数值说明
屏幕宽度72 pxSSD1306 标准
屏幕高度40 px0.42 寸 OLED
接口类型I2C值为 2
I2C 地址0x3CSSD1306 默认地址

板载 OLED 已集成上拉电阻(4.7KΩ),无需外接。若使用外接 OLED 模块,请确认 SDA/SCL 有 4.7KΩ–10KΩ 上拉。

ESP32-C3

步骤5:外设执行配置 ​

进入 外设执行管理 页面,新建执行规则:

规则1 — 定时采集并显示温湿度

  1. 触发类型选择 定时触发,间隔设为 10 秒
  2. 执行动作选择 OLED 显示,模板填写:
#ENV
T: ${dht11.temperature} C
H: ${dht11.humidity} %

首行以 # 开头表示居中标题,${外设ID.字段} 会自动替换为实时采集值。

规则2 — 温度超限报警(可选)

  1. 触发类型选择 事件触发,数据源 ds:dht11_temperature
  2. 数据源选择采集产生的 ds:dht11_temperature,设置温度比较条件
  3. 比较条件:大于,阈值填写 35
  4. 执行动作选择 OLED 显示:
#HIGH TEMP
T: ${dht11.temperature} C

规则3 — 平台远程触发(可选)

触发类型选择 平台触发(MQTT),动作参数设置为 $value-平台下发,用于接收平台下发的显示内容。

ESP32-C3

步骤6:FastBee 平台配置(可选) ​

1. 平台端

在 FastBee 物联网平台 创建产品,获取以下信息:

信息说明
产品 ID产品唯一标识
MQTT 账号/密码设备连接凭证
物模型 ID需与外设执行中的触发外设 ID 一致(如 dht11)

2. 设备端

在设备 Web 页面配置:

  • 设备配置 → 基本信息中填写 产品编号
  • 通信协议 → 配置 MQTT 参数:
参数值
服务器iot.fastbee.cn(演示地址)
端口1883(默认)
账号/密码平台获取的凭证
客户端 ID格式:S&设备编号&产品ID&1

步骤7:验证与远程控制 ​

本地验证

  1. 打开设备 Web 页面 → 外设执行管理,确认规则状态为"运行中"
  2. 观察 OLED 屏幕是否每 10 秒刷新温湿度数据
  3. 用手握住 DHT11 传感器,观察温度读数是否上升

连接 STA 后,在源码仓库执行自动验证:

powershell
powershell -ExecutionPolicy Bypass -File scripts\smoke-test-device.ps1 -BaseUrl http://<device-sta-ip> -Profile unified -RequireNetworkConnected
powershell -ExecutionPolicy Bypass -File scripts\device-web-smoke.ps1 -BaseUrl http://<device-sta-ip> -Rounds 2 -DelayMs 1000 -TimeoutSec 15 -MaxElapsedMs 5000

平台远程查看(可选)

MQTT 连接成功后,在 FastBee 物联网平台:

  • 查看设备实时温湿度数据曲线
  • 下发显示指令到 OLED 屏幕
  • 查看温度超限告警记录

ESP32-C3

导入前先备份现场身份、网络、认证及业务配置,并开启开发模式。下方外设与规则保持禁用,核验引脚和接线后按需启用;禁用配置不是已经完成硬件验证。

配置导入 ​

该示例的外设配置和外设执行规则可以直接导入。打开 设备配置 → 高级配置 → 导入配置,导入后重启;真实 WiFi 和平台凭据应在本地填写,不要写入公开示例。

json
{
  "type": "fastbee-config-bundle",
  "version": 1,
  "scope": "selected",
  "exportedAt": "2026-07-29T06:39:10.248Z",
  "files": [
    {
      "name": "periph_exec.json",
      "content": "{\"rules\":[{\"id\":\"exec_001\",\"name\":\"温湿度采集上报\",\"enabled\":false,\"execMode\":0,\"triggers\":[{\"triggerType\":1,\"triggerPeriphId\":\"\",\"operatorType\":0,\"compareValue\":\"\",\"timerMode\":0,\"intervalSec\":10,\"timePoint\":\"\",\"eventId\":\"\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"dht11\",\"actionType\":19,\"actionValue\":\"{\\\"periphId\\\":\\\"dht11\\\",\\\"sensorCategory\\\":\\\"dht11\\\",\\\"scaleFactor\\\":1,\\\"offset\\\":0,\\\"decimalPlaces\\\":1,\\\"sensorLabel\\\":\\\"temperature\\\",\\\"unit\\\":\\\"°C\\\",\\\"dataField\\\":\\\"temperature\\\"}\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0},{\"targetPeriphId\":\"dht11\",\"actionType\":19,\"actionValue\":\"{\\\"periphId\\\":\\\"dht11\\\",\\\"sensorCategory\\\":\\\"dht11\\\",\\\"scaleFactor\\\":1,\\\"offset\\\":0,\\\"decimalPlaces\\\":1,\\\"sensorLabel\\\":\\\"humidity\\\",\\\"unit\\\":\\\"%RH\\\",\\\"dataField\\\":\\\"humidity\\\"}\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0},{\"targetPeriphId\":\"oled\",\"actionType\":27,\"actionValue\":\"T: ${dht11.temperature}C\\nH: ${dht11.humidity}%RH\\nFASTBEE\",\"useReceivedValue\":false,\"syncDelayMs\":200,\"execMode\":0}],\"protocolType\":0,\"scriptContent\":\"\",\"reportAfterExec\":true},{\"id\":\"exec_388533\",\"name\":\"打开LED\",\"enabled\":false,\"execMode\":0,\"triggers\":[{\"triggerType\":0,\"triggerPeriphId\":\"led\",\"operatorType\":0,\"compareValue\":\"1\",\"timerMode\":0,\"intervalSec\":60,\"timePoint\":\"\",\"eventId\":\"\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"led\",\"actionType\":13,\"actionValue\":\"\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"scriptContent\":\"\",\"reportAfterExec\":true},{\"id\":\"exec_410743\",\"name\":\"关闭LED\",\"enabled\":false,\"execMode\":0,\"triggers\":[{\"triggerType\":0,\"triggerPeriphId\":\"led\",\"operatorType\":0,\"compareValue\":\"0\",\"timerMode\":0,\"intervalSec\":60,\"timePoint\":\"\",\"eventId\":\"\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"led\",\"actionType\":14,\"actionValue\":\"\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"scriptContent\":\"\",\"reportAfterExec\":true}]}"
    },
    {
      "name": "peripherals.json",
      "content": "{\"peripherals\":[{\"id\":\"dht11\",\"name\":\"DHT11温湿度传感器\",\"type\":38,\"enabled\":false,\"pins\":[10],\"params\":{}},{\"id\":\"led\",\"name\":\"板载LED\",\"type\":12,\"enabled\":false,\"pins\":[8],\"params\":{\"initialState\":1,\"pwmChannel\":0,\"pwmFrequency\":1000,\"pwmResolution\":8,\"defaultDuty\":0}},{\"id\":\"oled\",\"name\":\"OLED显示屏\",\"type\":36,\"enabled\":false,\"pins\":[5,6],\"params\":{\"width\":72,\"height\":40,\"interface\":2}}]}"
    }
  ]
}

问题排查 ​

现象可能原因解决方法
OLED 无显示I2C 地址错误或引脚接反确认 SDA=GPIO5、SCL=GPIO6,地址 0x3C
OLED 显示乱码屏幕尺寸参数不匹配确认宽度 72、高度 40
DHT11 读数全为 0 或 NaNDATA 引脚配置错误确认外设引脚为 GPIO10
DHT11 读数不变化采样间隔过短,返回缓存将规则触发间隔调至 ≥ 5 秒
温度偏差大DHT11 精度限制(±2°C)属正常现象,如需高精度请换 DHT22
设备无法连接 WiFiAP 模式下未切换 STA在网络配置中切换到客户端模式
MQTT 连接失败产品编号或凭证错误核对平台端设备编号和 MQTT 账号密码
规则不触发外设 ID 与规则中引用不一致确认规则中的 dht11 与外设配置 ID 完全一致

相关链接 ​

资源地址
FastBee 平台源码gitee.com/beecue/fastbee
FastBee 移动端源码gitee.com/beecue/fastbee-app
ESP32-C3 技术手册espressif.com/esp32-c3
DHT11 数据手册adafruit.com/dht11

蜂信物联 | fastbee.cn