人在宿舍,不想关灯,于是开始试着搞一个远程关灯。
原本打算用esp8266,问了一些学长,后来买了esp32 nodemcu-32 v1.3
用Arduino IDE写的,打算连接blinker之后用手机app控制。
软件部分
1.配置Arduino IDE
Arduino IDE里有现成的blinker库,只需要搜索 安装 就可以了(出现蓝色的installed就可以了)
还需要安装esp32控制舵机的库,同样在库管理器中搜索 ESP32Servo 这个库,安装它。
esp32这个板子还要装一个什么(我不知道是什么总之运行一下就好了)
链接:https://pan.baidu.com/s/1P05yN0o5paZOr_vAhguYDA?pwd=ssss
提取码:ssss
之后在开发板里能看见esp32就好啦
2.手机端app
去点灯科技官网点灯科技 (diandeng.tech)下载Blinker app。添加设备,选 独立设备,网络接入
这时候复制一下密钥,一会儿需要粘到代码里。之后点进新的设备,选择右上角编辑模式,新建一个按钮。也可以顺便加一个 调试 ,方便看连接状态。(图是新建的按钮,名称可以自己订)
关于blinker的用法点灯的官网也有样例。
3.连接wifi
我们学校的校园网需要登陆学生账号,不过没关系,可以在宿舍插一个路由器,输入自己寝室路由器的名称和密码,这样就应该可以正常连接wifi了。(密钥如果忘复制了就点右上角三个点)
char auth[] = " ";//密钥
char ssid[] = " ";//WiFi的名称
char pswd[] = " ";//wifi密码
全部代码:
#define BLINKER_WIFI
#include<Blinker.h>
#include <ESP32Servo.h>//头文件要是报错应该是库没加上
const int servoPin = 13;//是舵机的引脚
char auth[] = "4c*******5";//密钥
char ssid[] = "C******";//wifi名称
char pswd[] = "3*****";//WiFi密码
Servo myservo;
BlinkerButton Button1("btn");//绑定上自己在手机端新建的那个按钮
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
myservo.write(30);//舵机转到30度(角度按自己实际情况改
delay(500);
myservo.write(0);//让舵机复位
}
void setup()
{
Serial.begin(115200);
myservo.attach(servoPin);
BLINKER_DEBUG.stream(Serial);
Blinker.begin(auth, ssid, pswd);
//Blinker.attachData(dataRead);//不知道干嘛用的,貌似没什么用
Button1.attach(button1_callback);//将函数绑在按钮上
}
void loop()
{
Blinker.run();
}
硬件部分
上图
用充电宝供电的,没有问题。
舵机力量不是很大,有可能拍不动开关,所以只做了关灯的。
避雷
如果一直打不开COM口,可能是因为数据线不是数据线而是充电线,比如我换了三根,很不巧的全是充电线……
A fatal error occurred: Packet content transfer stopped (received 8 bytes)这个迷惑报错是因为我把舵机应该插到GND的线插到了CWD(5v旁边的引脚)
舵机不要接到34-39口,他们是仅输入不能输出,换成13什么的就行了
不要靠近360°舵机,会变得不幸。它的控制方法和180°不一样。360的不能控制角度,只能以一定速度正转或反转。所以许多函数库也不能用,不过如果实在不想重买也不会写pwm的话,可以用角度算占空比之后放delay实现开关灯。180°的舵机角度和占空比的关系是这样的:
0.5ms----------------0度;
1ms -----------------45度;
1.5ms----------------90度;
2ms -----------------135度;
2.5ms ---------------180度;
而360的是
0.5ms----------------正向最大转速;
1.5ms----------------速度为0;
2.5ms----------------反向最大转速;
所以即使用了180的函数库,只要输入90就对应了1.5ms,也就对应了360°的速度为0。以此类推,只要输入角度大于90度就是反向转,小于90°就是正向,离90越远速度越快,但是角度很不准,几次下来就偏了。(所以最后的最后我又重新买了180的舵机orz
然鹅现在宿舍到点儿断电熄灯,已经不再需要上床关灯……