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

      打印机等设备太多,长期通电待机功耗大,不同电,使用时又不方便,之前一直使用小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%给慈善项目并且将整个捐款订单公开,如果做不到请不要商用

PCB,为了薅羊毛,分成2块

PCB

2块PCB都焊好原件

PCB拼接起来

PCB正面

ESP8266 airkiss Arduino IED配网 源码



     改写光合未来N1模块过程中网上找的N多Airkiss 配网程序,遇到各种坑,现把可以正常使用的代码分享出来。目前实现功能 

       1.使用乐鑫官方公众号AIRKISS或第三方网页AIRKISS配网(有时会不稳定) 

       2.使用乐鑫ESPTOUCH软件配网(成功率很高,推荐) 

       3.自动保存已配网AP信息,开机自动连接,超过20次连接失败则自动进入配网模式 

       4.单LED指示灯指示网络状态,慢闪:WIFI连接中 快闪:配网模式 10秒闪0.1秒:待机指示 


代码如下:


#include <ESP8266WiFi.h>
#include <Ticker.h> Ticker flipper;//定义定时器


#define PIN_LED 12           //指示灯位于GPIO12

int wifi_flg = 0;//WIFI状态标志   0 未连接 1 连接中  2 配网中  3 MQTT已连接

bool autoConfig()
{
  WiFi.begin();
  for (int i = 0; i < 20; i++)
  {
    int wstatus = WiFi.status();
    if (wstatus == WL_CONNECTED)
    {
      Serial.println("AutoConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      WiFi.printDiag(Serial);
      
        //每隔5s 翻转一下led状态,开始连网模式,慢闪
        //   flipper.attach(5, flip2); 
      flipper.detach();//定时器停止
      digitalWrite(PIN_LED,LOW);//初始LED灯置为低电平,HIGH表示点亮,LOW表示点不亮
      return true;
      //break;
    }
    else
    {
      Serial.print("AutoConfig Waiting......");
      
    // Serial.printf("PSW:%s\r\n", i);
      Serial.println(wstatus);
      delay(1000);
    }
  }
  Serial.println("AutoConfig Faild!" );
  return false;
  //WiFi.printDiag(Serial);
}


void smartConfig()
{
  WiFi.mode(WIFI_STA);
  Serial.println("\r\nWait for Smartconfig");
  WiFi.beginSmartConfig();
  while (1)
  {
    Serial.print(".");
    if (WiFi.smartConfigDone())
    {
      Serial.println("SmartConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      WiFi.setAutoConnect(true);  // 设置自动连接

       //每隔0.5s 翻转一下led状态,开始连网模式,慢闪
           flipper.attach(0.5, flip); 
      break;
    }
    delay(1000); // 这个地方一定要加延时,否则极易崩溃重启
  }
}

void setup()
{
  pinMode(PIN_LED, OUTPUT); //初始化PIN_LED引脚模式为输出
  digitalWrite(PIN_LED,HIGH);//初始LED灯置为低电平,HIGH表示点亮,LOW表示点不亮  
  Serial.begin(115200);

  //每隔0.5s 翻转一下led状态,开始连网模式,慢闪
           flipper.attach(0.5, flip); 

  

  if (!autoConfig())
  {
    Serial.println("Start module");

 
  //每隔0.1s 翻转一下led状态,开始连网模式,慢闪
           flipper.attach(0.1, flip); 
    
    smartConfig();
  
}

  //连接成功,打印WIFI信息
  Serial.println("");
  Serial.println("WIFI SmartConfig Success");
  Serial.printf("SSID:%s", WiFi.SSID().c_str());
  Serial.printf(", PSW:%s\r\n", WiFi.psk().c_str());
  Serial.print("LocalIP:");
  Serial.print(WiFi.localIP());
  Serial.print(" ,GateIP:");
  Serial.println(WiFi.gatewayIP());
}

void flip() {
  //定时器函数 灯亮灭 一半时间
  
  
  int state = digitalRead(PIN_LED);  // get the current state of GPIO1 pin
  digitalWrite(PIN_LED, !state);     // set pin to the opposite state

}




void led_ms(int i) {
  //LED亮i MS
  
    digitalWrite(PIN_LED,HIGH);//初始LED灯置为低电平,HIGH表示点亮,LOW表示点不亮  
    delay(i);
    digitalWrite(PIN_LED,LOW);//初始LED灯置为低电平,HIGH表示点亮,LOW表示点不亮  

}



void loop() {

    
    Serial.println(WiFi.SSID());
    Serial.println(WiFi.localIP());
    
    delay(10000);// 延时10秒
    led_ms(100);//亮灯100MS,做在线指示
  
  }


光合未来ESP8266+DHT11接入蜗牛黑群晖 MQTT+ Home Assistant

    老王家购得几只4.9元光合未来N1温湿度计(ESP8266+DHT11)。于是开始了Home Assistant 的填坑之路。

一、硬件

      光合未来N1 (其它ESP8266  ESP32+DHT11 也可)

      ESP8266烧写工具(CH340 CP2101 PL2303 等USB转TTL模块,要实现光合未来N1 不拆机烧写,还需要5P麦克工头,本人使用USB OUG转接头)

      MQTT+ Home Assistant  服务器硬件,本人使用架设在蜗牛星际上的黑群晖。

自制CH340G 烧录线,加USB公头,为了直接对接OTG

USB OTG接头,应该是某次网购的赠品

接头定义如下 USB公头依次  GND  RXD  TXD  3.3V

二、软件

手机归属地查询不好用,要收费,一气之下自己整个查询API

之前写的E程序,需要查询手机归属地,一直调用的百度API查询归属地,突然不能使用,淘宝的API又只能查询到省。网上找了几个免费查询API,有每天100次的,有每天500次的,注册并实名了一家,使用20来次就提示超限。想采集某38网页数据,发现需要验证COOKICE。最后无奈,搜索了个PHP查询代码稍加更改,架设到自己服务器上使用。唯一缺点数据库必须自己更新。数据库据说是到2020年3月。


gao_mobile.php 是JSON输出

gao_mobile2.php 是JSON输出 


http://www.zhigao5191.com/admin/media.php?cid=599

JSON输出效果



phone.zip (包含数据库及程序)

充电LED灯【3D打印】

N久前买的几块锂电,拆了做个充电灯

拆开前的电池

拆出来的电池

几毛钱买的触摸PCB

同样几毛钱的充放电管理PCB,直接触摸控板控制充电板MOS