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,把高低电平对调一下就可以使用天猫精灵来控制你的这个插座了。我是把我的第一个插座放在了我的落地电风扇中了,当我慵懒的在沙发上刷着手机时候感觉有一点点热,我只要呼唤“天猫精灵,打开风扇”,就可以了。
高手,没玩过!达人 买了几个 做工挺扎实的,但是外壳怎么拆啊拿斜口钳拨了一个, 四个圆角的卡口根本没法正常拆 a467913252 发表于 2021-8-24 15:53
买了几个 做工挺扎实的,但是外壳怎么拆啊拿斜口钳拨了一个, 四个圆角的卡口根本没法正常拆 ...
大力出奇迹呀 a467913252 发表于 2021-8-24 15:53
买了几个 做工挺扎实的,但是外壳怎么拆啊拿斜口钳拨了一个, 四个圆角的卡口根本没法正常拆 ...
昨晚拆了一个,废了老大劲,想和卖家说的无损拆下来,不拆个三五个积攒经验,基本不可能 sevenup0719 发表于 2021-8-29 08:14
昨晚拆了一个,废了老大劲,想和卖家说的无损拆下来,不拆个三五个积攒经验,基本不可能 ...
你的搞定没为什么我的根本没法烧录 连接不上,,用esp01s还没问题的
页:
[1]