功能配置
大约 4 分钟
功能配置
概述: 功能配置页面用于在运行时启用或禁用已编译进固件的功能模块(显示、红外、RFID、规则脚本等)。配置持久化在 LittleFS 的
/config/features.json,保存后重启生效。功能启用决策链为编译宏 AND 用户配置 AND 启动预算:未编译的功能无法启用,启动时内存预算不足的功能会自动降级。
功能说明
2026-08 功能模块可配置化重构后,固件支持双层功能控制:
- 编译时:
FASTBEE_ENABLE_*宏决定功能是否编入固件(详见资源占用与功能裁剪)。 - 运行时:
RuntimeFeatureManager读取/config/features.json,在驱动初始化前逐项判断是否启用;被禁用的驱动跳过初始化并输出runtime-disabled日志。 - 启动预算:
FeatureBudget表在启动时校验每个启用功能的 DRAM 预算,超预算功能自动降级为noMemory不初始化,避免启用重模块后启动即 OOM。
unified 全量固件(*-unified 环境)编译了全部功能模块,尤其适合通过本页按实际硬件关闭不用的功能。
操作指南
- 进入 Web 界面 → 功能配置
- 页面按分组(外设 / 协议 / 系统)列出全部功能模块,显示编译状态、当前开关、Flash/RAM 占用和硬件依赖
- 切换需要启用/禁用的功能开关;关闭父功能时其依赖功能会联动灰显
- 未编译的功能开关置灰不可操作(
locked) - 点击 保存并重启,配置写入 features.json 后设备自动重启生效
页面顶部汇总当前激活功能的 Flash/RAM 估算和剩余 8KB 连续堆块情况,供裁剪决策参考。
可配置功能列表
| 功能键 | 名称 | 分组 | 默认 | 说明 |
|---|---|---|---|---|
lcd | OLED/LCD 显示 | 外设 | 启用 | I2C SSD1306/SH1106 |
lcdGb2312 | GB2312 中文字库 | 外设 | 禁用 | 依赖 lcd,关闭 lcd 自动级联关闭 |
neopixel | NeoPixel 灯带 | 外设 | 启用 | WS2812 GPIO 驱动 |
sevenSegment | TM1637 数码管 | 外设 | 启用 | 2 线 GPIO |
ds18b20 | DS18B20 温度 | 外设 | 启用 | OneWire,C3/C6 未编译 |
ledScreen | LED 点阵屏 | 外设 | 禁用 | ESP32 RMT,DRAM 占用较高 |
irRemote | 红外遥控 | 外设 | 禁用 | 红外接收头 + GPIO |
rfid | RFID MFRC522 | 外设 | 禁用 | SPI |
i2cSensors | I2C 高级传感器 | 外设 | 禁用 | BMP280/MPU6050 等 |
rfLearn | 433MHz RF 学习 | 外设 | 禁用 | RF 接收头 + GPIO |
ds1302 | DS1302 RTC | 外设 | 禁用 | 有 NTP 时通常不必启用 |
lcd1602 | LCD1602 字符屏 | 外设 | 禁用 | I2C PCF8574 |
modbus | Modbus 协议 | 协议 | 启用 | UART/RS485 |
modbusSlave | Modbus 从站 | 协议 | 禁用 | 依赖 modbus |
ruleScript | 规则脚本引擎 | 系统 | 启用 | 现场自动化脚本 |
列表以固件实际编译宏为准;未编译的功能在状态接口中标记
locked,页面开关不可操作。
API 参考
所有端点需 Session/Cookie 认证,返回 JSON。
GET /api/features/status
返回全部功能的状态和资源估算。
{
"features": [
{
"key": "lcd",
"name": "OLED/LCD Display",
"group": "peripheral",
"compiled": true,
"userEnabled": true,
"active": true,
"flashKB": 20,
"ramB": 1200,
"hwDep": "I2C SSD1306/SH1106",
"dependsOn": null,
"locked": false
}
],
"summary": {
"totalFlashKB": 100,
"activeFlashKB": 60,
"activeRamB": 4096,
"free8KB": 24,
"largest8KB": 2
}
}POST /api/features/config
仅保存配置到 features.json,不重启。请求体:
{ "features": { "lcd": { "enabled": false }, "irRemote": { "enabled": true } } }未在请求中出现的功能保持原值;未编译的功能键会被忽略。
POST /api/features/apply
保存配置并延时约 3 秒后重启设备生效。请求体同 /api/features/config。
POST /api/features/estimate
预估应用某组开关后的 Flash/RAM 占用,不保存配置。请求体同上,返回估算结果。
配置文件
/config/features.json 首次启动自动生成,损坏时自动回退默认配置并记录警告。可通过文件管理页面备份/恢复,或使用配置导入导出功能迁移。
注意事项
- 保存并重启后功能开关才会影响驱动初始化;仅保存(config)需手动重启。
- 启动预算拒绝的功能(
noMemory)即使开启也不会初始化,串口输出[BUDGET] <feature> denied日志,/api/system/status的features字段可确认。 - 关闭父功能会级联关闭依赖它的子功能(
lcd→lcdGb2312,modbus→modbusSlave)。 - 功能配置只影响运行期初始化,不减少固件 Flash 体积;需要缩减固件体积时应在编译期关闭对应宏。
