易记 发表于 2021-8-21 13:57:54

8.5元联想ESP8266智能wifi插座拆解、刷机天猫语音控制

本帖最后由 易记 于 2021-8-21 14:05 编辑

最近玩ESP8266,想做个天猫控制开关。
但是我很懒,一个个配元件嫌麻烦,于是想着能不能淘到便宜的带电源板的模块,多倒是蛮多,一般都要20多块钱。
还是闲钱上逛一下看,找到一个联想的国外版8266智能插座,价格才8.5元一个。有一点不足,就是只有三孔,要是五孔的就好了。老板说五孔杂牌价格一样也有货,晚两天发布。



问了一下店主,买20个一盒才包邮,想着20个还是有点多,买了5个,连运费47.5元。





到手,当然是拆拆拆。



联想的做工,还是感觉不错的,光这个继电器应该也要个7-8块钱。



继电器是两组常开,感觉要是接电灯双控开关是不是有点麻烦的,不过用于插座是很安全,要断二条线都断开。




电源芯片



有一个按钮,按钮有二个蓝色LED灯



8266





接下来就是刷机了,版子上面都预留测试点。
接线比较容易,上面都有标示,GND,3.3V,TXD-RX,RXD-TX,还有一个就是IO0接地后刷机。


注意RX这个点,就是3.3V边上的这个点,焊盘设计的就点问题,电烙铁热一点或是焊的刷机线过粗的话,容易掉焊盘。
要是掉了就只有一个过孔了,要是焊不上,只能再拆开接在另一面,所以为了避免不必要的麻烦,请注意一下。






    5号脚位是继电器输出
    12号脚位是灯输出
    4号脚位是按键




卖家有发一个源码,如下#define BLINKER_WIFI                  //官方wifi协议库
#define BLINKER_MIOT_LIGHT            // 设置小爱灯类库
#define BLINKER_ALIGENIE_LIGHT          // 设置天猫灯类库
#define BLINKER_PRINT Serial            //串口协议库
#include <Blinker.h>                  //官方库
#include <ESP8266WiFi.h>                //官方库
WiFiServer server(80);                  // 服务器端口号

char auth[] = "c4942fb1d5e4";   //设备key
char ssid[] = "wanboshi";   //路由器wifi ssid
char pswd[] = "1365662999813586348220";   //路由器wifi 密码

bool oState = false;

int kg=5;//继电器输出
int de=12;//灯输出
int key=4 ;//按键
//*******新建组件对象

BlinkerButton Button1("btn-abc");            //设置app按键的键名
//*******app上按下按键即会执行该函数app里按键
void button1_callback(const String & state)
{
   if (digitalRead(kg)==LOW)
   {
      BLINKER_LOG("get button state: ", state);
      digitalWrite(kg, HIGH);
      digitalWrite(de, LOW);
      Button1.print("on");
      Button1.color("#0000FF");            //设置app按键是浅蓝色
      Button1.text("开启中");
   }
   else if (digitalRead(kg)==HIGH)
   {
      BLINKER_LOG("get button state: ", state);
      digitalWrite(kg, LOW);
      digitalWrite(de, HIGH);
      Button1.print("off");
      Button1.color("#00FFFF");            //设置app按键是深蓝色
      Button1.text("关闭中");
   }
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//*******如果小爱有对设备进行操作就执行下面
void miotPowerState(const String & state)
{
    BLINKER_LOG("小爱语音操作!");            //串口打印
    if (state == BLINKER_CMD_ON){
      
      digitalWrite(kg, HIGH);
      digitalWrite(de, LOW);
      Button1.print("on");
      Button1.color("#0000FF");            //设置app按键是浅蓝色
      Button1.text("开启中");
      BlinkerMIOT.powerState("on");
      BlinkerMIOT.print();
   }
   else if (state == BLINKER_CMD_OFF)
   {
      
      digitalWrite(kg, LOW);
      digitalWrite(de, HIGH);
      Button1.print("off");
      Button1.color("#00FFFF");            //设置app按键是深蓝色
      Button1.text("关闭中");
      BlinkerMIOT.powerState("off");
      BlinkerMIOT.print();
   }
      

}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//*******如果天猫精灵有对设备进行操作就执行下面
void aligeniePowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);
    if (state == BLINKER_CMD_ON)
    {
      
      digitalWrite(kg, HIGH);
      digitalWrite(de, LOW);
      Button1.print("on");
      Button1.color("#0000FF");            //设置app按键是浅蓝色
      Button1.text("开启中");
      BlinkerAliGenie.powerState("on");
      BlinkerAliGenie.print();
    }
    else if (state == BLINKER_CMD_OFF)
    {
      
      digitalWrite(kg, LOW);
      digitalWrite(de, HIGH);
      Button1.print("off");
      Button1.color("#00FFFF");            //设置app按键是深蓝色
      Button1.text("关闭中");
      BlinkerAliGenie.powerState("off");
      BlinkerAliGenie.print();
    }
      

}
//*******app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态30s~60s一次
void heartbeat()
{
BLINKER_LOG("状态同步!");
   if (digitalRead(kg)==HIGH)
    {
      Button1.print("on");
      Button1.color("#0000FF");            //设置app按键是浅蓝色
      Button1.text("开启中");
    }
    else
    {
      Button1.print("off");
      Button1.color("#00FFFF");            //设置app按键是深蓝色
      Button1.text("关闭中");
   
    }
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void setup()
{
// 初始化串口
Serial.begin(115200);
delay(10);
BLINKER_DEBUG.stream(Serial);
// 初始化有LED的IO
pinMode(kg, OUTPUT);               
digitalWrite(kg, LOW);//初始化继电器上电状态
pinMode(de, OUTPUT);
digitalWrite(de, HIGH);
pinMode(key, INPUT);            
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pswd);
while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
server.begin();
Serial.println("Server started @ ");
Serial.println(WiFi.localIP());
//打印出IP地址,后期可以制作显示器来外部硬件显示ip
Serial.println("To control GPIO, open your web browser.");
Serial.println("To set GPIO 0 high, type:");
Serial.print(WiFi.localIP());
Serial.println("/gpio/1");
Serial.println("To set GPIO 0 low, type:");
Serial.print(WiFi.localIP());
Serial.println("/gpio/0");
Serial.println("To toggle GPIO 0, type:");
Serial.print(WiFi.localIP());
Serial.println("/gpio/4");

// 初始化blinker
Blinker.begin(auth, ssid, pswd);
BlinkerMIOT.attachPowerState(miotPowerState);            //小爱语音操作注册函数
BlinkerAliGenie.attachPowerState(aligeniePowerState);      //天猫语音操作注册函数
Blinker.attachHeartbeat(heartbeat);            //app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态进行语音操作和app操作同步。

Button1.attach(button1_callback);             //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback
}
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);

    Blinker.vibrate();
   
    uint32_t BlinkerTime = millis();
   
    Blinker.print("millis", BlinkerTime);
}
void loop()
{
Blinker.run();
if (digitalRead(key)==LOW)
{
    Blinker.delay(200);
    if (digitalRead(key)==LOW)
    {
          if (digitalRead(kg)==LOW)
       {
            
            digitalWrite(kg, HIGH);
            digitalWrite(de, LOW);
            Button1.print("on");
            Button1.color("#0000FF");            //设置app按键是浅蓝色
            Button1.text("开启中");
       }
       else if (digitalRead(kg)==HIGH)
       {
            digitalWrite(kg, LOW);
            digitalWrite(de, HIGH);
            Button1.print("off");
            Button1.color("#00FFFF");            //设置app按键是深蓝色
            Button1.text("关闭中");
       }
      }
    }
}

我没有用卖家给的码,我自己写了一个,参考我前面的文章 《最简单的8266天猫精灵控制开关,点灯、Mixly可视模块化编程 》https://bbs.nasdiyer.com/thread-18755-1-1.html

把上面的2改成5,把高低电平对调一下就可以使用天猫精灵来控制你的这个插座了。我是把我的第一个插座放在了我的落地电风扇中了,当我慵懒的在沙发上刷着手机时候感觉有一点点热,我只要呼唤“天猫精灵,打开风扇”,就可以了。


lucky999777 发表于 2021-8-23 13:06:07

高手,没玩过!达人

a467913252 发表于 2021-8-24 15:53:16

买了几个   做工挺扎实的,但是外壳怎么拆啊拿斜口钳拨了一个,   四个圆角的卡口根本没法正常拆

易记 发表于 2021-8-24 17:20:24

a467913252 发表于 2021-8-24 15:53
买了几个   做工挺扎实的,但是外壳怎么拆啊拿斜口钳拨了一个,   四个圆角的卡口根本没法正常拆 ...

大力出奇迹呀

sevenup0719 发表于 2021-8-29 08:14:58

a467913252 发表于 2021-8-24 15:53
买了几个   做工挺扎实的,但是外壳怎么拆啊拿斜口钳拨了一个,   四个圆角的卡口根本没法正常拆 ...

昨晚拆了一个,废了老大劲,想和卖家说的无损拆下来,不拆个三五个积攒经验,基本不可能

a467913252 发表于 2021-9-4 23:05:22

sevenup0719 发表于 2021-8-29 08:14
昨晚拆了一个,废了老大劲,想和卖家说的无损拆下来,不拆个三五个积攒经验,基本不可能 ...

你的搞定没为什么我的根本没法烧录   连接不上,,用esp01s还没问题的
页: [1]
查看完整版本: 8.5元联想ESP8266智能wifi插座拆解、刷机天猫语音控制