用 EFR32 实现低功耗蓝牙传感器节点从原理到实战做 IoT如果设备只能跑一天那就是“玩具”。能跑一年才叫“产品”。本文带你用 EFR32 做一个低功耗 BLE 传感器节点具备环境数据采集蓝牙广播/连接上传深度睡眠µA级目标是电池供电长期运行。一、项目目标工程级思维设计一个节点功能描述传感采集温湿度/电池电压BLE通信广播 手机读取低功耗运行长时间待机周期唤醒定时采样可扩展OTA后期升级二、系统架构┌────────────┐ │ 传感器I2C│ └─────┬──────┘ ↓ ┌────────────┐ │ EFR32 MCU │ └─────┬──────┘ ↓ ┌────────────┐ │ BLE通信 │ └─────┬──────┘ ↓ 手机 / 网关三、硬件选型1️⃣ 主控推荐你当前使用的EFR32MG24 / BG22优势超低功耗EM2/EM3BLE5.2支持 Zigbee / MatterSilicon Labs 官方生态完整2️⃣ 传感器推荐SHT30温湿度或 SI7021更低功耗3️⃣ 电源CR2032纽扣电池或2×AA电池4️⃣ 低功耗设计关键 所有外设都要支持“关电/休眠”四、低功耗的核心思想重点很多人以为❌ 低功耗 降低主频其实真正的关键是让 MCU 大部分时间在睡觉。EFR32 能耗模式必须理解模式说明EM0运行EM1低功耗运行EM2深度睡眠 ⭐EM3更低功耗EM4极限低功耗 实际项目中90%以上时间应该在 EM2。五、系统工作流程设计睡眠EM2 ↓定时唤醒 采集传感器 ↓ BLE发送数据 ↓ 再次进入睡眠六、软件架构设计建议分层App层业务逻辑 ↓ BLE协议层 ↓ 驱动层I2C/ADC ↓ 硬件层任务逻辑非RTOS简化版while(1){sleep();// 进入低功耗if(timer_event){read_sensor();ble_send();}}七、关键实现步骤1️⃣ 定时唤醒关键使用LETIMER低功耗定时器sl_sleeptimer_start_periodic_timer_ms(timer,5000,callback,NULL,0,0); 每 5 秒唤醒一次。2️⃣ 读取传感器floattemp,humi;SHT30_Read(temp,humi);3️⃣ BLE 广播数据低功耗推荐不用连接直接广播ADV: T25.6,H48.2示例uint8_tadv_data[]{0x02,0x01,0x06,0x0A,0xFF,T,2,5,.,6};4️⃣ BLE Notify连接模式sl_bt_gatt_server_notify_all(handle,len,data);5️⃣ 进入低功耗模式sl_power_manager_sleep(); 系统自动进入 EM2。八、电池电量检测实用功能使用 ADCuint16_tadcADC_Read();floatvoltageadc*3.3/4095;上传Vbat:3.01V九、功耗优化核心技巧干货1️⃣ 减少广播频率100ms → 高功耗 1000ms → 推荐2️⃣ 减少连接时间连接越久 功耗越高3️⃣ 传感器供电控制GPIO 控制电源 → 用完断电4️⃣ 使用广播代替连接 无连接最省电5️⃣ 避免频繁唤醒 每 5~60 秒采样一次十、功耗估算典型状态电流睡眠EM2~2µA采样瞬间~2mABLE发送510mA平均电流 50µA设计合理十一、续航估算以 CR2032220mAh为例220mAh / 0.05mA ≈ 4400小时 ≈ 6个月优化后可达 1 年十二、常见踩坑❌ 一直不进低功耗 有外设没关闭❌ 功耗异常高 BLE广播太频繁❌ 唤醒失败 定时器配置错误❌ 数据丢失 睡眠前没发完数据十三、应用场景智能家居传感节点仓储环境监控冷链物流IoT 低功耗终端十四、项目升级方向 BLE Mesh多个节点组网 Zigbee / Matter接入智能家居生态 OTA升级远程更新固件 网关系统BLE → WiFi → 云总结一句话低功耗嵌入式的本质不是“省一点电”而是“绝大多数时间不工作”。当你的设备会睡觉会按时醒来只在必要时通信你就已经在做一个真正的 IoT 产品。