发作品签到
标准版

ESP8266低功耗4位插座

工程标签

3.0k
0
0
9

简介

ESP8266 制作的低功耗 4位智能插座

简介:ESP8266 制作的低功耗 4位智能插座

开源协议

GPL 3.0

创建时间:2022-05-13 09:58:57更新时间:2022-05-23 02:27:42

描述

   打印机等设备太多,长期通电待机功耗大,不同电,使用时又不方便,之前一直使用小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交流电,非专业人士请勿拆开和改造!该文章仅为展示,如仿制请自行注意安全!!!
本开源项目遵循GPL3.0开源协议,但是如果商用,请您捐助所得净利的20%给慈善项目并且将整个捐款订单公开,如果做不到请不要商用







WEB配置及控制界面


Home Assistant WEB界面 支持插座反馈状态




固件升级页面,直接WEB上传bin文件升级

Home Assistant 配置文件 
configuration.yaml 文件添加 “ switch: !include switchs.yaml”
switchs.yaml 文件如下这是1个插座,多个插座自行更改设备名及订阅主题
- 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
#include
#include
#include
#include
#include
#include
#include
#include


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 地址 120

String K1_name = "开关1"; //开关1名称 EEPROM 地址 200
String K2_name = "开关2"; //开关2名称 EEPROM 地址 220
String K3_name = "开关3"; //开关3名称 EEPROM 地址 240
String K4_name = "开关4"; //开关4名称 EEPROM 地址 260


const char ssid[] = "*****"; //WiFi名 EEPROM 地址 140
const char pass[] = "****"; //WiFi密码 EEPROM 地址 160




ADC_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 地址 101
int K2_flg;//定义开关1状态标志位 EEPROM 地址 102
int K3_flg;//定义开关1状态标志位 EEPROM 地址 103
int K4_flg;//定义开关1状态标志位 EEPROM 地址 104


int O595_1_flg = 255;//定义595 1 标志位
int O595_2_flg = 255;//定义595 1 标志位
int K1_ACflag = 2; // EEPROM 地址 181
int K2_ACflag = 2; // EEPROM 地址 182
int K3_ACflag = 2; // EEPROM 地址 183
int K4_ACflag = 2; // EEPROM 地址 184

uint32_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 = "\n";
htmlCode += "\n";
htmlCode += "GN-B3034智能插座\n";
htmlCode += "\n";
htmlCode += "\n";
htmlCode += "\n";
htmlCode += "\n";
htmlCode += "\n";
htmlCode += "

GN-B3034智能插座控制页面


\n";
htmlCode += "

请输入0或1控制开关


\n";
htmlCode += "\n";
htmlCode += " 0为关,1为开
\n";
htmlCode += "开关1
htmlCode += K1_flg;
htmlCode += "\" size=\"5\" initial-scale = 2.0 autocomplete=\"off\">(";
htmlCode += K1_name;
htmlCode += ")
\n";
htmlCode += "开关2
htmlCode += K2_flg;
htmlCode += "\" size=\"5\" initial-scale = 2.0 autocomplete=\"off\">(";
htmlCode += K2_name;
htmlCode += ")
\n";
htmlCode += "开关3
htmlCode += K3_flg;
htmlCode += "\" size=\"5\" initial-scale = 2.0 autocomplete=\"off\">(";
htmlCode += K3_name;
htmlCode += ")
\n";
htmlCode += "开关4
htmlCode += K4_flg;
htmlCode += "\" size=\"5\" initial-scale = 2.0 autocomplete=\"off\">(";
htmlCode += K4_name;
htmlCode += ")
\n";
htmlCode += "
\n";
htmlCode += "

系统参数设

\n";
htmlCode += "\n";
htmlCode += "网络名称\n";
htmlCode += "\n";
htmlCode += "\n";
htmlCode += "\n";
htmlCode += "\n";
htmlCode += "网络密码\n";
htmlCode += "\n";
htmlCode += "\n";
htmlCode += "设备名称
htmlCode +=read_String(120);
htmlCode += "\" size=\"20\" initial-scale = 2.0 autocomplete=\"off\">\n";
htmlCode += "(为Auto时系统自动生成)\n";
htmlCode += "

上电开关状态(关闭/开启/保持上次)\n";

htmlCode += "

开关1 | 开关2 | 开关3 | 开关4
\n";

htmlCode += "\n";
htmlCode += "\n";
htmlCode += "\n";
htmlCode += "
if(K1_ACflag == 0){htmlCode += " selected=\"selected\"";}
htmlCode += ">关闭\n";
htmlCode += "
if(K1_ACflag == 1){htmlCode += " selected=\"selected\"";}
htmlCode += ">开启\n";
htmlCode += "
if(K1_ACflag == 2){htmlCode += " selected=\"selected\"";}
htmlCode += ">不变\n";
htmlCode += "\n";
htmlCode += "\n";
htmlCode += "
if(K2_ACflag == 0){htmlCode += " selected=\"selected\"";}
htmlCode += ">关闭\n";
htmlCode += "
if(K2_ACflag == 1){htmlCode += " selected=\"selected\"";}
htmlCode += ">开启\n";

设计图

原理图
PCB

BOM

IDNameDesignatorFootprintQuantity
1RPD5W05E3V3L3V1RPD5W05E3V3L1
2100nFC1,C2,C3,C4,C5,C6,C706037
3100uFC12CAP-SMD_BD6.3-L6.6-W6.6-FD1
4LS4148D1,D2,D3,D4,D5,D6,D7,D8LL-34_L3.5-W1.5-RD8
5HF3F-L/5-1HL2TJ1,J2,J3,J4HF3F-L/5-1HL2T V1.04

附件

序号文件名称下载次数
暂无数据
克隆工程
添加到专辑
0
0
分享
侵权投诉

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航