)
智能家居DIY用ESP32打造高性价比蓝牙插座全攻略1. 项目背景与核心价值智能家居早已不是新鲜概念但市面上成熟的智能插座产品往往价格不菲功能却未必完全符合个人需求。这正是DIY智能插座的魅力所在——用不到百元的成本打造一个完全自定义的蓝牙控制插座。ESP32作为一款集成了Wi-Fi和蓝牙双模通信的微控制器以其出色的性价比成为智能家居项目的首选。这个项目的独特之处在于完全自主可控从硬件选型到软件功能都可按需定制极低成本核心部件ESP32开发板仅需20-30元无云端依赖通过蓝牙直连避免隐私泄露和网络延迟问题扩展性强可轻松添加温湿度监测、用电统计等附加功能提示即使没有任何电子工程背景只要按照本指南逐步操作也能在2小时内完成这个项目。2. 硬件准备与电路设计2.1 核心部件清单组件型号推荐数量参考价格关键参数ESP32开发板ESP32-WROOM-321¥25蓝牙4.2240MHz双核继电器模块SRD-05VDC-SL-C1¥85V驱动10A负载AC-DC电源HLK-5M051¥15220V转5V0.5AOLED显示屏SSD1306 0.91寸1¥12I2C接口128x32像素插座外壳标准86型1¥10阻燃ABS材质2.2 安全第一的电路连接电源转换是整个项目中最需要谨慎处理的部分。HLK-5M05模块能将220V交流电转换为5V直流电再通过AMS1117稳压芯片降至3.3V供ESP32使用。关键连接步骤如下高压部分隔离使用热缩管包裹所有220V接线点确保AC-DC模块与低压电路有物理隔离核心电路连接// ESP32 GPIO分配方案 #define RELAY_PIN 2 // 继电器控制 #define SDA_PIN 21 // OLED数据线 #define SCL_PIN 22 // OLED时钟线继电器负载匹配计算电器功率功率(W) 电压(V) × 电流(A)SRD-05VDC继电器最大负载10A/250VAC适合控制2000W以内的设备3. 软件实现与蓝牙通信3.1 开发环境搭建首先需要配置Arduino IDE支持ESP32开发# 添加ESP32板支持URL https://dl.espressif.com/dl/package_esp32_index.json # 安装所需库 arduino-cli lib install Adafruit SSD1306 arduino-cli lib install BLEPeripheral3.2 BLE服务设计我们采用UART服务模式实现手机与ESP32的双向通信。关键代码结构// 自定义BLE服务UUID #define SERVICE_UUID 6E400001-B5A3-F393-E0A9-E50E24DCCA9E #define CHARACTERISTIC_UUID_RX 6E400002-B5A3-F393-E0A9-E50E24DCCA9E #define CHARACTERISTIC_UUID_TX 6E400003-B5A3-F393-E0A9-E50E24DCCA9E // 蓝牙事件回调 class MyCallbacks: public BLECharacteristicCallbacks { void onWrite(BLECharacteristic *pCharacteristic) { std::string rxValue pCharacteristic-getValue(); if (rxValue[0] a) { // 开指令 digitalWrite(RELAY_PIN, HIGH); } else if (rxValue[0] b) { // 关指令 digitalWrite(RELAY_PIN, LOW); } } };3.3 OLED状态显示优化为提升用户体验我们在0.91寸OLED上实现运行状态可视化void updateDisplay() { display.clearDisplay(); display.setTextSize(1); display.setCursor(0,0); display.print(状态: ); display.println(digitalRead(RELAY_PIN) ? ON : OFF); // 运行时间格式化显示 unsigned long uptime millis()/1000; display.setCursor(0,16); display.printf(运行: %02d:%02d:%02d, uptime/3600, (uptime%3600)/60, uptime%60); display.display(); }4. 功耗测试与优化方案4.1 实测数据对比在不同工作模式下的电流消耗工作状态平均电流估算年耗电等效电费(0.6元/度)待机模式28mA2.45度¥1.47蓝牙连接32mA2.80度¥1.68继电器吸合65mA5.69度¥3.414.2 深度节能技巧通过软件优化可进一步降低功耗动态广播间隔调整// 连接后降低广播频率 esp_ble_gap_set_adv_params(adv_params);CPU频率调节setCpuFrequencyMhz(80); // 在空闲时降频运行自动休眠机制if(millis() - lastActive 300000) { // 5分钟无操作 esp_deep_sleep_start(); }5. 进阶功能扩展完成基础版本后可以考虑添加这些实用功能用电统计通过INA219模块监测实时功率定时任务内置RTC实现预约开关温度保护当检测到过热时自动断电多设备联动通过ESP-NOW协议组网// 简单的定时任务实现示例 void checkSchedules() { time_t now time(nullptr); for(auto task : tasks) { if(now task.executeTime !task.executed) { digitalWrite(RELAY_PIN, task.action); task.executed true; } } }实际使用中发现添加一个简单的物理按钮作为手动开关备用非常实用当手机不在身边时也能控制设备。接线方法是在RELAY_PIN和GND之间接入一个常开按钮并在代码中添加去抖逻辑。