基于Blinker的舵机开关灯程序
基于Blinker的舵机开关灯程序一、先放张成品图:这套设备支持Blinker APP上对灯进行控制,同时支持小爱对灯的控制。
二、硬件连接:
舵机的PWM信号线接NODEMCU的D2脚,即可控制舵机的运动。
三、程序分析
1.设备宏定义
#define BLINKER_WIFI
#define BLINKER_MIOT_OUTLET
第二行宏定义会将这个设备在米家中显示为插座设备。
2.头文件
#include <Blinker.h>
#include <Servo.h>//SG90舵机需要的头文件
3.设备ID和WIFI
char auth[] = "********";//设备ID,从Blinker APP上申请来的
char ssid[] = "*********";
char pswd[] = "**********";
4.APP组件绑定
BlinkerButton Button1("btn-led");//新建按键组件
BlinkerNumber Number1("num-wifi");//blinker新建数据组件
5.定义一些宏定义和布尔变量
bool oState = false;
Servo SG90;
#define angle_on0
#define angle_off 90
6.按键回调函数
// 按下按键即会执行该函数
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
if(oState == false)//如果灯是关的
{
oState = true;//将灯的状态打开
SG90.write(angle_on);//调整舵机角度
Button1.color("#6495ED");
Button1.print();
}
else if(oState == true)
{
oState = false;//将灯的状态关闭
SG90.write(angle_off);//调整舵机角度
Button1.color("#000000");
Button1.print();
}
}
7.小爱回调函数
void miotPowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON && oState == false) {
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();
SG90.write(angle_on);//调整舵机角度 打开
Button1.color("#6495ED");
Button1.print();
oState = true;
}
else if (state == BLINKER_CMD_OFF && oState == true) {
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
SG90.write(angle_off);//调整舵机角度
Button1.color("#000000");
Button1.print();
oState = false;
}
}
8.小爱的状态查询函数
void miotQuery(int32_t queryCode)
{
BLINKER_LOG("MIOT Query codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("MIOT Query All");
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("MIOT Query Power State");
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
break;
default :
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
break;
}
}
9.数据读取函数
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
Blinker.vibrate();
uint32_t BlinkerTime = millis();
Blinker.print("millis", BlinkerTime);
}
10.初始化函数
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
BlinkerMIOT.attachPowerState(miotPowerState);
BlinkerMIOT.attachQuery(miotQuery);
Button1.attach(button1_callback);//声明组件
SG90.attach(4);//绑定连接舵机信号引脚的接口
SG90.write((angle_off+angle_on)/2);//调整舵机角度
Button1.color("#000000");//改变按键颜色
Button1.print();//发送到APP
}
11.循环函数
void loop()
{
Blinker.run();
if(oState == false)//如果灯是关的
{
Button1.color("#000000");
Button1.print();
}
else if(oState == true)
{
Button1.color("#6495ED");
Button1.print();
}
Number1.print(WiFi.RSSI());//信号强度
}
这么添加信号显示的图? ESP8266可以弄吗?板子代码是什么?APP端怎么设置? 好像直接把舵机的PWM接到ESP8266上也可以 这是TJ 发表于 2020-2-28 15:29
好像直接把舵机的PWM接到ESP8266上也可以
理论上是可以的 只用了一个脚有点浪费
这是TJ 发表于 2020-2-28 15:29
好像直接把舵机的PWM接到ESP8266上也可以
ESP8266 01S也是可以的 ksbb4920355 发表于 2020-2-28 10:07
这么添加信号显示的图? ESP8266可以弄吗?板子代码是什么?APP端怎么设置?
Number1.print(WiFi.RSSI());//信号强度 感谢分享,学习了
感谢分享
大佬怎么调整舵机角度啊我是个小白 谢谢楼主!
页:
[1]
2