用小爱和BLINKER和按键控制
#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT//支持小爱同学
#include <Blinker.h>
#include <Servo.h>//舵机Servo的库文件
Servo myservo;//定义舵机对象,myservo就是这次要用的舵机名称
char auth[] = "****";//根据需要自行修改
char ssid[] = "**";
char pswd[] = "**";
int kg=12;//继电器输出
int kg2=2;//本地轻触开关,io2与gnd接时动作
// 新建组件对象
BlinkerButton Button1("test");//注意:要和APP组件’数据键名’一致
int counter = 0;//变量
void miotPowerState(const String & state)//小爱电源类操作的回调函数,当小爱向设备发起控制, 设备端需要有对应控制处理函数
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) {
myservo.write(170);//收到“on”的指令后舵机旋转140度
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();//反馈状态
Blinker.delay(2000);//延时两秒
myservo.write(90);//舵机归零,回到垂直状态
}
else if (state == BLINKER_CMD_OFF) {
myservo.write(60);//收到“off”的指令后舵机旋转 度
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();//反馈状态
Blinker.delay(2000);//延时两秒
myservo.write(90);//舵机归零,回到垂直状态
}
}
// 按下BlinkerAPP按键即会执行该函数
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
if (state=="on")
{
myservo.write(170);//收到“on”的指令后舵机旋转140
Blinker.delay(2000);//延时
myservo.write(90);//舵机归零垂直
} else if(state=="press")//长按BlinkerAPP按键
{
myservo.write(60);//长按BlinkerAPP按键后舵机旋转60
Blinker.delay(2000);//延时
myservo.write(90);//舵机归零垂直
}
}
// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
counter++;
}
void sdms()
{
if (digitalRead(kg)==HIGH)// (digitalRead(kg)==HIGH&&digitalRead(kg2)==LOW)
{
// Blinker.delay(150); //延时150ms不能太少标准按键成功率
if (digitalRead(kg2)==LOW)
{
myservo.write(170);//收到“on”的指令后舵机旋转140
Blinker.delay(2000);//延时
myservo.write(90);//舵机归零垂直
}
}
}
void setup()
{
// 初始化串口,并开启调试信息,调试用可以删除
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
// 初始化舵机
myservo.attach(12);//舵机的IO口,nodemcu的D6口
myservo.write(90);//上电时舵机归零垂直
BlinkerMIOT.attachPowerState(miotPowerState);
// 初始化有LED的IO
pinMode(kg, OUTPUT);
digitalWrite(kg, HIGH); //默认上电是开 LOW 时的是接通继电器。
pinMode(kg2,INPUT_PULLUP); //输入上拉
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
//小爱同学务必在回调函数中反馈该控制状态
Button1.attach(button1_callback);//注册回调函数
}
void loop()
{
sdms();//本地开关手动模式函数
Blinker.run();
}
|