数码之家

 找回密码
 立即注册
搜索
查看: 3346|回复: 53

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

[复制链接]
发表于 2022-5-22 15:03:37 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

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

x
本帖最后由 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块
DSC08073.JPG

                               
登录/注册后可看大图
PCB

                               
登录/注册后可看大图
DSC08074.JPG

                               
登录/注册后可看大图
DSC08075.JPG
2块PCB都焊好原件
DSC08076.JPG

                               
登录/注册后可看大图
PCB拼接起来
DSC08078.JPG

                               
登录/注册后可看大图
PCB正面

                               
登录/注册后可看大图
DSC08079.JPG

                               
登录/注册后可看大图
DSC08081.JPG
PCB背面HC595

                               
登录/注册后可看大图
DSC08082.JPG
打样的PCB,这还只是一小部分
DSC08083.JPG

                               
登录/注册后可看大图
继电器焊好
DSC08084.JPG

                               
登录/注册后可看大图
换个角度
DSC08085.JPG

                               
登录/注册后可看大图
PCB背面

                               
登录/注册后可看大图
DSC08086.JPG
改装对象
DSC08087.JPG

                               
登录/注册后可看大图
公牛插座
DSC08088.JPG

                               
登录/注册后可看大图
型号铭牌
DSC08089.JPG

                               
登录/注册后可看大图
特制螺丝加特制螺丝刀
DSC08090.JPG

                               
登录/注册后可看大图
拆开插座
DSC08091.JPG

                               
登录/注册后可看大图
继续拆
DSC08092.JPG

                               
登录/注册后可看大图
拆LED指示灯
DSC08093.JPG

                               
登录/注册后可看大图
PCB安装试下
DSC08094.JPG

                               
登录/注册后可看大图
固定柱高了
DSC08095.JPG

                               
登录/注册后可看大图


                               
登录/注册后可看大图
直接截断

                               
登录/注册后可看大图
DSC08096.JPG
这个位置也高了,截断
DSC08097.JPG

                               
登录/注册后可看大图
圈圈全部截断

                               
登录/注册后可看大图
DSC08098.JPG
DSC08099.JPG
DSC08100.JPG


                               
登录/注册后可看大图

                               
登录/注册后可看大图
原开关
DSC08101.JPG

                               
登录/注册后可看大图
只取开关帽

                               
登录/注册后可看大图
DSC08102.JPG
DSC08103.JPG
DSC08104.JPG

                               
登录/注册后可看大图

                               
登录/注册后可看大图
螺柱加强筋顶到PCB了
DSC08105.JPG

                               
登录/注册后可看大图
这个加强筋也顶到了
DSC08106.JPG

                               
登录/注册后可看大图
加强筋直接处理掉
DSC08107.JPG

                               
登录/注册后可看大图
另一边的加强筋
DSC08108.JPG

                               
登录/注册后可看大图
指示灯固定座也搞了,直接截断
DSC08111.JPG

                               
登录/注册后可看大图
PCB装好后,按键基本在中间
DSC08113.JPG
背壳4个固定柱档到继电器了,截掉
DSC08114.JPG

                               
登录/注册后可看大图
LED,取前端导光部分
DSC08115.JPG

                               
登录/注册后可看大图
LED导光安装到LED固定座,按键中间打热熔胶,减小与轻触开关之间的间隙
DSC08116.JPG
DSC08117.JPG

                               
登录/注册后可看大图

                               
登录/注册后可看大图
处理后的样子
DSC08118.JPG

                               
登录/注册后可看大图
火线用导线连接铜触片
DSC08121.JPG

                               
登录/注册后可看大图
换个角度
DSC08124.JPG

                               
登录/注册后可看大图
电源模块加高温胶纸绝缘
DSC08128.JPG

                               
登录/注册后可看大图
装好电源模块的样子
DSC08131.JPG

                               
登录/注册后可看大图
LED导光柱加热熔胶固定
DSC08134.JPG
DSC08133.JPG

                               
登录/注册后可看大图

                               
登录/注册后可看大图
火线焊接到PCB
DSC08135.JPG

                               
登录/注册后可看大图
全部连接好
DSC08136.JPG

                               
登录/注册后可看大图
接线特写
DSC08137.JPG

                               
登录/注册后可看大图
装好螺丝,严丝合缝,和原装的一样
DSC08139.JPG

                               
登录/注册后可看大图
正面,也是和原装一模一样

                               
登录/注册后可看大图
DSC08143.JPG
WEB配置及控制界面
微信截图_20220513131624.jpg
微信截图_20220513131638.jpg

                               
登录/注册后可看大图

                               
登录/注册后可看大图
Home Assistant WEB界面 支持插座反馈状态
微信截图_20220513132245.jpg
微信图片_20220513132312.jpg

                               
登录/注册后可看大图

                               
登录/注册后可看大图
固件升级页面,直接WEB上传bin文件升级
微信截图_20220513133206.jpg


                               
登录/注册后可看大图

- 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";

DSC08077.JPG
DSC08080.JPG
DSC08109.JPG
DSC08110.JPG
DSC08112.JPG
DSC08119.JPG
DSC08120.JPG
DSC08122.JPG
DSC08123.JPG
DSC08125.JPG
DSC08126.JPG
DSC08127.JPG
DSC08129.JPG
DSC08130.JPG
DSC08132.JPG
DSC08138.JPG
DSC08140.JPG
DSC08141.JPG
DSC08142.JPG

打赏

参与人数 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, 2024-3-29 14:26 , Processed in 0.390000 second(s), 14 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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