数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 5256|回复: 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 谢谢分享。。。。。。

查看全部打赏

发表于 2023-3-31 10:18:42 | 显示全部楼层
借鉴学习下,谢谢分享。
回复 支持 反对

使用道具 举报

发表于 2023-3-13 15:32:08 | 显示全部楼层
一看就是高手,但是,我总觉得WIFI都没有那么省电的,只要WIFI开着。
回复 支持 反对

使用道具 举报

发表于 2023-3-12 20:10:04 | 显示全部楼层
进来学习学习,
回复 支持 反对

使用道具 举报

发表于 2023-3-3 14:06:56 | 显示全部楼层
lemontreenm 发表于 2023-3-2 13:22
可以用8266的modernsleep模式或者lightsleep模式,这两个模式下wifi都不会断,前者待机18ma,后者待机2ma ...

有市电不在乎是100ma,18ma还是2ma。
没市电,2ma也不可接受。
回复 支持 反对

使用道具 举报

发表于 2023-3-2 13:43:27 | 显示全部楼层
做得真漂亮。跟原装似的
回复 支持 反对

使用道具 举报

发表于 2023-3-2 13:22:09 | 显示全部楼层
fryefryefrye 发表于 2022-5-22 21:59
esp8266只要wifi开着,就有0.5瓦的功率。
可以休眠,但是休眠的话,wifi就断了,就不能控制了。
我觉得根 ...

可以用8266的modernsleep模式或者lightsleep模式,这两个模式下wifi都不会断,前者待机18ma,后者待机2ma
回复 支持 反对

使用道具 举报

发表于 2022-11-27 17:46:18 来自手机浏览器 | 显示全部楼层
改装得很漂亮
回复 支持 反对

使用道具 举报

发表于 2022-11-27 00:34:08 | 显示全部楼层
精彩,希望楼主多多研发
回复 支持 反对

使用道具 举报

发表于 2022-11-25 10:05:01 | 显示全部楼层
再加上电量统计就完美了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-31 11:01:47 | 显示全部楼层
帐号 发表于 2022-7-28 23:02
成品得多少钱,想买

就做了几个自己用 打了20片PCB,想要可以出两片你
回复 支持 反对

使用道具 举报

发表于 2022-7-29 08:41:03 | 显示全部楼层
这确实很牛了的!
回复 支持 反对

使用道具 举报

发表于 2022-7-29 07:08:53 | 显示全部楼层
谢谢分享  学习一下
回复 支持 反对

使用道具 举报

发表于 2022-7-28 23:02:07 来自手机浏览器 | 显示全部楼层
成品得多少钱,想买
回复 支持 反对

使用道具 举报

发表于 2022-7-26 09:39:16 | 显示全部楼层
感谢分享,值得学习
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-26 01:14:52 来自手机浏览器 | 显示全部楼层
gl542400 发表于 2022-6-23 20:06
磁保持继电器  一个多少钱

3.3  双线圈
回复 支持 反对

使用道具 举报

发表于 2022-6-23 20:06:00 | 显示全部楼层
磁保持继电器  一个多少钱  
回复 支持 反对

使用道具 举报

发表于 2022-6-23 11:28:18 | 显示全部楼层
这走线的距离,坐等炸插排....
回复 支持 反对

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-21 23:04 , Processed in 0.296401 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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