数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 5263|回复: 53

[Arduino] 低功耗ESP8266 4位智能插座(开源)

[复制链接]
发表于 2022-5-22 15:03:37 | 显示全部楼层 |阅读模式
本帖最后由 zhigao1986 于 2022-5-23 10:36 编辑

      打印机等设备太多,长期通电待机功耗大,不同电,使用时又不方便,之前一直使用小K 一位智能插座,连接排插,定时开关所有设备。知道最近玩起ESP8266,学习了Arduino,所以产生了自己DIY智能插座的项目。

     目前已实现功能:1.低功耗设计,采用4只磁保持继电器,只在开关动作时继电器线圈通电,其余时间只有ESP8266待机耗电,用USB电流表测试整个PCB待机电流0.08A,单个继电器动作时电流0.15A。

                             2.断网状态 4位插座可独立使用按键控制,相应LED指示通断状态。

                             3.采用MQTT协议接入Home Assistant,可使用Home Assistant WEB或者手机客户端控制每位开关,同时插座会反馈按键开关操作插座的状态,按动任意按键,插座将局域网IP发送给MQTT订阅主题

                             4.使用ESP8266 WEBserver服务,可网页操作开关通断(同时支持POST参数控制,可接入其他自动控制设备或程序)

                             5.使用ESP8266 EEPROM存储开关状态,重启上电可分别设置每位开关状态为 关闭/开启/保持上次状态(使用WEB配置)

                             6.WEB界面可设置4位开关备注名称

                             7.上电长按第3个按键(电源线端为按键1),可重置EEPROM参数

                             8.WIFI账号密码配网,使用过WiFiManager中文库做WEB配网,但偶尔程序跑飞,所以改成WEB页面配网,断码请自行完善

                             9.WEB配网及内置定时开关功能正在完善中,敬请期待

注意,插座带有220V交流电,非专业人士请勿拆开和改造!该文章仅为展示,如仿制请自行注意安全!!!

PCB在某创开源,标题同此标题。

本开源项目遵循GPL3.0开源协议,但是如果商用,请您捐助所得净利的20%给慈善项目并且将整个捐款订单公开,如果做不到请不要商用

PCB,为了薅羊毛,分成2块
PCB
2块PCB都焊好原件
PCB拼接起来
PCB正面
PCB背面HC595
打样的PCB,这还只是一小部分
继电器焊好
换个角度
PCB背面
改装对象
公牛插座
型号铭牌
特制螺丝加特制螺丝刀
拆开插座
继续拆
拆LED指示灯
PCB安装试下
固定柱高了

直接截断
这个位置也高了,截断
圈圈全部截断

原开关
只取开关帽
螺柱加强筋顶到PCB了
这个加强筋也顶到了
加强筋直接处理掉
另一边的加强筋
指示灯固定座也搞了,直接截断
PCB装好后,按键基本在中间
背壳4个固定柱档到继电器了,截掉
LED,取前端导光部分
LED导光安装到LED固定座,按键中间打热熔胶,减小与轻触开关之间的间隙
处理后的样子
火线用导线连接铜触片
换个角度
电源模块加高温胶纸绝缘
装好电源模块的样子
LED导光柱加热熔胶固定
火线焊接到PCB
全部连接好
接线特写
装好螺丝,严丝合缝,和原装的一样
正面,也是和原装一模一样
WEB配置及控制界面
Home Assistant WEB界面 支持插座反馈状态
固件升级页面,直接WEB上传bin文件升级


- platform: mqtt  name: "GN-B3043-1F773D-K1"      #设备名称,自己设置  state_topic: "GN-B3043-1F773D/state/K1"    # “GN-B3043-1F773D” MQTT订阅主题,即插座的设备名称,可网页自行设置,设置成Auto 则自动用MAC生产,该地址即自动生成  command_topic: "GN-B3043-1F773D/set/K1"  unique_id: "32b33778a2614be0a3290f81afdeaba9"   #实体ID,任意,不重复就行,不设置,Home Assistant会提示无唯一实体ID payload_on: "1"  payload_off: "0"  state_on: "1"  state_off: "0"  optimistic: false  qos: 0  retain: false  icon: mdi:monitor- platform: mqtt  name: "GN-B3043-1F773D-K2"  state_topic: "GN-B3043-1F773D/state/K2"  command_topic: "GN-B3043-1F773D/set/K2"  unique_id: "32b33778a2614be0a3290f81afdeabaa"  payload_on: "1"  payload_off: "0"  state_on: "1"  state_off: "0"  optimistic: false  qos: 0  retain: false- platform: mqtt  name: "GN-B3043-1F773D-K3"  state_topic: "GN-B3043-1F773D/state/K3"  command_topic: "GN-B3043-1F773D/set/K3"  unique_id: "32b33778a2614be0a3290f81afdeabab"  payload_on: "1"  payload_off: "0"  state_on: "1"  state_off: "0"  optimistic: false  qos: 0  retain: false  icon: mdi:television-classic- platform: mqtt  name: "GN-B3043-1F773D-K4"  state_topic: "GN-B3043-1F773D/state/K4"  command_topic: "GN-B3043-1F773D/set/K4"  unique_id: "32b33778a2614be0a3290f81afdeabac"  payload_on: "1"  payload_off: "0"  state_on: "1"  state_off: "0"  optimistic: false  qos: 0  retain: false

程序源码 EPS8266_4chazuo__595_V1.8_WEB_202205012_OTA__.rar



#include <ESP8266WiFi.h>#include <Ticker.h>#include <WiFiUdp.h>#include <WiFiManager.h>#include <EEPROM.h>#include <PubSubClient.h>#include <ESP8266WebServer.h>#include <ESP8266HTTPUpdateServer.h>Ticker flipper;//定义定时器//#define PIN_POWER 4           //指示灯位于GPIO4  #define PIN_LED 13           //指示灯位于GPIO2 #define KEY1 0           //KEY对应值GPI14 #define KEY2 2           //KEY对应值GPI14 #define KEY3 4           //KEY对应值GPI14 #define KEY4 5           //KEY对应值GPI14 int dspin  = 16;//74HC595的14脚 数据输入引脚SI       数据int clkpin = 12;//74hc595的11脚 时钟线 SCK          时钟int latpin = 14;//74hc595的12脚 输出存储器锁存线RCK  锁存String AutoRigName = "";// 设备名  如果“Auto”则使用MAC自动生成)String RIG_IDENTIFIER ; // EEPROM 地址 120String K1_name = "开关1";   //开关1名称   EEPROM 地址 200String K2_name = "开关2";   //开关2名称   EEPROM 地址 220String K3_name = "开关3";   //开关3名称   EEPROM 地址 240String K4_name = "开关4";   //开关4名称   EEPROM 地址 260const char ssid[] = "*****";      //WiFi名    EEPROM 地址 140const char pass[] = "****";   //WiFi密码   EEPROM 地址 160ADC_MODE(ADC_VCC);//设置ADC模式为读取系统电压int wifi_flg = 0;//WIFI状态标志   0 未连接 1 连接中  2 配网中  3 WIFI已连接  4 MQTT已连接int power_time = 0;//倒计时关机 int K1_flg;//定义开关1状态标志位    EEPROM 地址 101int K2_flg;//定义开关1状态标志位    EEPROM 地址 102int K3_flg;//定义开关1状态标志位    EEPROM 地址 103int K4_flg;//定义开关1状态标志位    EEPROM 地址 104int O595_1_flg = 255;//定义595 1 标志位int O595_2_flg = 255;//定义595 1 标志位int K1_ACflag = 2; // EEPROM 地址 181int K2_ACflag = 2; // EEPROM 地址 182int K3_ACflag = 2; // EEPROM 地址 183int K4_ACflag = 2; // EEPROM 地址 184uint32_t t=0;//按键计时WiFiClient espClient;PubSubClient client(espClient);const char* mqtt_server = "*******.f3322.org";//mqtt服务地址const char* clientID ="8266-001"; // 设备id//WiFiUDP Udp;//实例化WiFiUDP对象//unsigned int localUdpPort = 4321;  // 自定义本地监听端口//unsigned int remoteUdpPort = 8629;  // 自定义远程监听端口//char incomingPacket[255];  // 保存Udp工具发过来的消息//char  replyPacket[] = "Hi, this is esp8266\n";  //发送的消息,仅支持英文void callback(char *topic, byte* payload, unsigned int length); //回调函数声明,用于传入mqtt客户端构造函数作为参数//void write_String(int a,String str);//EEPROM写字符串//参数: MQTT服务器地址,端口号,回调函数名,承载的连接(WIFI)PubSubClient mqttClient(mqtt_server, 1833, callback, espClient);ESP8266WebServer server(80);ESP8266HTTPUpdateServer httpUpdater;//变量常量定义:String postForms() {  String htmlCode = "<!DOCTYPE html><html>\n";   htmlCode += "<head>\n";   htmlCode += "<title>GN-B3034智能插座</title>\n";   htmlCode += "<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>\n";   htmlCode += "<meta name='viewport' content='width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0'/>\n";   htmlCode += "<style>\n";   htmlCode += "body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\n";   htmlCode += "</style>\n";   htmlCode += "</head>\n";   htmlCode += "<body>\n";  htmlCode += "<h1>GN-B3034智能插座控制页面</h1><br>\n";    htmlCode += "<h3>请输入0或1控制开关</h3><br>\n";    htmlCode += "<form method=\"post\" enctype=\"application/x-www-form-urlencoded\" action=\"/\">\n";      htmlCode += "    0为关,1为开  <br>\n";      htmlCode += "开关1<input type=\"text\" name=\"K1_power\" value= \"";      htmlCode += K1_flg;      htmlCode += "\" size=\"5\" initial-scale = 2.0 autocomplete=\"off\">(";      htmlCode += K1_name;      htmlCode += ")<br>\n";      htmlCode += "开关2<input type=\"text\" name=\"K2_power\" value= \"";      htmlCode += K2_flg;      htmlCode += "\" size=\"5\" initial-scale = 2.0 autocomplete=\"off\">(";      htmlCode += K2_name;      htmlCode += ")<br>\n";      htmlCode += "开关3<input type=\"text\" name=\"K3_power\" value= \"";      htmlCode += K3_flg;      htmlCode += "\" size=\"5\" initial-scale = 2.0 autocomplete=\"off\">(";      htmlCode += K3_name;      htmlCode += ")<br>\n";      htmlCode += "开关4<input type=\"text\" name=\"K4_power\" value= \"";      htmlCode += K4_flg;      htmlCode += "\" size=\"5\" initial-scale = 2.0 autocomplete=\"off\">(";      htmlCode += K4_name;      htmlCode += ")<br>\n";           htmlCode += "<input type=\"submit\" value=\"应用\"></form><hr>\n";      htmlCode += "<h3>系统参数设</h3>\n";      htmlCode += "<form method=\"post\" enctype=\"application/x-www-form-urlencoded\" action=\"/\">\n";      htmlCode += "网络名称<input type=\"text\" name=\"network_name\" value= \"0\" size=\"20\" initial-scale = 2.0 autocomplete=\"off\">\n";      htmlCode += "\n";    htmlCode += "<input type=\"submit\" value=\"修改\">\n";    htmlCode += "</form>\n";    htmlCode += "<form method=\"post\" enctype=\"application/x-www-form-urlencoded\" action=\"/\">\n";       htmlCode += "网络密码<input type=\"text\" name=\"network_password\" value= \"0\" size=\"20\" initial-scale = 2.0 autocomplete=\"off\">\n";    htmlCode += "<input type=\"submit\" value=\"修改\"></form>\n";    htmlCode += "<form method=\"post\" enctype=\"application/x-www-form-urlencoded\" action=\"/\">\n";        htmlCode += "设备名称<input type=\"text\" name=\"RIG_IDENTIFIER\" value= \"";      htmlCode +=read_String(120);      htmlCode += "\" size=\"20\" initial-scale = 2.0 autocomplete=\"off\">\n";

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 7家元 +150 收起 理由
11828 + 60 優秀文章
200birds + 20
jpdd521 + 20 再加上电量统计就完美了。
nokia5320 + 10
l2588 + 10 謝謝分享
wxhjsr + 20 優秀文章
温力口 + 10 谢谢分享。。。。。。

查看全部打赏

发表于 2022-5-22 15:08:50 | 显示全部楼层
不错不错。。。学习一下
回复 支持 反对

使用道具 举报

发表于 2022-5-22 15:14:56 | 显示全部楼层
好奇一共发了几张图片?
回复 支持 反对

使用道具 举报

发表于 2022-5-22 15:17:03 | 显示全部楼层
谢谢分享,借鉴学习下。
回复 支持 反对

使用道具 举报

发表于 2022-5-22 15:20:02 | 显示全部楼层
高手,一个简单的插座被你玩到了极致。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-22 15:23:50 | 显示全部楼层
wxhjsr 发表于 2022-5-22 15:20
高手,一个简单的插座被你玩到了极致。

小白一个,以前玩过STC 皮毛,拆机ESP8266太便宜才接触Arduino,各种搜,到处COPY,才凑出来,大神看了估计要笑话的
回复 支持 反对

使用道具 举报

发表于 2022-5-22 15:27:07 | 显示全部楼层
谢谢分享  学习一下
回复 支持 反对

使用道具 举报

发表于 2022-5-22 15:39:04 | 显示全部楼层
全部开关打开的待机功率多大?我感觉现在的智能开关耗电都在继电器上了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-22 15:45:50 | 显示全部楼层
leafchy 发表于 2022-5-22 15:39
全部开关打开的待机功率多大?我感觉现在的智能开关耗电都在继电器上了。 ...

磁保持继电器,只在 开 或关动作的时候线圈通电100MS
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-22 15:48:31 | 显示全部楼层
leafchy 发表于 2022-5-22 15:39
全部开关打开的待机功率多大?我感觉现在的智能开关耗电都在继电器上了。 ...

就是顾虑这个才选择自己制作一个插座,整个插座除插座外最贵的也是4只双线圈磁保持继电器
回复 支持 反对

使用道具 举报

发表于 2022-5-22 15:48:38 | 显示全部楼层
zhigao1986 发表于 2022-5-22 15:23
小白一个,以前玩过STC 皮毛,拆机ESP8266太便宜才接触Arduino,各种搜,到处COPY,才凑出来,大神看了估 ...

实用才是王道
回复 支持 反对

使用道具 举报

发表于 2022-5-22 16:16:52 | 显示全部楼层
为什么你使用功耗那么低。我用的tcp方式,wifi,连云服务器。功耗都有0.5,0.6瓦了。
我做错什么了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-22 16:19:59 | 显示全部楼层
brianlee 发表于 2022-5-22 16:16
为什么你使用功耗那么低。我用的tcp方式,wifi,连云服务器。功耗都有0.5,0.6瓦了。
我做错什么了? ...

继电器,普通继电器线圈一直要通电吸合,吸合电流100ma 以上了,这个用的双线圈磁保持继电器,只在开关 动作时通电100ms 就可以了
回复 支持 反对

使用道具 举报

发表于 2022-5-22 16:28:45 | 显示全部楼层
加个实时显示电压功能吧,别浪费了。
回复 支持 反对

使用道具 举报

发表于 2022-5-22 16:45:59 | 显示全部楼层
zhigao1986 发表于 2022-5-22 16:19
继电器,普通继电器线圈一直要通电吸合,吸合电流100ma 以上了,这个用的双线圈磁保持继电器,只在开关  ...

好像不是继电器问题,我有的不用继电器那个耗电依旧是那个相仿。
esp8266本身需要特定的设置来省电吗
回复 支持 反对

使用道具 举报

发表于 2022-5-22 16:47:43 | 显示全部楼层
junyee 发表于 2022-5-22 16:28
加个实时显示电压功能吧,别浪费了。

这样要做的就多不少了,整流滤波,分压,然后这些需要比较好的隔离以保安全
回复 支持 反对

使用道具 举报

发表于 2022-5-22 16:52:13 | 显示全部楼层
楼主这个制作不错,普通插排立马升级为可远程控制的插排了,但没有看见线路图啊。
回复 支持 反对

使用道具 举报

发表于 2022-5-22 17:13:31 | 显示全部楼层
高手进来学习学习,估计自己也做不出来啊,呵呵
回复 支持 反对

使用道具 举报

发表于 2022-5-22 21:59:59 | 显示全部楼层
brianlee 发表于 2022-5-22 16:16
为什么你使用功耗那么低。我用的tcp方式,wifi,连云服务器。功耗都有0.5,0.6瓦了。
我做错什么了? ...

esp8266只要wifi开着,就有0.5瓦的功率。
可以休眠,但是休眠的话,wifi就断了,就不能控制了。
我觉得根本省不掉。
回复 支持 1 反对 0

使用道具 举报

发表于 2022-5-22 22:02:00 | 显示全部楼层
brianlee 发表于 2022-5-22 16:45
好像不是继电器问题,我有的不用继电器那个耗电依旧是那个相仿。
esp8266本身需要特定的设置来省电吗 ...

8266休眠之后,只能定时唤醒,或者外部触发低电平唤醒。休眠期间wifi中断。无法被网络控制。
8266的低功耗模式,基本上只能用于 定时或者触发 方式上传数据的场景。

打赏

参与人数 1家元 +5 收起 理由
brianlee + 5 精彩回帖

查看全部打赏

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-22 16:39 , Processed in 0.187200 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表