培养动手能力,使用简单的原材料即可完成一个方便的功能
【纯小白向】零基础搞定宿舍远程门禁(不换锁)
一、硬件(材料)准备和连接
材料
NodeMcu 1.0(esp8266) 20RMB x1
·面包板 10RMB x1
·面包板电源 10RMB x1
·杜邦线若干
·15kg/cm扭矩或以上舵机 35RMB x1
·MicroUSB数据线+5V电源插头
·502和透明胶
·金属舵臂 <10RMB x1
·尼龙绳3mm以内(反正不容易被扯断的线)
连接
将舵机的信号线连接到NodeMcu的”D6”上,VCC和GND连接到面包板上的5V端(不知道哪根是哪根的问一下卖家,一般来说,白黑黑配色线,中间是正极,黑色是负极,旁边的白线是信号线;橙红棕配色,中间正极,棕色负极,橙色信号线)
·NodeMcu上左边两根挨着的的3V和0(GND),接到面包板上的3.3V端(可以调的那一端),给板子供电(看好别用成5V了,烧了可就不好了)
二、软件准备
Arduino IDE
esp8266 for Arduino sdk
安装ArduinoJSON库(v6)及PubSubClient库
CH340串口芯片驱动
前两个都可以在Arduino中文社区下载到,第二个也可以在Arduino IDE—工具—管理库 里搜索8266下载到(看网速的)
三、手机端配置
- 既然是远程控制,手机上必然要装好发送端,为了都能非常简单且直观地配置好,所以我用了网友开发的的物联网库,代码简单,实用性强。
我们下载好酷易物连的手机APP - 打开后,侧栏,接入设备
- 设置设备昵称
- 小程序控制
在APP中生成设备密钥
进入设备属性页
生成设备密钥当更改密码或删除设备时,密钥将不可用,需重新生成!
打开“酷易物联”微信小程序
![](https://doc.cooleiot.tech/static/images/xc.png
**输入设备密钥**
小程序特有设置
除了输入设备密钥进入设备外,还可以分享设备给微信好友,底部分享本设备以及右上角转发都可以实现。
- 设备昵称设置好后点击代码,在下方命令字段添加一个
open
,在通信字段添加一个callback
回调参数,然后点击保存
。 - 保存后在当前页面下方有个NodeMCU,打开后有个链接,发送给电脑,电脑打开下载后原始代码就生成完毕。
四、电脑端配置
选择开发板
选择端口
编译烧录
点击在ArduinoIDE中工具栏-编辑下 正对的“→”进行编译烧录。
也可使用Visual Studio Code的platformIO IDE插件进行Arduino开发(推荐)
烧录程序并测试
在配置好开发环境和手机端,以及硬件材料齐全的情况下,我们就开始烧录程序了哦~
首先,将NodeMcu用microUSB线连接到电脑(不同的esp8266开发板可能有些需要GPIO0接地之类的),当我们听到Windows熟悉的”叮叮叮咚(升调)”之后表示识别到了。(没有这个声音的话就是没识别到,大概率是线有问题,找那种粗♂的线吧)
如果没有这个选项的话,估计是你的esp8266环境没有装好
要填入/修改的部分
- 配置好WIFI和密码
1
2
3
4/****1-1配置WIFI以及设备连接****/
const char* WIFI_SSID = "xxx"; //WIFI名称
const char* WIFI_PASSWORD = "xxx"; //WIFI密码
/****************************/ - 引入新库及相关配置项
1
2
3
4
5/****2-1引入新库及相关配置项****/
int servo1_pin = 12; //设置舵机IO口
Servo servo1; //初始化一个舵机
/***************************/ - 自定义指令相关引脚
1
2
3
4
5/****2-2自定义指令相关引脚****/
servo1.attach(servo1_pin); //连接舵机到该IO口
pinMode(14,OUTPUT); //设置指示灯IO口
digitalWrite(14,LOW); //初始化指示灯(灭)
/***************************/ - 编写指令函数事件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19/****1-4编写指令执行函数****/
void open(){
String callback;
servo1.write(0); //初始化舵机位置
delay(500); //消抖
servo1.write(172); //舵机转动172度
digitalWrite(14,HIGH); //指示灯亮
callback = "开门中";
String publish_data1 = "{'reported':{'callback':'" + callback + "'}}";
mqttclient.publish(IOT_TOPIC_PUB, publish_data1.c_str()); //告给客户端说正在开门
delay(5000); //保持舵机172度角5s
servo1.write(0); //舵机归位
digitalWrite(14,LOW); //指示灯熄
callback = "门已打开";
String publish_data2 = "{'reported':{'callback':'" + callback + "'}}";
mqttclient.publish(IOT_TOPIC_PUB, publish_data2.c_str()); //给客户端说门开了
delay(500);
}
/************************/注意,在上面的代码中,发布内容为
String publish_data1 = "{'reported':{'callback':'" + callback + "'}}";
,在···'callback':'"
和"'}···
之间,可以看到双引号内还有一个单引号,这意味着我们要发布的数据是字符串类型的,如果两边没有这两个单引号,客户端会报错。而其它的整型浮点型等不用加上单引号。