ESP32控制舵机转动,使用blinker实现远程开关宿舍灯/宿舍门
准备
杜邦线若干条(至少3条)
舵机一个,我使用的是SG90,大概扭力为1.4kg/cm
ESP32/ESP8266一块,我的是乐鑫的,带WIFI模块,大概30RMB
USB数据线一条
ESP32使用servo库会出现编译问题,架构不匹配,所以我这里直接使用pwm进行舵机的控制,你也可以使用ESP8266直接使用servo库控制舵机,方便很多,或者使用ESP32的舵机库(arduino的库管理器中可以找到)
连线
很多人可能接触开发板时间不长(比如说我),我就是最开始连线都不知道怎么接,网上给出完整接法的挺少的:
舵机直接连接ESP32:需要准备3条公母杜邦线,
先上一张ESP32引脚图
我们将黄色接GPIO16,黑色(咖啡色)接地(GND),红色接5v电源(Vin)
插上数据线连接电脑
手机和开发板通信
通过blinker向开发板发送Json格式的指令,由开发板通过blinker解析后执行相应的callback(回调)函数
下载blinker 的APP,添加设备即可
添加设备并选择服务器供应商后,会给出设备专属的密钥,保存之后有用
完整代码
#define BLINKER_WIFI #include <Blinker.h> char auth[] = "";//点灯秘钥char ssid[] = "";//无线网名称char pswd[] = "";//无线网密码int freq = 50;int channel = 8; int resolution = 8; const int led = 16;BlinkerButton Button1("btn-max"); BlinkerButton Button2("btn-min"); int servo_max=180,servo_min=90;int calculatePWM(int degree){ const float deadZone = 6.4;const float max = 32;if (degree < 0)degree = 0;if (degree > 180)degree = 180;return (int)(((max - deadZone) / 180) * degree + deadZone);}void button1_callback(const String & state) { BLINKER_LOG("get button state: ", servo_max); ledcWrite(channel, calculatePWM(180)); Blinker.vibrate(); } void button2_callback(const String & state) { BLINKER_LOG("get button state: ", servo_min); ledcWrite(channel, calculatePWM(90));Blinker.vibrate(); }void setup() { Serial.begin(9600); ledcSetup(channel, freq, resolution); // 设置通道ledcAttachPin(led, channel);// 将通道与对应的引脚连接BLINKER_DEBUG.stream(Serial); Blinker.begin(auth, ssid, pswd); Button1.attach(button1_callback); Button2.attach(button2_callback);}void loop() { Blinker.run(); }
上面的三个字符串分别写入自己的密钥和WiFi,在宿舍没WiFi的直接开手机热点
烧录程序,别忘了在烧录之前或之后打开WiFi,烧录结束我们的开发板就会连接上我们的WiFi
我们在程序中设置了两个Button,分别为btn-max,btn-min
在blinker的设备中也做相应的配置:
进入自己的设备
点击右上角可以对布局和按键功能等做出配置
配置结束后
我们就可以测试我们的程序:
在确保设备连接上WiFi后(可以在arduino的串口监控中查看具体发来的信息和WiFi连接情况)
现在点击开灯/关灯,舵机就会随之转动
使用它开关等的最简单方式就是
(🤦♂️)把他绑在宿舍灯开关的旁边,通过转动,让舵机对灯的开关施加压力实现开关灯
虽然有点捞,但是起码不用下床开门关灯了,可喜可贺