#define BLINKER_WIFI
#define BLINKER_MIOT_MULTI_OUTLET //设置为小爱多个插座的模式
#include
#define BLINKER_PRINT Serial //串口协议库
#define BLINKER_WITHOUT_SSL
char i;
char auth[] = "3253f0eba874"; //填上刚刚记下来的密钥
/*******直连(直连时取消注释)*******/
char ssid[] = "VV6"; //填上你家WiFi名字
char pswd[] = "88888888"; //填上你家WiFi密码码
bool oState[6] = { false };
//io口定义
int sj=1000;//延迟时间
int kg11=D0;//新的设备插孔4
int kg3=D3;//新的设备
int kg5=D5;//新的设备插孔3
int kg6=D6;//新的设备插孔2
int kg7=D7;//新的设备插孔一
int kg8=D8;
int kg2=D2;
//****新建组件对象****
BlinkerButton Button1("btn-kg1"); //设置app按键的键名
BlinkerButton Button3("btn-kg3"); //设置app按键的键名
BlinkerButton Button5("btn-kg5"); //设置app按键的键名
BlinkerButton Button6("btn-kg6"); //设置app按键的键名
BlinkerButton Button7("btn-kg7"); //设置app按键的键名
BlinkerButton Button8("btn-kg8"); //设置app按键的键名
BlinkerButton Button11("btn-kg11"); //设置app按键的键名
//反馈继电器状态函数
void RelayState(int num)
{
switch(num)
{
case 1: //插座插孔一状态
if(digitalRead(kg7)==HIGH)
{
Button7.color("#FF0000"); //设置app按键是纯黄色,16进制颜色码
Button7.text("插座1开"); //设置app按键注释“开”
Button7.print("on");
oState[1] = true;
}
else if(digitalRead(kg7)==LOW)
{
Button7.text("插座1关"); //设置app按键注释“关”
Button7.print("off");
oState[1] = false;
}
break;
case 2:
if(digitalRead(kg6)==HIGH)
{
Button6.color("#FF0000"); //设置app按键是纯黄色,16进制颜色码
Button6.text("插座2开"); //设置app按键注释“开”
Button6.print("on");
oState[2] = true;
}
else if(digitalRead(kg6)==LOW)
{
Button6.text("插座2关"); //设置app按键注释“关”
Button6.print("off");
oState[2] = false;
}
break;
case 3:
if(digitalRead(kg5)==HIGH)
{
Button5.color("#FF0000"); //设置app按键是纯黄色,16进制颜色码
Button5.text("插座3开"); //设置app按键注释“开”
Button5.print("on");
oState[3] = true;
}
else if(digitalRead(kg5)==LOW)
{
Button5.text("插座3关"); //设置app按键注释“关”
Button5.print("off");
oState[3] = false;
}
break;
case 4:
if(digitalRead(kg11)==HIGH)
{
Button11.color("#FF0000"); //设置app按键是纯黄色,16进制颜色码
Button11.text("插座4开"); //设置app按键注释“开”
Button11.print("on");
oState[4] = true;
}
else if(digitalRead(kg11)==LOW)
{
Button11.text("插座4关"); //设置app按键注释“关”
Button11.print("off");
oState[4] = false;
}
break;
case 5:
if(digitalRead(kg3)==HIGH)
{
Button3.color("#FF0000"); //设置app按键是纯黄色,16进制颜色码
Button3.text("插座4开"); //设置app按键注释“开”
Button3.print("on");
oState[5] = true;
}
else if(digitalRead(kg3)==LOW)
{
Button3.text("插座4关"); //设置app按键注释“关”
Button3.print("off");
oState[5] = false;
}
break;
default:
break;
}
}
void miotPowerState(const String & state, uint8_t num)
{
BLINKER_LOG("need set outlet: ", num, ", power state: ", state);
i=0; //初始化 重要!!
if(num==1)
{
i=D7;
}
else if(num==2)
{
i=D6;
}
else if(num==3)
{
i=D5;
}
else if(num==4)
{
i=D0;
}
else if(num==5)
{
i=D3;
}
if (state == BLINKER_CMD_ON)
{
digitalWrite(i, HIGH);
BlinkerMIOT.powerState("on", num);
BlinkerMIOT.print();
oState[num] = true;
}
else if (state == BLINKER_CMD_OFF)
{
digitalWrite(i, LOW);
BlinkerMIOT.powerState("off", num);
BlinkerMIOT.print();
oState[num] = false;
if (num == 0)
{
for (uint8_t o_num = 0; o_num <12; o_num++)
{
oState[o_num] = false;
}
}
}
}
//心跳包刷新状态
void heartbeat()
{
for(int i=0;i<5;i++)
{
RelayState(i);
}
}
void button1_callback(const String & state) {
BLINKER_LOG("ALL#灯,状态: ", state);
if (state=="on") {
digitalWrite(kg3, HIGH );
digitalWrite(kg5, HIGH );
digitalWrite(kg6, HIGH );
digitalWrite(kg7, HIGH );
digitalWrite(kg8, HIGH );
digitalWrite(kg11, HIGH );
Button1.color("#FF0000"); //3#按钮按下时,app按键颜色状态显示是红色
// 反馈开关状态
Button1.text("已开灯");
Button1.print("on");
BLINKER_LOG ("ALL#灯已开灯on"); //串口打印
} else if(state=="off"){
digitalWrite(kg3, LOW);
digitalWrite(kg5, LOW);
digitalWrite(kg6, LOW);
digitalWrite(kg7, LOW);
digitalWrite(kg8, LOW);
digitalWrite(kg11, LOW);
// 反馈开关状态
Button1.text("已关灯");
Button1.print("off");
BLINKER_LOG ("ALL#灯已关灯off");
}
}
void button3_callback(const String & state) {
BLINKER_LOG("3#灯,状态: ", state);
if (state=="on") {
digitalWrite(kg3, HIGH );
Button3.color("#FF0000"); //3#按钮按下时,app按键颜色状态显示是红色
// 反馈开关状态
Button3.text("已开灯");
Button3.print("on");
BLINKER_LOG ("3#灯已开灯on"); //串口打印
} else if(state=="off"){
digitalWrite(kg3, LOW);
// 反馈开关状态
Button3.text("已关灯");
Button3.print("off");
BLINKER_LOG ("3#灯已关灯off");
}
}
void button8_callback(const String & state) {
BLINKER_LOG("1#灯,状态: ", state);
if (state=="on") {
digitalWrite(kg8, HIGH);
Button8.color("#FF0000"); //3#按钮按下时,app按键颜色状态显示是红色
// 反馈开关状态
Button8.text("已开灯");
Button8.print("on");
BLINKER_LOG ("1#灯已开灯on"); //串口打印
} else if(state=="off"){
digitalWrite(kg8, LOW);
// 反馈开关状态
Button8.text("已关灯");
Button8.print("off");
BLINKER_LOG ("3#灯已关灯off");
}
}
void button5_callback(const String & state) {
BLINKER_LOG("5#灯,状态: ", state);
if (state=="on") {
digitalWrite(kg5, HIGH);
Button5.color("#FF0000"); //4#按钮按下时,app按键颜色状态显示是红色
// 反馈开关状态
Button5.text("已开灯");
Button5.print("on");
BLINKER_LOG ("5#灯已开灯on"); //串口打印
} else if(state=="off"){
digitalWrite(kg5, LOW);
// 反馈开关状态
Button5.text("已关灯");
Button5.print("off");
BLINKER_LOG ("5#灯已关灯off");
}
}
void button6_callback(const String & state) {
BLINKER_LOG("6#灯,状态: ", state);
if (state=="on") {
digitalWrite(kg6, HIGH);
Button6.color("#FF0000"); //4#按钮按下时,app按键颜色状态显示是红色
// 反馈开关状态
Button6.text("已开灯");
Button6.print("on");
BLINKER_LOG ("6#灯已开灯on"); //串口打印
} else if(state=="off"){
digitalWrite(kg6, LOW);
// 反馈开关状态
Button6.text("已关灯");
Button6.print("off");
BLINKER_LOG ("6#灯已关灯off");
}
}
void button7_callback(const String & state) {
BLINKER_LOG("7#灯,状态: ", state);
if (state=="on") {
digitalWrite(kg7, HIGH);
Button7.color("#FF0000"); //4#按钮按下时,app按键颜色状态显示是红色
// 反馈开关状态
Button7.text("已开灯");
Button7.print("on");
BLINKER_LOG ("7#灯已开灯on"); //串口打印
} else if(state=="off"){
digitalWrite(kg7, LOW);
// 反馈开关状态
Button7.text("已关灯");
Button7.print("off");
BLINKER_LOG ("7#灯已关灯off");
}
}
void button11_callback(const String & state) {
BLINKER_LOG("11#灯,状态: ", state);
if (state=="on") {
digitalWrite(kg11, HIGH);
Button11.color("#FF0000"); //4#按钮按下时,app按键颜色状态显示是红色
// 反馈开关状态
Button11.text("已开灯");
Button11.print("on");
BLINKER_LOG ("11#灯已开灯on"); //串口打印
} else if(state=="off"){
digitalWrite(kg11, LOW);
// 反馈开关状态
Button11.text("已关灯");
Button11.print("off");
BLINKER_LOG ("11#灯已关灯off");
}
}
//
void miotQuery(int32_t queryCode, uint8_t num)
{
BLINKER_LOG("AliGenie Query outlet: ", num,", codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("MIOT Query All");
BlinkerMIOT.powerState(oState[num] ? "on" : "off", num);
BlinkerMIOT.print();
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("MIOT Query Power State");
BlinkerMIOT.powerState(oState[num] ? "on" : "off", num);
BlinkerMIOT.print();
break;
default :
BlinkerMIOT.powerState(oState[num] ? "on" : "off", num);
BlinkerMIOT.print();
break;
}
}
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
Blinker.vibrate();
uint32_t BlinkerTime = millis();
Blinker.print("millis", BlinkerTime);
}
void setup()
{
// 初始化串口,用于调试,后期可删除
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
pinMode(D3, OUTPUT);
pinMode(D5, OUTPUT);
pinMode(D6, OUTPUT);
pinMode(D7, OUTPUT);
pinMode(D8, OUTPUT);
pinMode(D8, OUTPUT);
pinMode(D0, OUTPUT);
digitalWrite(D3, LOW);
digitalWrite(D5, LOW);
digitalWrite(D6, LOW);
digitalWrite(D7, LOW);
digitalWrite(D8, LOW);
digitalWrite(D0, LOW);
/******** 直连(直连时 取消注释) ******/
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
/**************/
BlinkerMIOT.attachPowerState(miotPowerState);
BlinkerMIOT.attachQuery(miotQuery);
//****app关联函数****
//app上操作必须的注册回调函数关联按键名“Button1-Button4”和判断程序“button1_callback"
Button1.attach(button1_callback);
Button3.attach(button3_callback);
Button5.attach(button5_callback);
Button6.attach(button6_callback);
Button7.attach(button7_callback);
Button8.attach(button8_callback);
Button11.attach(button11_callback);
}
void loop()
{
Blinker.run();
}
小爱同学8266控制多设备