外设管理
“外设配置”声明硬件、引脚与驱动参数;“外设执行”配置触发器、读取、动作和联动。配置保存、功能启用、驱动初始化及物理业务成功分别检查,本页以当前源码为功能边界,不把历史候选报告当成本次验证结果。
使用流程与权限
- 在“设备配置 → 高级设置”按需要用当前密码启用开发者模式。新配置及恢复出厂配置默认关闭;升级设备保留原有选择。
- 核对芯片、板卡、Flash/PSRAM、模块电源与电平,备份现场配置。
- 新增外设并保持禁用,填写唯一 ID、类型、引脚和参数。
- 完成引脚、总线、通道及容量审核后单独启用,检查实际初始化结果。
- 单项读取或受控输出通过后再接入规则。禁用外设不能作为正常读写验证对象。
同一固件环境不代表相同板卡或接线,公开示例不能覆盖在线设备的网络、认证、协议、外设和规则配置。配置增改/导入失败须保留原有效配置,并核对错误原因。
类型和实现范围
| type | 功能与边界 | 专页 |
|---|---|---|
| 1/2/3 | UART/I2C/SPI 总线资源;总线本身不等于具体传感器、SD卡或屏幕驱动 | 配置指南 |
| 11/13/14、18/19/20 | 数字输入、上拉/下拉及边沿中断 | GPIO输入 |
| 12 | 数字输出,有源负载控制;无源蜂鸣器另用passive模式 | GPIO输出 |
| 15/26 | 模拟输入/ADC,原始计数或工程量 | ADC |
| 16/17/27 | PWM形式的模拟输出、通用PWM、芯片支持时的DAC | PWM |
| 36/52/47 | OLED图形屏、LCD1602字符屏、TM1637数码管,入口不同 | OLED、LCD1602、TM1637 |
| 37 | SD卡,仅SPI接口 | SD卡 |
| 38/44 | 通用传感器/OneWire | 传感器总览、DS18B20 |
| 41/42/43 | 舵机/本地四脚步进/编码器 | 舵机、步进、编码器 |
| 45/48/49/50/53/54 | NeoPixel、RF、雷达、DS1302、红外接收、MFRC522 | 外设参考 |
| 51 | 协议管理器生成的Modbus虚拟对象;外设页不能独立增改/启停 | Modbus |
| 55/57 | PCF8574/MCP23017逻辑IO及PCA9685 PWM;取决于编译、功能和资源准入 | 配置指南 |
| 56 | 图形设备屏幕,当前ESP32-S3专用后端与板级配置 | 设备屏幕 |
| 60 | 无GPIO的设备事件定义 | 设备事件 |
触摸21、CAN及其它枚举不等于当前有通用实现。I2C总线不能自动识别或驱动任意DS3231、EEPROM、AHT21等模块。可新增类型以当前API和页面发布的能力为准,资源配置还须通过运行时准入。
配置字段
外设对象使用 id、name、数字 type、enabled、pins 和 params。接口需要显式 pinCount 时应与有效引脚数一致;持久化会按实际引脚数量序列化。不使用 _templates 等自创字段作为固件模板系统。
低电平有效继电器示例:
{
"id": "relay1",
"name": "低电平有效继电器",
"type": 12,
"enabled": false,
"pinCount": 1,
"pins": [26],
"params": { "initialState": 1 }
}initialState: 0/1 是低/高电平,不是统一“断开/吸合”。实际负载与常开/常闭触点须验证。原生普通数字输出没有通用 invert 参数,反向动作13/14改变所写物理电平;扩展IO逻辑映射另有 invertLogic。
| 外设 | 当前字段 |
|---|---|
| 数字输入 | inputMode、invertLogic、debounceMs、reportMode,配对另有pairedInputId/pairDebounceMs |
| PWM | pwmChannel、pwmFrequency、pwmResolution、defaultDuty;不是pwmFreq |
| UART | baudRate、dataBits、stopBits、parity;pins按RX、TX顺序 |
| I2C | frequency、address、isMaster;pins按SDA、SCL顺序 |
| SPI | frequency、mode、msbFirst;具体设备须使用自己的类型和片选契约 |
| DHT/超声 | type38的数字sensorType:0/1/3;sampleInterval |
| 注册I2C传感器 | type38的driver、数字address、frequency、sampleInterval、可选busPeripheralId |
| 舵机 | frequency、minPulse/maxPulse、minAngle/maxAngle、initialAngle、PWM通道/位宽、反向及释放选项 |
| 步进 | stepsPerRevolution、speed,四脚按IN1~IN4顺序 |
| NeoPixel | count、brightness,不是ledCount |
| OLED | width/height、interface: 2、contrast;当前地址固定0x3C |
| LCD1602 | cols/rows、address、backlight |
| SD | interface: 1、frequency,四脚按SCK、MOSI、MISO、CS顺序 |
| RF | mode、pulseWidth、repeat、bitLength、activeHigh |
示例引脚均须按实际板卡调整。经典ESP32的输入专用GPIO不能用于输出,却可在符合ADC/上拉等条件时用于输入;不能笼统标为“完全不能使用”。Flash/PSRAM、USB/调试、启动脚和板载器件的限制以当前板级能力及实际原理图核验。
传感器、数据源和上报
外设保存不创建定时采集。动作19的 actionValue 是包含 periphId 和读取参数的JSON字符串,不能留空。sensorCategory 属于动作;外设的注册驱动用 params.driver,本地类型用数字 sensorType。
{
"targetPeriphId": "dht_room",
"actionType": 19,
"actionValue": "{\"periphId\":\"dht_room\",\"sensorCategory\":\"dht22\",\"channelField\":\"temperature\",\"dataField\":\"roomTemperature\",\"decimalPlaces\":2}",
"useReceivedValue": false
}上述目标须已保存为type38、sensorType=1并启用。channelField 选择内部通道,dataField 指定平台属性。缓存源为 dht_room_temperature,变化事件为 ds:dht_room_temperature,模板为 ${dht_room.temperature}。定时规则不自动把前一动作结果变成下一动作的接收值。
BMP280气压为hPa,海拔使用固定1013.25hPa基准;MPU6050加速度模式和角速度模式分别有三个轴及温度,角速度为rad/s;BH1750通道为illuminance。不能把BME280湿度、可配置MPU姿态融合或海平面标定当作已有功能。
ADC的分辨率不是测量精度;衰减档和vRef不保证所有芯片同一3.3V量程。采样失败、校准失败、断线、旧缓存及有效零分别显示,失败不能用0伪装成功。质量和原始采样时间必须满足消费者要求,屏幕保持画面、SSE心跳或MQTT连接不证明新数据持续产生。
动作与设备边界
数字输出、PWM、舵机、步进及协议控制均通过既有仲裁和受检输出。舵机动作4是raw duty,角度仅由对应angle入口按映射换算;步进正反转是连续运行,不提供定角/定步反馈。Modbus ACK不表示物理行程完成,遇到TRAVEL_REFERENCE_REQUIRED先检查参考状态,不取消保护或自动重试。
设备事件动作21的目标是事件ID、动作值是数据;规则完成事件订阅规则ID,与显式事件不同。事件、动作入队和执行完成均须分别核查。
UART文本来源按分隔符或已确认空读后的空闲边界组成完整有界帧;超长、NUL、接收失败或来源代次变化使当前帧无效,并丢弃至下一边界。不能截成多条独立可执行值,更不能将其描述为通用二进制协议解析。
资源与功能状态
功能可用需要编译支持、用户启用、依赖就绪、预算通过及初始化成功,并受运行期保护状态限制。用户启用意图与暂时no-memory/限流状态分别显示;PSRAM余量不能替代内部DRAM、最大连续块和任务栈预留。
总线共享须满足引脚、频率、地址/片选、驱动及生命周期契约,不会通过覆盖原owner来共享,也没有通用“自动软件I2C回退”。普通GPIO、LEDC、ADC、RMT及独占片选冲突应拒绝。
禁用不保证全部资源立即释放。ADC同unit仍有消费者时已配置通道可能保留;受检清理失败的GPIO/PWM/步进/编码器/NeoPixel资源继续登记,阻止复用。资源快照是项目已登记的被动观测,忙时未观测不是零占用,数量不是已测内存字节,也不证明第三方SDK没有占用。
缓存及任务池按实际需求初始化和维护。不要套用历史的“冷启动固定8KiB”“Worker常驻12KiB”“统一120秒回收”作为当前测量结果;关闭功能是否可回收取决于其真实生命周期和失败状态,Flash体积另由编译裁剪决定。
诊断与验收
读取类型和外设列表、引脚校验及资源快照后,按类型选择读取/写入接口;认证、开发者模式、请求字段和响应结构以 API参考为准。诊断调用不能偷偷初始化驱动、挂载SD或恢复未知输出。健康监控见 健康监控,不要编造一份固定健康JSON代替当前接口。
历史2026-10-03/04候选与局部Host结果只说明相应输入版本的软件证据,不代表本次代码已统一构建、现场已更新或实物通过。当前网页字段与API成功也不代表电平、触点、灯珠、显示、RF负载或机械动作完成。RGB板的显示时序和各芯片长期验收仍须独立记录,不能用一台S3覆盖全部硬件组合。
按本次输入运行主机回归、相关目标构建及浏览器检查;设备身份、实际固件/Web摘要、配置、负载、故障恢复和长期观测另行验收。未运行、缺硬件、时长不足或观察中断明确标为待验证。8小时Web、24小时及后续72小时观察流程见项目scripts说明与 验收清单。

