背景:入手天猫精灵后,一直觉得不能白白浪费这个“智慧大脑”,想把家里的电器变为智能家居(直接买智能家具的略过)。
思路:控制电器的开关其实就是控制家里220V电路火线的通断一样。
硬件:继电器(某宝:¥5上下)、ESP8266(某宝:¥5上下)、USB转TTL(调试工具¥10上下)、天猫精灵(双11,¥69上下)、排线若干
软件:Arduino、Blinker物联网
开始工作:
1、首先注册Blinker账户,下载APP,并在APP上添加设备,使用MQTT接入(天猫精灵只能使用此方法)。
2、在APP中查看设备密钥(12位)
3、打开Arduino,去该地址blinker库文件地址下载库文件,并放到Arduino的安装目录下的library目录下。
4、如果不想麻烦,直接在Arduino中打开示例Blinker-Aligenie,然后烧写进ESP8266中。
5、在Blinker的APP中,刷新设备,查看设备是否正在在线。
6、在天猫精灵的APP中,添加”智能家居“中找到Blinker,并登录blinker的账户,由此,在blinker中登录的设备也就在天猫精灵中可以看到了。
7、至此,可以用天猫精灵控制设备了。
附上我的测试代码:
//天猫精灵,打开传感器
#define BLINKER_PRINT Serial
#define BLINKER_MQTT
#define BLINKER_ALIGENIE_OUTLET
#include <Blinker.h>
char auth[] = "点灯科技密匙"; //换成APP获取到的密匙
char ssid[] = "你家wifi名称"; //WiFi账号
char pswd[] = "你家wifi密码"; //WIFI密码
bool oState = false;
//-------------------------------------这是开关初始化---------------------------------------------
// 新建组件对象
BlinkerButton Button1("abcd");
// 按下按键即会执行该函数
void button1_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
if (state=="on") {
digitalWrite(D5, HIGH);
// 反馈开关状态
Button1.print("on");
} else if(state=="off"){
digitalWrite(D5,LOW );
// 反馈开关状态
Button1.print("off");
}
}
//-------------------------------------这是开关初始化---------------------------------------------
void aligeniePowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) {
digitalWrite(D5, HIGH);
BlinkerAliGenie.powerState("on");
BlinkerAliGenie.print();
Button1.print("on");////------------------------------------按钮图片切换为打开-------------------------------------------
oState = true;
}
else if (state == BLINKER_CMD_OFF) {
digitalWrite(D5, LOW);
BlinkerAliGenie.powerState("off");
BlinkerAliGenie.print();
Button1.print("off");/////------------------------------------按钮图片切换为关闭-------------------------------------------
oState = false;
}
}
//void aligenieQuery(int32_t queryCode)
//{
// BLINKER_LOG("AliGenie Query codes: ", queryCode);
//
// switch (queryCode)
// {
// case BLINKER_CMD_QUERY_ALL_NUMBER :
// BLINKER_LOG("AliGenie Query All");
// BlinkerAliGenie.powerState(oState ? "on" : "off");
// BlinkerAliGenie.print();
// break;
// case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
// BLINKER_LOG("AliGenie Query Power State");
// BlinkerAliGenie.powerState(oState ? "on" : "off");
// BlinkerAliGenie.print();
// break;
// default :
// BlinkerAliGenie.powerState(oState ? "on" : "off");
// BlinkerAliGenie.print();
// break;
// }
//}
void setup()
{
Serial.begin(115200);
pinMode(D5, OUTPUT);//------------------------------------初始化:设置为输出-------------------------------------------
digitalWrite(D5, LOW);//-------------------------------------初始化:开始为低电平---------------------------------------------
Blinker.begin(auth, ssid, pswd);
BlinkerAliGenie.attachPowerState(aligeniePowerState);
//
Button1.attach(button1_callback); //------------------------------------这里要调用开关---------------------------------------------
}
void loop()
{
Blinker.run();
// if (Blinker.available()) {
// BLINKER_LOG2("Blinker.readString(): ", Blinker.readString());
//
// uint32_t BlinkerTime = millis();
//
// Blinker.vibrate();
// Blinker.print("millis", BlinkerTime);
// }
}
发表评论