0.前言
ESP8266弄丢了好几个都忘记放在哪,重新买了个typeC接口的方便多了,看到驱动SG90舵机作为智能开关,简单复现了一下,代码比较简单,没有连接小爱同学或者其他语音助手。
1.实验方法
ESP8266连接SG90舵机,连接点灯科技APP(Blinker),远程控制舵机旋转角度,达到开关灯目的。
器材主要包括
ESP8266
SG90舵机(180度)–【推荐买SG90舵机360度】
手机APP
环境搭建
由于新换了台式机,导致arduino的环境需要重新配置,主要涉及8266库需要重新安装,找了一圈才找到一个可用的国内源,备份一下。
https://arduino.me/packages/esp8266.json
线路连接
SG90舵机
黄线–D4(GPIO2–可选其他接口)
红线–3V3
褐线–GND
程序烧录
内容比较简单,主要是连接WIFI,使用KEY连接BlinkerAPP,新建Blinker组件,定义组件功能
滑块功能比较鸡肋,可以删除,Blinker里好像没有可以调整固定值的按钮,所以前期可以使用滑块调整旋转角度用;初始设置为90°,90°时置于水平,这样0-180°方便调节角度。
开关灯都是固定角度,调整好就可以不用滑块的功能;这里设置的分别是40°和160°。
#include <Servo.h>
#define BLINKER_WIFI
#define BLINKER_MIOT_OUTLET
#include <Blinker.h>char auth[] = "XXXXXXXXXXXX"; //key
char ssid[] = "XXXX"; //wifi名称
char pswd[] = "XXXXXXXX"; //wifi密码Servo myservo;
// 新建组件对象
BlinkerButton Button1("btn-max"); //最大值按钮
BlinkerButton Button2("btn-min"); //最小值按钮
BlinkerButton Button3("btn-set"); //复位-90°
BlinkerSlider Slider3("ser-num"); //滑块int servo_max,servo_min,servo_set,ser_num,time_num;void button1_callback(const String & state) { //最大值按钮功能BLINKER_LOG("get button state: ", servo_max);myservo.write(servo_max);Blinker.vibrate();
}void button2_callback(const String & state) { //最小值按钮功能BLINKER_LOG("get button state: ", servo_min);myservo.write(servo_min);Blinker.vibrate();
}void button3_callback(const String & state) { //重置按钮功能BLINKER_LOG("get button state: ", servo_set);myservo.write(servo_set);Blinker.vibrate();
}void slider3_callback(int32_t value) //滑块功能
{ser_num = value;myservo.write(ser_num);Blinker.delay(500);BLINKER_LOG("get slider value: ", value);
}void setup() {Serial.begin(115200);BLINKER_DEBUG.stream(Serial);Blinker.begin(auth, ssid, pswd);Button1.attach(button1_callback);Button2.attach(button2_callback);Button3.attach(button3_callback);Slider3.attach(slider3_callback);myservo.attach(2); //servo.attach():设置舵机数据引脚myservo.write(90);servo_max=160;servo_min=40;servo_set=90;time_num=2000;}void loop() {Blinker.run();}
APP设置
2.实验结果
3.实验总结
8266连接电脑后莫名反复重启,换了USB口解决问题
舵机塑料齿、塑料舵角不耐用,尤其是塑料舵角容易偏置
Blinker比巴法云方便,整体流程简化了不少,库也比较完善