/* ****************************************************************
* ESP8266连网,Blinker平台,控制舵机实现远程和小度语音关灯,实现基本功能,有待改进。
* *****************************************************************
*
* Blinker 库下载地址:
* https://github.com/blinker-iot/blinker-library/archive/master.zip
*
* Blinker 是一套跨硬件、跨平台的物联网解决方案,提供APP端、设备端、
* 服务器端支持,使用公有云服务进行数据传输存储。可用于智能家居、
* 数据监测等领域,可以帮助用户更好更快地搭建物联网项目。
*
* 如果使用 ESP8266 接入 Blinker,
* 请确保安装了 2.7.4 或更新的 ESP8266/Arduino 支持包。
* https://github.com/esp8266/Arduino/releases
*
* 如果使用 ESP32 接入 Blinker,
* 请确保安装了 1.0.5 或更新的 ESP32/Arduino 支持包。
* https://github.com/espressif/arduino-esp32/releases
*
* 文档: https://diandeng.tech/doc
*
*
* *****************************************************************/
//注意舵机为-90°~+90°
#define BLINKER_WIFI
#define BLINKER_DUEROS_OUTLET
#include <Blinker.h>
#include <Servo.h>
char auth[] = "86c8b6acd763";
char ssid[] = "zcc"; // "CU_tfCE";
char pswd[] = "1234567890"; //"ef25mg8w";
// 新建组件对象 注意:要和APP组件’数据键名’一致
BlinkerButton Button1("ddl1");
Servo servo_00; //舵机输出口 GIPO0
bool oState = false;
//按下APP按键回调函数
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
if (state == BLINKER_CMD_ON) {
BLINKER_LOG("Toggle on!");
servo_00.write(60); //舵机旋转角度 具体参数需要结合自身情况修改
delay(1); //给一个小延时
delay(1000); //舵机动作后延时一会回到初始位置
servo_00.write(95); //设置该角度方便手动开关灯 就是开完灯舵机归位
Button1.color("#7CFC00");
Button1.print("on");
oState = true;
}
else if (state == BLINKER_CMD_OFF) {
BLINKER_LOG("Toggle off!");
servo_00.write(130); //同上一样的思路
delay(1);
delay(1000);
servo_00.write(95);
Button1.color("#FF4500");
Button1.print("off");
oState = false;
}
BlinkerDuerOS.powerState(oState ? "on" : "off");
BlinkerDuerOS.report();
}
//用户自定义电源类操作的回调函数:
//用小度语音时需要这个函数
void duerPowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) {
servo_00.write(60);
delay(1);
delay(1000);
servo_00.write(95);
BlinkerDuerOS.powerState("on");
BlinkerDuerOS.print();
oState = true;
}
else if (state == BLINKER_CMD_OFF) {
servo_00.write(130);
delay(1);
delay(1000);
servo_00.write(95);
BlinkerDuerOS.powerState("off");
BlinkerDuerOS.print();
oState = false;
}
}
//小度设备查询接口
void duerQuery(int32_t queryCode)
{
BLINKER_LOG("DuerOS Query codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("DuerOS Query power state");
BlinkerDuerOS.powerState(oState ? "on" : "off");
BlinkerDuerOS.print();
break;
case BLINKER_CMD_QUERY_TIME_NUMBER :
BLINKER_LOG("DuerOS Query time");
BlinkerDuerOS.time(millis());
BlinkerDuerOS.print();
break;
default :
BlinkerDuerOS.powerState(oState ? "on" : "off");
BlinkerDuerOS.print();
break;
}
}
//向Blinker服务器上报数据
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
// Blinker.vibrate();
uint32_t BlinkerTime = millis();
Blinker.print("millis", BlinkerTime);
BlinkerDuerOS.powerState("on");
BlinkerDuerOS.report();
}
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
servo_00.attach(0); //舵机信号管脚GPIO0
Blinker.begin(auth, ssid, pswd); //连接WIFI和Blinker服务器
Blinker.attachData(dataRead); //注册回调数据信息
BlinkerDuerOS.attachPowerState(duerPowerState); //注册电源回调函数
BlinkerDuerOS.attachQuery(duerQuery); //注册查询回调函数
Button1.attach(button1_callback); //注册按键回调函数
}
void loop()
{
Blinker.run();
}
小度关灯Blinker
最新推荐文章于 2023-05-10 16:00:24 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)