ESP8266在没有指令时误操作
问题描述这里我采用D4引脚连接舵机,用APP上的两个按键来控制舵机转动固定角度,在APP上能正常控制舵机。但是在空闲时(没有按下APP任何按键),偶尔舵机也有动作,具体表现为btn-on/btn-off按键触发时的动作。代码代码我参考的Blinker的例程,仅添加了几个APP按键。
#define BLINKER_PRINT Serial //启动串口调试输出功能
#define BLINKER_WIFI
#include <Blinker.h>
#include <Servo.h>
Servo mysevro; // 建立舵机对象 sevro
char auth[] = "ba851306f9a6";
char ssid[] = "TP-LINK_B36D";
char pswd[] = "hcf13387947785";
// 新建组件对象
BlinkerButton Button1("btn-abc");
BlinkerNumber Number1("num-abc");
BlinkerButton Button2("btn-on");//开灯按键
BlinkerButton Button3("btn-off"); //关灯按键
int counter = 0;
// 按下按键btn-abc即会执行该函数,处理按键收到数据的回调函数
void button1_callback(const String & state) {
BLINKER_LOG("get button state: ", state); //打印输出调试信息
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); //将LED取反,测试手机是否连接上ESP8266
}
// 按下按键btn-on(开灯)即会执行该函数
void button2_callback(const String & state) {
mysevro.attach(2,500,2500); //由于每次开关灯后舵机都会断开,因此需要每次需要将2号引脚(D4)接上舵机
mysevro.write(20); //开关灯舵机所需要转动的角度
Blinker.delay(500);//充分延时,确保舵机能转到对应角度
mysevro.write(90); //以下两行使舵机位置复位,防止开关长时间顶着而损坏舵机
Blinker.delay(500);
mysevro.detach(); //断开舵机控制
digitalWrite(LED_BUILTIN, HIGH);//关闭板载LED灯
}
// 按下按键btn-off(关灯)即会执行该函数
void button3_callback(const String & state) {
mysevro.attach(2,500,2500);
mysevro.write(135);
Blinker.delay(500);
mysevro.write(90);
Blinker.delay(500);
mysevro.detach();
digitalWrite(LED_BUILTIN, HIGH);
}
// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
counter++;
Number1.print(counter);
}
void setup() {
// 初始化串口
Serial.begin(115200);
#if defined(BLINKER_PRINT)
BLINKER_DEBUG.stream(BLINKER_PRINT);
#endif
mysevro.attach(2,500,2500); // sevro舵机数据线连接在 Arduino 2(D4)号引脚
mysevro.write(90); // 将舵机轴旋转到中间位置
// 初始化有LED的IO
pinMode(LED_BUILTIN, OUTPUT); //设置按键模式为输出模式
digitalWrite(LED_BUILTIN, HIGH);
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead); //使用按键回调函数时,需要在set_up中注册回调函数
Button1.attach(button1_callback); //注册回调函数
Button2.attach(button2_callback);
Button3.attach(button3_callback);
}
void loop() {
Blinker.run();//保持设备之间连接
}
不太可能,建议看看调试信息
页:
[1]