ESP32 普中开发板功能测试案例
ESP32 普中开发板功能测试案例
实验概述
基于普中 PZ-ESP32 开发板(ESP32-WROOM-32 模组),零代码完成一个完整的物联网综合演示:
- 数据采集:DHT11 温湿度 + ADC 电位器(0~4095),每 10 秒采集并上报物联网平台
- 本地显示:TM1637 数码管轮流显示温度/湿度,OLED 开机显示三行欢迎信息,并可显示平台下发的文字
- 联动报警:温度超过 28°C 时蜂鸣器自动报警(无源蜂鸣器,2700Hz PWM 持续鸣响),恢复后自动解除
- 按键控制:KEY1 继电器、KEY2 蜂鸣器、KEY3 RGB 七彩灯珠、KEY4 四个 LED 灯
- 红外遥控:规则默认直接匹配普中配套 NEC 遥控器的原始编码,开箱即用无需对码;更换任意遥控器时,再通过 Web 对码学习按键并改用按键名绑定即可,无需修改动作
- 远程控制:平台可下发指令控制继电器、蜂鸣器、RGB 灯效、LED 灯组和 OLED 文字
全部功能通过 外设配置 + 外设执行规则 实现,无需编写任何代码。
硬件信息
普中 PZ-ESP32 开发板由核心板(ESP32-WROOM-32)+ 底板组成,底板集成 LED、按键、蜂鸣器等常用外设,其余模块通过杜邦线连接。
引脚映射总表
| 外设 | GPIO | 接线说明 |
|---|---|---|
| DHT11 温湿度 | GPIO32 | DATA→GPIO32,VCC→3.3V,GND→GND |
| ADC 电位器 | GPIO34 | 中间抽头→GPIO34,两端分别接 3.3V / GND |
| TM1637 数码管 | GPIO18 / GPIO19 | CLK→GPIO18,DIO→GPIO19,VCC→3.3V |
| OLED 0.91寸 (I2C) | GPIO22 / GPIO23 | SDA→GPIO22,SCL→GPIO23,VCC→3.3V(底排最右侧相邻两脚,紧邻 GND);切勿接 5V |
| WS2812B RGB 灯珠×5 | GPIO12 | DIN→GPIO12,VCC→5V,GND→GND |
| 蜂鸣器 | GPIO13 | 控制脚→GPIO13(无源蜂鸣器,需 PWM 驱动),VCC→3.3V,GND→GND(顶排紧邻 GND 脚) |
| 继电器 | GPIO33 | IN→GPIO33(高电平吸合),VCC→5V,GND→GND(必须与 ESP32 共地) |
| KEY1~KEY4 | GPIO14 / 27 / 26 / 25 | 按键另一端接 GND(内部上拉,按下为低);顶排连续四脚,接线方便 |
| LED D1~D4 | GPIO4 / 16 / 17 / 5 | 低电平点亮(阳极经限流电阻接 VCC);底排连续四脚,接线方便 |
| 红外接收头 (VS1838B) | GPIO35 | OUT→GPIO35,GND→GND,VCC→3.3V(接收头正对凸起面,引脚从左至右为 OUT / GND / VCC) |
引脚说明
- GPIO34 为输入专用引脚(无内部上拉),属于 ADC1 通道,WiFi 工作时仍可正常采集(ADC2 在 WiFi 下不可用)
- GPIO35 也是输入专用引脚,作红外接收正合适;VS1838B 接收头为推挽输出,无需外接上拉电阻。教程中的 IO14 已被 KEY1 占用,故红外改用 GPIO35(顶排 32/34 之间,接线方便)
- KEY1~KEY4(GPIO14/27/26/25) 位于顶排连续四个引脚,均有内部上拉,无需外接电阻
- GPIO13(蜂鸣器):普中板载蜂鸣器为无源蜂鸣器,普通高低电平(数字输出)不会发声,必须配置为 PWM 输出(本方案 2700Hz、8 位分辨率)以占空比驱动鸣响/停止
- GPIO12(MTDI) 为 strapping 引脚,不能接低电平有效 LED 等带上拉的负载;WS2812B 的 DIN 是高阻输入,不会干扰启动,可安全使用
- GPIO5(LED D4) 是 strapping 引脚(影响 SDIO 时序),作 LED 输出安全;本方案已避开 GPIO2/15,烧录下载不受 LED 接线影响
- GPIO0/1/3 被固件保留(BOOT/串口),GPIO2/15/21 未使用,可留作扩展
- 继电器不使用板载 KEY4 相同的 GPIO25,避免引脚冲突
实现流程
步骤1:烧录固件
方式A — 在线烧录(推荐)
- 打开 在线烧录工具
- 选择波特率 → 选择串口 → 选择固件文件
fastbee-esp32-f4ro.bin - 点击 烧录 按钮,等待完成
方式B — 源码烧录
powershell -ExecutionPolicy Bypass -File scripts\deploy.ps1 -Env esp32-F4R0详见 烧录与测试。
步骤2:配置网络
- 固件烧录后设备重启,电脑连接 WiFi 热点 fastbee-xxxx(密码:
admin123) - 浏览器访问 http://192.168.4.1 或 http://fastbee.local,使用
admin/admin123登录 - 进入 网络配置,模式选择 客户端模式(STA),填写 WiFi 名称和密码,点击保存
- 等待设备重启,电脑重新连接正常 WiFi,再通过 fastbee.local 访问设备
也可以不切换 STA,全程使用 AP 模式完成后续配置。
步骤3:外设配置(peripherals.json)
在 外设配置 页面逐个新建外设,或直接使用文末 配置导入。共 16 个外设:
| 外设 ID | 名称 | 类型 | 引脚 | 关键参数 |
|---|---|---|---|---|
dht11 | DHT11温湿度传感器 | 38 通用传感器 | 32 | sensorType:0(DHT11)、sampleInterval:10000 |
adc_pot | ADC电位器 | 26 ADC | 34 | attenuation:3、resolution:12 |
tm1637 | 四位数码管 | 47 TM1637 | 18, 19 | brightness:4、colon:false |
oled | OLED显示屏 | 36 LCD(OLED) | 22, 23 | width:128、height:32、interface:2(I2C)、contrast:200 |
rgb_led | RGB七彩灯珠 | 45 WS2812B | 12 | count:5、brightness:128 |
buzzer | 蜂鸣器 | 17 PWM输出 | 13 | pwmFrequency:2700、pwmResolution:8、initialState:0 |
relay | 继电器 | 12 数字输出 | 33 | initialState:0 |
key1 ~ key4 | 按键KEY1~KEY4 | 13 数字输入(上拉) | 14, 27, 26, 25 | 无 |
led_d1 ~ led_d4 | LED灯D1~D4 | 12 数字输出 | 4, 16, 17, 5 | initialState:1(低电平点亮,上电熄灭) |
ir_recv | 红外接收头 | 53 红外接收 | 35 | 无 |
外设类型说明:38=通用传感器(DHT11)、26=ADC、47=TM1637 数码管、36=LCD(OLED 屏归入此类型,I2C 接口)、45=WS2812B、12=GPIO 数字输出、17=GPIO PWM 输出、13=GPIO 输入(上拉)、53=红外接收头。LED 为低电平点亮,
initialState: 1表示上电默认熄灭。外设 ID 需与后续规则、物模型标识保持一致。
步骤4:红外对码(学习遥控器按键,可选)
本案例的红外规则默认直接匹配普中配套遥控器的 NEC 原始编码(见步骤5 表格),使用配套遥控器时无需对码,开箱即用。只有需要更换其他品牌遥控器、或想改用按键名绑定时,才需要执行本步骤:先将遥控器按键学习进设备的按键库并命名,再把规则的匹配值改为 key:按键名。这样之后更换任意品牌遥控器只需重新对码,无需修改任何规则。
- 开启页面右上角的 开发者模式(对码/清码属于写操作,需要此模式)
- 进入 外设配置 页面,在“红外接收头”所在行点击 红外管理 按钮
- 设置学习超时(默认 10 秒,可填 3~60 秒),点击 开始学习
- 将遥控器对准接收头按下要录入的按键,页面显示捕获到的编码与协议
- 在 按键名称 输入框填写名字(如
key1),点击 保存按键 - 重复 3~5 步,依次录入需要的按键
若改用按键名绑定,建议录入的按键与绑定动作(按键名可自定义,但需与规则中的名字一致):
| 遥控器按键 | 建议按键名 | 普中配套遥控器编码 | 绑定动作 |
|---|---|---|---|
| 键 1 | key1 | NEC 0x00FF30CF | 继电器翻转 |
| 键 2 | key2 | NEC 0x00FF18E7 | 蜂鸣器翻转 |
| 键 3 | key3 | NEC 0x00FF7A85 | RGB 彩虹轮播 |
| 键 4 | key4 | NEC 0x00FF10EF | LED D1~D4 翻转 |
| 键 0 | key0 | NEC 0x00FF6897 | RGB 关闭 |
按键名仅允许字母、数字、下划线、短横线(1~32 字符),最多保存 40 个按键;按键库持久化到
/config/ir_keys.json,可随配置一同导出导入。学习窗口期间不会派发ir_code_received事件,不会误触发已有规则。使用普中配套遥控器时可跳过本步骤;换用其他遥控器时,用相同的按键名重新对码覆盖,并把规则的compareValue改为key:按键名即可。
步骤5:外设执行配置(periph_exec.json)
在 外设执行管理 页面创建规则,共 20 条:
| 规则 | 触发方式 | 执行动作 |
|---|---|---|
| exec_001 数据采集上报 | 轮询,每 10 秒 | 读温度 + 读湿度 + 读 ADC,执行后上报平台 |
| exec_002 数码管轮显温湿度 | 定时,每 10 秒 | 显示温度 → 延时 5 秒 → 显示湿度 |
| exec_003 高温报警 | 数据源事件,温度 > 28 | 蜂鸣器 PWM 占空比 128(50%)持续鸣响 |
| exec_004 温度恢复解除报警 | 数据源事件,温度 ≤ 28 | 蜂鸣器 PWM 占空比置 0,停止鸣响 |
| exec_005 / 006 | KEY1 / KEY2 单击 | 继电器 / 蜂鸣器 翻转 |
| exec_007 / 008 | KEY3 单击 / 双击 | RGB 彩虹轮播 / 关闭 |
| exec_009 | KEY4 单击 | LED D1~D4 翻转 |
| exec_010 OLED默认显示 | 系统启动完成事件 | OLED 显示三行欢迎信息(首行居中) |
| exec_011 平台下发OLED文字 | 平台触发(oled) | OLED 显示下发内容 $value |
| exec_012 ~ 014 | 平台触发(relay/buzzer/rgb_led) | 按下发值控制继电器/蜂鸣器/RGB 灯效 |
| exec_015 | 平台触发(led_all) | 按下发值控制 LED D1~D4 |
| exec_016 / 017 | 红外编码 NEC:0x00FF30CF / NEC:0x00FF18E7 | 继电器 / 蜂鸣器 翻转 |
| exec_018 / 019 | 红外编码 NEC:0x00FF7A85 / NEC:0x00FF6897 | RGB 彩虹轮播 / 关闭 |
| exec_020 | 红外编码 NEC:0x00FF10EF | LED D1~D4 翻转 |
红外规则统一使用 事件触发 → 红外编码接收(ir_code_received)。本案例默认用 协议:编码(如 NEC:0x00FF30CF)直接匹配普中配套遥控器,无需对码;若在步骤4 做了对码,也可在表单的“红外按键”下拉中选择已学习的按键(下拉会同时显示按键名与编码,保存后 compareValue 为 key:按键名)。compareValue 支持三种写法:
| 写法 | 示例 | 说明 |
|---|---|---|
协议:编码 | NEC:0x00FF30CF | 本案例默认。直接匹配配套遥控器编码,开箱即用 |
key:按键名 | key:key1 | 按已学习按键名匹配,换遥控器无需改规则(需先对码) |
编码 | 0x00FF30CF 或 00FF30CF | 任意协议 + 编码,0x 前缀可省,大小写不敏感 |
留空(选“-- 任意红外按键 --”)表示收到任何红外编码都触发。同一触发器最小重复间隔 1 秒,驱动层另有 150ms 防抖与 NEC 重复码过滤,长按不会连续触发。
步骤6:FastBee 平台配置(可选)
1. 平台端
在 FastBee 物联网平台 创建产品,物模型标识需与设备端外设 ID 一致:
| 物模型标识 | 方向 | 说明 |
|---|---|---|
temperature / humidity | 上报 | DHT11 温度(°C)/ 湿度(%RH) |
adc | 上报 | 电位器采集值 0~4095 |
oled | 下发 | 字符串,OLED 显示文字(仅 ASCII) |
relay / buzzer | 下发/上报 | 1 开、0 关、toggle 翻转 |
rgb_led | 下发 | 灯效:red、green、blue、rainbow、breathing、off 等 |
led_all | 下发 | LED 灯组(D1~D4):0 全亮(低电平点亮)、1 全灭、toggle 翻转 |
2. 设备端
- 设备配置 → 基本信息中填写 产品编号
- 网络协议 → 配置 MQTT 参数:
| 参数 | 值 |
|---|---|
| 服务器 | iot.fastbee.cn(演示地址) |
| 端口 | 1883(默认) |
| 账号/密码 | 平台获取的凭证 |
| 客户端 ID | 格式:S&设备编号&产品ID&1 |
MQTT 连接成功后即可在平台 Web 端 / FastBee App 查看采集数据并远程控制设备。
功能说明
- 温度监控报警:每次温湿度采集后,固件将数值推送给数据驱动规则评估。温度 > 28°C 触发
exec_003,蜂鸣器以 2700Hz PWM、50% 占空比持续鸣响;温度 ≤ 28°C 触发exec_004,占空比置 0 自动停响 - 数据采集上报:
exec_001每 10 秒读取温度、湿度、ADC 电位器并上报平台(reportAfterExec: true) - 数码管轮显:
exec_002每个周期先显示温度约 5 秒,再显示湿度约 5 秒,循环往复 - 按键控制:单击 KEY1~KEY4 分别翻转继电器、蜂鸣器、RGB(双击 KEY3 关闭)、4 个 LED
- 红外遥控:红外接收头解码后派发
ir_code_received事件,规则默认按NEC:编码直接匹配普中配套遥控器的 5 个按键——键 1 继电器、键 2 蜂鸣器、键 3 RGB 彩虹、键 0 RGB 关闭、键 4 翻转 4 个 LED,与按键控制效果一致;若已对码录入按键库,事件会带上key字段,也可改用key:按键名匹配 - OLED 显示:开机(
system_ready事件)显示三行欢迎信息#FastBee Arduino/PuZhong ESP32/IoT Demo Ready,首行#表示居中;平台向oled标识下发字符串后立即刷新显示。OLED 动作(actionType: 27)的文本还支持${外设ID.字段}占位符,例如把actionValue写成#Sensor\n T:${dht11.temperature}C\n H:${dht11.humidity}%即可直接把实时温湿度显示到屏上
配置导入
以下配置可直接导入设备:设备配置 → 高级配置 → 导入配置,导入后重启生效。包含两个文件(与当前实测设备配置一致):peripherals.json(16 个外设)、periph_exec.json(20 条规则)。红外规则已内置普中配套遥控器的 NEC 编码,导入后即可直接使用遥控器;若换用其他遥控器,再按步骤4 对码并改用按键名匹配。
{
"type": "fastbee-config-bundle",
"version": 1,
"scope": "selected",
"exportedAt": "2026-07-28T08:00:00.000Z",
"files": [
{
"name": "peripherals.json",
"content": "{\"peripherals\":[{\"id\":\"dht11\",\"name\":\"DHT11温湿度传感器\",\"type\":38,\"enabled\":true,\"pins\":[32],\"pinCount\":1,\"params\":{\"sensorType\":0,\"sampleInterval\":10000}},{\"id\":\"adc_pot\",\"name\":\"ADC电位器\",\"type\":26,\"enabled\":true,\"pins\":[34],\"pinCount\":1,\"params\":{\"attenuation\":3,\"resolution\":12,\"sampleRate\":0}},{\"id\":\"tm1637\",\"name\":\"四位数码管\",\"type\":47,\"enabled\":true,\"pins\":[18,19],\"pinCount\":2,\"params\":{\"brightness\":4,\"colon\":false}},{\"id\":\"oled\",\"name\":\"OLED显示屏\",\"type\":36,\"enabled\":true,\"pins\":[22,23],\"pinCount\":2,\"params\":{\"width\":128,\"height\":32,\"interface\":2,\"contrast\":200}},{\"id\":\"rgb_led\",\"name\":\"RGB七彩灯珠\",\"type\":45,\"enabled\":true,\"pins\":[12],\"pinCount\":1,\"params\":{\"count\":5,\"brightness\":128}},{\"id\":\"buzzer\",\"name\":\"蜂鸣器\",\"type\":17,\"enabled\":true,\"pins\":[13],\"pinCount\":1,\"params\":{\"initialState\":0,\"pwmChannel\":13,\"pwmFrequency\":2700,\"pwmResolution\":8}},{\"id\":\"relay\",\"name\":\"继电器\",\"type\":12,\"enabled\":true,\"pins\":[33],\"pinCount\":1,\"params\":{\"initialState\":0}},{\"id\":\"key1\",\"name\":\"按键KEY1\",\"type\":13,\"enabled\":true,\"pins\":[14],\"pinCount\":1,\"params\":{}},{\"id\":\"key2\",\"name\":\"按键KEY2\",\"type\":13,\"enabled\":true,\"pins\":[27],\"pinCount\":1,\"params\":{}},{\"id\":\"key3\",\"name\":\"按键KEY3\",\"type\":13,\"enabled\":true,\"pins\":[26],\"pinCount\":1,\"params\":{}},{\"id\":\"key4\",\"name\":\"按键KEY4\",\"type\":13,\"enabled\":true,\"pins\":[25],\"pinCount\":1,\"params\":{}},{\"id\":\"led_d1\",\"name\":\"LED灯D1\",\"type\":12,\"enabled\":true,\"pins\":[4],\"pinCount\":1,\"params\":{\"initialState\":1}},{\"id\":\"led_d2\",\"name\":\"LED灯D2\",\"type\":12,\"enabled\":true,\"pins\":[16],\"pinCount\":1,\"params\":{\"initialState\":1}},{\"id\":\"led_d3\",\"name\":\"LED灯D3\",\"type\":12,\"enabled\":true,\"pins\":[17],\"pinCount\":1,\"params\":{\"initialState\":1}},{\"id\":\"led_d4\",\"name\":\"LED灯D4\",\"type\":12,\"enabled\":true,\"pins\":[5],\"pinCount\":1,\"params\":{\"initialState\":1}},{\"id\":\"ir_recv\",\"name\":\"红外接收头\",\"type\":53,\"enabled\":true,\"pins\":[35],\"pinCount\":1,\"params\":{}}]}"
},
{
"name": "periph_exec.json",
"content": "{\"rules\":[{\"id\":\"exec_001\",\"name\":\"数据采集上报\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":5,\"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\":200,\"execMode\":0},{\"targetPeriphId\":\"adc_pot\",\"actionType\":19,\"actionValue\":\"{\\\"periphId\\\":\\\"adc_pot\\\",\\\"sensorCategory\\\":\\\"analog\\\",\\\"scaleFactor\\\":1,\\\"offset\\\":0,\\\"decimalPlaces\\\":0,\\\"sensorLabel\\\":\\\"adc\\\",\\\"unit\\\":\\\"\\\"}\",\"useReceivedValue\":false,\"syncDelayMs\":200,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":true},{\"id\":\"exec_002\",\"name\":\"数码管轮显温湿度\",\"enabled\":true,\"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\":\"tm1637\",\"actionType\":24,\"actionValue\":\"${dht11.temperature}\",\"useReceivedValue\":false,\"syncDelayMs\":200,\"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\":5000,\"execMode\":0},{\"targetPeriphId\":\"tm1637\",\"actionType\":24,\"actionValue\":\"${dht11.humidity}\",\"useReceivedValue\":false,\"syncDelayMs\":200,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":false},{\"id\":\"exec_003\",\"name\":\"高温报警\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":4,\"triggerPeriphId\":\"\",\"operatorType\":2,\"compareValue\":\"28\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"ds:dht11_temperature\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"buzzer\",\"actionType\":4,\"actionValue\":\"128\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":false},{\"id\":\"exec_004\",\"name\":\"温度恢复解除报警\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":4,\"triggerPeriphId\":\"\",\"operatorType\":5,\"compareValue\":\"28\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"ds:dht11_temperature\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"buzzer\",\"actionType\":4,\"actionValue\":\"0\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":false},{\"id\":\"exec_005\",\"name\":\"KEY1控制继电器\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":4,\"triggerPeriphId\":\"key1\",\"operatorType\":0,\"compareValue\":\"\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"button_click\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"relay\",\"actionType\":10,\"actionValue\":\"toggle\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":true},{\"id\":\"exec_006\",\"name\":\"KEY2控制蜂鸣器\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":4,\"triggerPeriphId\":\"key2\",\"operatorType\":0,\"compareValue\":\"\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"button_click\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"buzzer\",\"actionType\":10,\"actionValue\":\"toggle\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":true},{\"id\":\"exec_007\",\"name\":\"KEY3开启RGB彩虹\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":4,\"triggerPeriphId\":\"key3\",\"operatorType\":0,\"compareValue\":\"\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"button_click\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"rgb_led\",\"actionType\":11,\"actionValue\":\"rainbow\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":false},{\"id\":\"exec_008\",\"name\":\"KEY3双击关闭RGB\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":4,\"triggerPeriphId\":\"key3\",\"operatorType\":0,\"compareValue\":\"\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"button_double_click\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"rgb_led\",\"actionType\":11,\"actionValue\":\"off\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":false},{\"id\":\"exec_009\",\"name\":\"KEY4控制LED-D1到D4\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":4,\"triggerPeriphId\":\"key4\",\"operatorType\":0,\"compareValue\":\"\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"button_click\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"led_d1\",\"actionType\":10,\"actionValue\":\"toggle\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0},{\"targetPeriphId\":\"led_d2\",\"actionType\":10,\"actionValue\":\"toggle\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0},{\"targetPeriphId\":\"led_d3\",\"actionType\":10,\"actionValue\":\"toggle\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0},{\"targetPeriphId\":\"led_d4\",\"actionType\":10,\"actionValue\":\"toggle\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":false},{\"id\":\"exec_010\",\"name\":\"OLED默认显示\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":4,\"triggerPeriphId\":\"\",\"operatorType\":0,\"compareValue\":\"\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"system_ready\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"oled\",\"actionType\":27,\"actionValue\":\"#FastBee Arduino\\nPuZhong ESP32\\nIoT Demo Ready\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":false},{\"id\":\"exec_011\",\"name\":\"平台下发OLED文字\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":0,\"triggerPeriphId\":\"oled\",\"operatorType\":1,\"compareValue\":\"\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"oled\",\"actionType\":27,\"actionValue\":\"$value\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":true},{\"id\":\"exec_012\",\"name\":\"平台控制继电器\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":0,\"triggerPeriphId\":\"relay\",\"operatorType\":1,\"compareValue\":\"\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"relay\",\"actionType\":10,\"actionValue\":\"$value\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":true},{\"id\":\"exec_013\",\"name\":\"平台控制蜂鸣器\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":0,\"triggerPeriphId\":\"buzzer\",\"operatorType\":1,\"compareValue\":\"\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"buzzer\",\"actionType\":10,\"actionValue\":\"$value\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":true},{\"id\":\"exec_014\",\"name\":\"平台控制RGB灯效\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":0,\"triggerPeriphId\":\"rgb_led\",\"operatorType\":1,\"compareValue\":\"\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"rgb_led\",\"actionType\":11,\"actionValue\":\"$value\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":true},{\"id\":\"exec_015\",\"name\":\"平台控制LED-D1到D4\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":0,\"triggerPeriphId\":\"led_all\",\"operatorType\":1,\"compareValue\":\"\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"led_d1\",\"actionType\":10,\"actionValue\":\"$value\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0},{\"targetPeriphId\":\"led_d2\",\"actionType\":10,\"actionValue\":\"$value\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0},{\"targetPeriphId\":\"led_d3\",\"actionType\":10,\"actionValue\":\"$value\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0},{\"targetPeriphId\":\"led_d4\",\"actionType\":10,\"actionValue\":\"$value\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":true},{\"id\":\"exec_016\",\"name\":\"遥控键1控制继电器\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":4,\"triggerPeriphId\":\"ir_recv\",\"operatorType\":0,\"compareValue\":\"NEC:0x00FF30CF\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"ir_code_received\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"relay\",\"actionType\":10,\"actionValue\":\"toggle\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":true},{\"id\":\"exec_017\",\"name\":\"遥控键2控制蜂鸣器\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":4,\"triggerPeriphId\":\"ir_recv\",\"operatorType\":0,\"compareValue\":\"NEC:0x00FF18E7\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"ir_code_received\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"buzzer\",\"actionType\":10,\"actionValue\":\"toggle\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":true},{\"id\":\"exec_018\",\"name\":\"遥控键3开启RGB彩虹\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":4,\"triggerPeriphId\":\"ir_recv\",\"operatorType\":0,\"compareValue\":\"NEC:0x00FF7A85\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"ir_code_received\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"rgb_led\",\"actionType\":11,\"actionValue\":\"rainbow\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":false},{\"id\":\"exec_019\",\"name\":\"遥控键0关闭RGB\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":4,\"triggerPeriphId\":\"ir_recv\",\"operatorType\":0,\"compareValue\":\"NEC:0x00FF6897\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"ir_code_received\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"rgb_led\",\"actionType\":11,\"actionValue\":\"off\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":false},{\"id\":\"exec_020\",\"name\":\"遥控键4控制LED-D1到D4\",\"enabled\":true,\"execMode\":0,\"triggers\":[{\"triggerType\":4,\"triggerPeriphId\":\"ir_recv\",\"operatorType\":0,\"compareValue\":\"NEC:0x00FF10EF\",\"timerMode\":0,\"intervalSec\":0,\"timePoint\":\"\",\"eventId\":\"ir_code_received\",\"pollResponseTimeout\":1000,\"pollMaxRetries\":2,\"pollInterPollDelay\":100}],\"actions\":[{\"targetPeriphId\":\"led_d1\",\"actionType\":10,\"actionValue\":\"toggle\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0},{\"targetPeriphId\":\"led_d2\",\"actionType\":10,\"actionValue\":\"toggle\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0},{\"targetPeriphId\":\"led_d3\",\"actionType\":10,\"actionValue\":\"toggle\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0},{\"targetPeriphId\":\"led_d4\",\"actionType\":10,\"actionValue\":\"toggle\",\"useReceivedValue\":false,\"syncDelayMs\":0,\"execMode\":0}],\"protocolType\":0,\"reportAfterExec\":false}]}"
}
]
}注意事项
- OLED 仅支持 ASCII 字符,平台下发中文会无法显示;多行文本用
\n分隔,首行以#开头时居中显示 - OLED 必须用 3.3V 供电,切勿接 5V:本方案实测使用 0.91 寸 128×32 I2C 屏(配置
width:128, height:32, interface:2)。SSD1306 内部自带升压电荷泵,额定 3.3V;若误接 5V 可能出现模块发烫、面板/电荷泵烧毁(现象:上亮下暗渐变→全黑,严重时只剩芯片应答、面板彻底不亮)。一旦发烫立即断电,并用万用表确认 VCC/GND 未接反、未插错孔位 - 屏幕上亮下暗(亮度不均):若以 3.3V 供电仍出现上亮下暗渐变,多为电荷泵供电不足,可在外设表单的对比度字段(或配置
contrast)从 255 降到 180~200;若仍无改善且同一接线下换一块新屏正常,则原模块电荷泵/面板已损坏 - 切换 GPIO 不能解决亮度问题:SDA/SCL 仅为信号线不供电;若串口日志中 I2C 写错误恒为 0,说明信号链路正常,问题在供电或模块本身
- 蜂鸣器规则交互:蜂鸣器为 PWM 外设,
toggle在占空比 0 与满占空比之间切换;温度 ≤ 28°C 时exec_004会在每次采集后把占空比强制置 0,此时 KEY2 手动打开的蜂鸣器最多保持一个采集周期;若需纯手动控制,可在页面上禁用exec_004 - 蜂鸣器必须用 PWM 驱动:普中板载为无源蜂鸣器,若误配成数字输出(类型 12)则只有“咔”一声或完全无声;正确配置为 PWM 输出(类型 17),频率建议 2700Hz
- LED 为低电平点亮:平台下发
0=点亮、1=熄灭,按键toggle不受影响 - RGB 灯珠数量:配置中
count: 5按实验要求设置,如使用普中板载 4 位 RGB 模块请改为count: 4 - 定时/轮询规则最小间隔为 5 秒;高温报警采用
ds:数据源事件触发,不受此限制,仅在每次采集后按条件评估执行;DHT11 固件内部有 2 秒读数缓存,无需担心重复读取 led_all为虚拟物模型标识,不对应实际外设,仅用于平台批量控制 4 个 LED- 本方案 LED/外设均未占用 GPIO0/2/15 strapping 引脚,烧录固件时无需断开任何接线
- 未接线的按键引脚可能误触发:按键引脚虽有内部上拉,但悬空时仍可能受干扰产生误触发事件;若某个按键暂不接线,建议在页面上临时禁用对应的按键规则或禁用该按键外设
- 红外遥控需固件支持:需固件编译时启用
FASTBEE_ENABLE_IR_REMOTE=1(esp32-F4R0标准固件默认已启用) - 更换遥控器:默认规则直接匹配普中配套遥控器的 NEC 编码,换用其他型号遥控器时,在 红外管理 面板重新对码(按键名
key0~key4),并把规则的compareValue改为key:按键名(或逐条更新为新编码)即可;对码、删除按键、清空按键库均属写操作,需先开启 开发者模式;按键库最多 40 个按键,超出后需先删除再新增 - 学习不到编码时:确认接收头 OUT 接 GPIO35、VCC 接 3.3V(接反会导致无输出);遥控器正对接收头 20cm 以内短按;学习超时后可重新点击 开始学习。也可在 系统日志 中查看原始解码结果(如
[IR] Received: NEC value=0x00FF30CF bits=32)确认硬件链路是否正常
相关链接
| 资源 | 地址 |
|---|---|
| FastBee 平台源码 | gitee.com/beecue/fastbee |
| FastBee 移动端源码 | gitee.com/beecue/fastbee-app |
| 按键控制示例 | 按键输入检测 |
| TM1637 显示温湿度示例 | 数码管显示温度 |
| OLED 显示温湿度示例 | OLED显示温度 |
