求助!blinker控制舵机能加入本地开关吗?搜了几天没结果
我已经用这个程序实现手机APP和小爱控制开门,教程参考https://www.bilibili.com/video/av90831082/?redirectFrom=h5 这位大神。现在我想在室内加一个门禁开关用的按键开关,实现一按开门,请问要怎么做?代码如下,请帮忙改下,谢谢,实在是不太懂!
#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT
#include <Blinker.h>
#include <Servo.h>
Servo myservo;//定义舵机
char auth[] = "81ed689d97f0";//根据需要自行修改
char ssid[] = "TP-LINK_5051";
char pswd[] = "lnq15767299275";
// 新建组件对象
BlinkerButton Button1("test");
int counter = 0;
void miotPowerState(const String & state)//电源类操作
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) {
myservo.write(140);//收到“on”的指令后舵机旋转140度
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();//反馈状态
delay(2000);//延时两秒
myservo.write(90);//舵机归零,回到垂直状态
}
else if (state == BLINKER_CMD_OFF) {
myservo.write(60);
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
delay(2000);
myservo.write(90);
}
}
// 按下按键即会执行该函数
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
if (state=="on")
{
myservo.write(140);//收到“on”的指令后舵机旋转140
delay(2000);//延时
myservo.write(90);//舵机归零垂直
} else if(state=="press")
{
myservo.write(60);//长按开关按键后舵机旋转140
delay(2000);//延时
myservo.write(90);//舵机归零垂直
}
}
// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
counter++;
}
void setup()
{
// 初始化串口
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
// 初始化舵机
myservo.attach(12);//舵机的IO口,nodemcu的D6口
myservo.write(90);//上电时舵机归零垂直
BlinkerMIOT.attachPowerState(miotPowerState);
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
Button1.attach(button1_callback);
}
void loop() {
Blinker.run();
}
试试在这个代码里的本地开关代码,再做一些修改。
/************官方按键示例程序详细注释,方便第一次看程序的。如果有错误的及时通知下修改***************
十六进制颜色码
(#FF0000 红色)(#FFFF00 黄色)(#FFFFFF 白色)(#0000FF 蓝色)(#00FFFF 浅蓝色)(#FFFFFF白色)
程序特色1.app控制2.小爱控制3.状态同步4.添加本地按键
使用的单片机是esp8266-01s,io0接继电器,开机默认(low)动作,io2接本地轻触按键(与GND接触就动作(按下轻开才动作))
*/
#define BLINKER_WIFI //官方wifi协议库
#define BLINKER_MIOT_LIGHT //小爱灯类库
#define BLINKER_PRINT Serial //串口协议库
#include <Blinker.h> //官方库
char auth[] = "2b1****2b"; //设备key号
char ssid[] = "mi"; //wifi名称
char pswd[] = "123**780"; //wifi密码
int kg=0;//继电器输出
int kg2=2;//本地轻触开关,io2与gnd接时动作
//*******新建组件对象
BlinkerButton Button1("btn-abc"); //设置app按键的键名
//*******app上按下按键即会执行该函数app里按键有2种模式3钟不同样式,下面写出所有的开关状态。
void button1_callback(const String & state) //用state来存储组键的值按键 : "tap"(点按); "pre"(长按); "pup"(释放)开关 : "on"(打开); "off"(关闭)
{
BLINKER_LOG("app操作了!: ", state); //串口打印
if (digitalRead(kg)==LOW) { //如果state是on状态
BLINKER_LOG("灭灯!"); //串口打印
digitalWrite(kg, HIGH);
Button1.color("#00FFFF"); //设置app按键是深蓝色
Button1.text("灭");
Button1.print("off"); //反馈回按键状态是开
}
else if (digitalRead(kg)==HIGH) { //如果state是off状态
BLINKER_LOG("亮灯!"); //串口打印
digitalWrite(kg,LOW);
Button1.color("#0000FF"); //设置app按键是浅蓝色
Button1.text("亮");
Button1.print("on"); //反馈回按键状态是关
}
}
//*******如果小爱有对设备进行操作就执行下面
void miotPowerState(const String & state)
{
BLINKER_LOG("小爱语音操作!"); //串口打印
if (state == BLINKER_CMD_ON){
digitalWrite(kg,LOW);
BlinkerMIOT.powerState("on");
BLINKER_LOG("亮灯!");
BlinkerMIOT.print();
}
else if (state == BLINKER_CMD_OFF){
digitalWrite(kg,HIGH);
BlinkerMIOT.powerState("off");
BLINKER_LOG("灭灯!");
BlinkerMIOT.print();
}
}
//*******app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态30s~60s一次
void heartbeat()
{
BLINKER_LOG("状态同步!");
if (digitalRead(kg)==LOW)
{
Button1.print("on");
Button1.color("#0000FF"); //设置app按键是浅蓝色
Button1.text("亮");
}
else
{
Button1.print("off");
Button1.color("#00FFFF"); //设置app按键是深蓝色
Button1.text("灭");
}
}
///如果本地开关有动作执行下面手动模式
void sdms(){
BLINKER_LOG("本地开关动作!");
if (digitalRead(kg)==HIGH&&digitalRead(kg2)==LOW) { //
Blinker.delay(150); //延时150ms不能太少标准按键成功率
if (digitalRead(kg2)==HIGH){
BLINKER_LOG("亮灯!"); //串口打印
digitalWrite(kg,LOW);
Button1.color("#0000FF"); //设置app按键是浅蓝色
Button1.text("亮");
Button1.print("on");
}
}
if (digitalRead(kg)==LOW&&digitalRead(kg2)==LOW) {
Blinker.delay(150);
if (digitalRead(kg2)==HIGH){
BLINKER_LOG("灭灯!"); //串口打印
digitalWrite(kg, HIGH);
Button1.color("#00FFFF"); //设置app按键是深蓝色
Button1.text("灭");
Button1.print("off");
}
}
}
void setup()
{
// 初始化串口
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
// 初始化有LED的IO
pinMode(kg, OUTPUT);
digitalWrite(kg, LOW); //默认上电是开 LOW 时的是接通继电器。
pinMode(kg2,INPUT_PULLUP); //输入上拉
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Button1.attach(button1_callback); //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback"
BlinkerMIOT.attachPowerState(miotPowerState); //小爱语音操作注册函数
Blinker.attachHeartbeat(heartbeat); //app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态进行语音操作和app操作同步。
}
void loop() {
sdms();//本地开关手动模式函数
Blinker.run();
} 13675003417 发表于 2020-3-11 12:32
试试在这个代码里的本地开关代码,再做一些修改。
/************官方按键示例程序详细注释,方便第一次看 ...
之前的论坛验证码太变态了,几天都登陆不上,一直想回你的,谢谢,这个我以前也试过,大概还是我不懂,没搞会 回来报道下,的确可以控制✌
页:
[1]