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连接情况)
现在点击开灯/关灯,舵机就会随之转动
使用它开关等的最简单方式就是
(🤦♂️)把他绑在宿舍灯开关的旁边,通过转动,让舵机对灯的开关施加压力实现开关灯