基于立创ESP32开发板的智能安全排插DIY:双模控制与NTC温度监测

基于立创ESP32开发板的智能安全排插DIY:双模控制与NTC温度监测 基于立创ESP32开发板的智能安全排插DIY双模控制与NTC温度监测大家好我是老张一个喜欢捣鼓智能家居的嵌入式工程师。不知道你有没有这样的烦恼晚上睡觉房间里各种路由器、充电器、机顶盒的指示灯亮得跟星星似的特别影响睡眠。更烦人的是睡前想关掉路由器省电结果关了之后发现自己睡不着了还得爬起来再打开。为了解决这个痛点我琢磨着做一个能用手机远程控制的智能排插而且必须把安全放在第一位。今天我就把这个基于立创ESP32开发板的智能安全排插DIY项目分享给大家从硬件安全设计到软件双模控制手把手带你做出来。这个排插的核心功能很简单用手机APP远程控制每个插孔的通断电。但它的亮点在于“安全”和“可靠”。安全方面我设计了总开关继电器和NTC温度监测可靠方面它支持Wi-Fi和蓝牙双模控制网络断了也不怕。下面咱们就从硬件选型开始一步步把这个项目做出来。1. 硬件设计与安全考量做这种直接控制220V市电的项目安全永远是第一位的。我选择用市面上成熟的排插进行改装而不是自己从头做外壳和铜条这样在机械结构和电气安全上更有保障。1.1 核心控制板与电源主控芯片我选用的是立创ESP32开发板。ESP32这颗芯片大家应该不陌生它集成了Wi-Fi和蓝牙性能足够社区支持也好非常适合物联网项目。系统供电这是整个设计的第一个安全关键点。ESP32开发板需要5V供电这个5V绝对不能直接从220V用阻容降压之类不隔离的方案来我使用了一个独立的AC-DC降压模块比如常见的220V转5V的开关电源模块这个模块的220V输入端接在排插的总开关之后。这样设计的好处是当排插的总开关关闭时整个智能控制系统是完全断电的没有任何待机功耗也更安全。1.2 核心安全设计总开关继电器与NTC为了让这个智能排插比普通排插更安全我加入了两个核心的安全机制。1. 总开关继电器安全继电器这个设计灵感来源于工业设备中的“安全回路”。我在电路中增加了一个继电器1它和排插原有的机械总开关是并联关系。它的工作逻辑是这样的ESP32开发板上电后会立即控制这个继电器1吸合闭合。此时电流可以通过继电器1的触点为后面的各个分路继电器供电。一旦ESP32检测到任何异常比如过温、程序跑飞或者直接收到APP的紧急断开命令它会立刻断开继电器1。继电器1一断开就等于切断了排插内部所有电路的供电包括它自己、ESP32以及各个分路继电器。整个系统就彻底没电了实现了“故障安全”模式。你可以把它理解为一个电子保险丝但比保险丝更智能可以由程序主动控制断开。2. NTC温度监测第二个安全措施是防火。我在每一个插孔的火线触点附近都安装了一个NTC热敏电阻。NTC的电阻值会随着温度升高而降低。ESP32的ADC模数转换器可以读取这个电阻值对应的电压从而换算出温度。程序里会实时监测每个插孔的温度。如果某个插孔因为接触不良、负载过大等原因导致异常发热温度超过我设定的安全阈值比如70℃ESP32就会立刻触发保护动作——断开总开关继电器1切断所有电源防止火灾隐患。1.3 执行单元分路继电器控制每个插孔通断电的是普通的5V控制电压的继电器模块。一个继电器控制一个插孔。ESP32的GPIO引脚输出高/低电平就能驱动继电器的线圈从而控制其触点的开合实现插孔通电与断电。 我用了5个继电器对应控制5个插孔。你需要根据你选用的排插孔位数来决定继电器数量。硬件连接总结表元件作用连接说明安全等级AC-DC降压模块为系统提供5V安全隔离电源输入接排插总开关后输出接ESP32和继电器高隔离电源是基础继电器1总开关/安全继电器与机械总开关并联由ESP32控制最高系统总安全保障分路继电器控制单个插孔通电ESP32 GPIO引脚控制其线圈中NTC热敏电阻监测插孔温度贴于插孔铜片接ESP32 ADC引脚高主动防火立创ESP32开发板主控制器接收指令控制所有继电器读取温度核心注意所有涉及220V电路的接线务必确保断电操作接线牢固做好绝缘使用热缩管或绝缘胶带。如果你对强电操作不熟悉建议请有经验的朋友协助或使用低压设备先模拟测试逻辑。2. 软件与通信逻辑硬件搭好了大脑程序是关键。这个项目的软件核心是实现可靠的双模控制和安全监测。2.1 双模控制永远在线的秘诀为什么需要双模想象一下你用手机APP通过Wi-Fi控制排插关闭了路由器。之后你想再打开路由器但此时路由器关了Wi-Fi网络也就断了你的手机和ESP32无法通过Wi-Fi通信了这就成了“死局”。我的解决方案是Wi-Fi 蓝牙双模模式一Wi-Fi控制当路由器开机ESP32能连上Wi-Fi和互联网时使用物联网平台如点灯科技Blinker进行远程控制。你可以在公司、在户外控制家里的排插。模式二蓝牙控制当路由器关闭或网络故障时ESP32会自动切换到蓝牙模式。此时你可以用手机直接连接ESP32的蓝牙在近距离内通常10米内用APP进行控制。这样就能在关闭路由器后依然能用手机打开它。这确保了控制通道“永远在线”极大提升了实用性。2.2 物联网平台选择与代码解析我这里以**点灯科技Blinker**为例因为它对初学者非常友好APP配置简单。当然你也可以用阿里云IoT等更专业的平台附件里也提供了UniApp的Demo可供参考。下面我们来详细看看核心代码。代码主要做了三件事控制继电器、读取温度、与APP交互。首先是引脚定义和Blinker组件的初始化。这里我定义了5个插孔的控制引脚和对应的温度检测引脚。#include Blinker.h // 引入点灯科技库 // 定义5个继电器的控制引脚 (根据你的实际接线修改) #define S_A 10 #define S_2 11 #define S_3 12 #define S_4 13 #define S_5 14 // 定义5个NTC温度传感器的ADC输入引脚 #define Temp_A 6 #define Temp_2 8 #define Temp_3 5 #define Temp_4 9 #define Temp_5 7 // 在Blinker APP中创建按钮和数字显示组件并绑定对应的键名 // 例如APP上第一个按钮键名为btn-abc BlinkerButton Button1(btn-abc); BlinkerNumber Number1(num-100); // ... 为其他4个插孔定义类似的按钮和数字显示组件接下来是一个非常重要的函数readTemp。它的作用是把从NTC读取到的ADC值换算成实际的摄氏温度。// NTC 温度读取函数 float readTemp(int pinNo) { int sensorValue analogRead(pinNo); // 读取ADC值 (ESP32 ADC为12位范围0-4095) float voltage (sensorValue / 4095.00) * 3.3 ; // 将ADC值转换为电压 (假设参考电压3.3V) // 假设NTC与一个10K电阻串联分压计算NTC当前的电阻值 float res 10000 * voltage / (3.3 - voltage); // 使用Steinhart-Hart方程计算温度 (这里的B值3980是典型值请根据你的NTC规格书修改) float temp 1 / ((log(res / 10000) / 3980) 1 / 298.15) - 273.15; return temp; }提示3980是NTC的B常数10000是NTC在25℃时的标称阻值10K。这两个参数一定要根据你实际购买的NTC元件规格书进行修改否则测出的温度不准。然后我们为APP上的每个按钮设置回调函数。当你在APP上点击按钮时对应的函数就会被调用。void button1_callback(const String state) { BLINKER_LOG(get button state: , state); // 打印日志方便调试 digitalWrite(S_A, !digitalRead(S_A)); // 翻转S_A引脚的电平从而开关继电器 // 调用函数更新APP上按钮的显示状态比如颜色 // button_update(Button2, S_A); } // ... 为其他按钮设置类似的回调函数在setup()函数中我们需要初始化引脚模式并启动Blinker。void setup() { Serial.begin(115200); // 初始化串口用于调试输出 BLINKER_DEBUG.stream(Serial); // 将Blinker的调试信息也输出到串口 // 将所有继电器控制引脚设置为输出模式 pinMode(S_A, OUTPUT); pinMode(S_2, OUTPUT); // ... // 将所有温度检测引脚设置为输入模式 pinMode(Temp_A, INPUT); // ... Blinker.begin(); // 初始化Blinker内部会处理Wi-Fi/蓝牙的连接 // 绑定数据回调函数当APP请求数据时会触发此函数 Blinker.attachData(dataRead); // 为每个按钮绑定其对应的回调函数 Button1.attach(button1_callback); // ... }最后在loop()函数中只需要持续运行Blinker的任务调度器即可。void loop() { Blinker.run(); // 必须持续调用以处理网络通信、心跳、回调等事件 }2.3 安全逻辑的融入在上面的基础代码中如何加入我们之前说的安全逻辑呢温度监测与保护你可以在loop()中定期调用readTemp函数读取每个插孔的温度。一旦发现某个温度超过阈值例如if(temp 70.0)立即执行digitalWrite(总开关继电器引脚, LOW);来切断总电源并通过Blinker.notify()发送报警消息到手机APP。总开关控制在APP上可以设置一个独立的“紧急断电”按钮其回调函数直接控制总开关继电器断开。同时在程序初始化 (setup) 的最后记得要主动闭合总开关继电器让系统上电。3. 动手组装与调试要点理论说完了咱们来聊聊实际动手时会遇到的坑。3.1 改装步骤拆解排插选择一款质量可靠的排插小心拆开外壳。注意观察内部结构规划好继电器、ESP32开发板和降压模块的摆放位置确保不干涉插头的插入并留有安全距离。固定元件使用尼龙柱、螺丝或强力胶注意耐高温将ESP32、继电器模块、降压模块固定在排插内部空位。确保所有元件稳固不会松动碰到金属部件。连接低压电路将降压模块的5V输出接到ESP32的5V和GND。将ESP32的GPIO引脚如10,11,12,13,14连接到各个分路继电器的IN或SIG引脚。将各个分路继电器的COM、NO常开端触点串联到对应插孔的火线线路中。这部分涉及强电务必仔细接完后用万用表通断档检查。将总开关继电器继电器1的触点并联在排插的总开关两端。同样其控制线接到ESP32的另一个GPIO上。将NTC热敏电阻一端接对应的ESP32 ADC引脚另一端与一个10K的定值电阻串联后接在3.3V和GND之间组成分压电路。连接高压电路将降压模块的220V输入线接到排插总开关的输出端即开关之后。检查所有220V接线是否牢固、绝缘是否完好。上电前最终检查目视检查所有接线确保无短路、无裸露。用万用表测量5V电源是否对大地排插地线绝缘良好。3.2 调试与常见问题问题ESP32无法连Wi-Fi/蓝牙检查代码中的Wi-Fi名称SSID和密码是否正确。确保路由器2.4G网络开放ESP32不支持5G。检查Blinker的设备密钥auth是否在代码中正确配置。这个密钥需要在点灯APP中添加设备时获取。问题APP能控制但继电器不动作检查继电器模块的VCC和JD-VCC跳线帽是否正确。通常如果模块自带光耦隔离需要用跳线帽将VCC与JD-VCC短接以给继电器线圈供电。检查用万用表测量ESP32的GPIO引脚在按钮按下时是否有电平变化0V-3.3V。检查继电器模块的信号地GND是否与ESP32的GND连接在一起。问题温度读数不准或跳动大检查readTemp函数中的B值和标称电阻是否与你的NTC匹配。检查可以在代码中直接打印sensorValue的原始值看看是否稳定。如果跳动大可能是电源噪声或接线问题可以在ADC引脚加一个0.1uF的电容到地滤波。校准用已知温度如冰水混合物0℃室温用温度计测进行校准修正计算参数。这个项目做下来最深的体会就是安全无小事。尤其是当我们自己动手改造强电设备时每一个细节都必须考虑周全。这个双模控制的设计在实际使用中非常可靠再也没有出现过关了路由器就控制不了的尴尬。希望这个详细的教程能帮你做出属于自己的、既智能又安全的智能排插。如果在制作过程中遇到任何问题欢迎一起交流探讨。