培养动手能力,使用简单的原材料即可完成一个方便的功能

【纯小白向】零基础搞定宿舍远程门禁(不换锁)

一、硬件(材料)准备和连接

材料

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下载到(看网速的)

三、手机端配置

  1. 既然是远程控制,手机上必然要装好发送端,为了都能非常简单且直观地配置好,所以我用了网友开发的的物联网库,代码简单,实用性强。
    我们下载好酷易物连的
    手机APP
  2. 打开后,侧栏,接入设备
    接入设备
  3. 设置设备昵称
    设置设备昵称
  4. 小程序控制
    在APP中生成设备密钥
    进入设备属性页

    生成设备密钥

    当更改密码或删除设备时,密钥将不可用,需重新生成!

打开“酷易物联”微信小程序
![](https://doc.cooleiot.tech/static/images/xc.png
**输入设备密钥**

小程序特有设置

除了输入设备密钥进入设备外,还可以分享设备给微信好友,底部分享本设备以及右上角转发都可以实现。

  1. 设备昵称设置好后点击代码,在下方命令字段添加一个open,在通信字段添加一个callback回调参数,然后点击保存
  2. 保存后在当前页面下方有个NodeMCU,打开后有个链接,发送给电脑,电脑打开下载后原始代码就生成完毕。

四、电脑端配置

选择开发板
这个是安装了8266的库才会显示
选择端口

编译烧录
点击在ArduinoIDE中工具栏-编辑下 正对的“→”进行编译烧录。

也可使用Visual Studio Code的platformIO IDE插件进行Arduino开发(推荐)

烧录程序并测试

在配置好开发环境和手机端,以及硬件材料齐全的情况下,我们就开始烧录程序了哦~
首先,将NodeMcu用microUSB线连接到电脑(不同的esp8266开发板可能有些需要GPIO0接地之类的),当我们听到Windows熟悉的”叮叮叮咚(升调)”之后表示识别到了。(没有这个声音的话就是没识别到,大概率是线有问题,找那种粗♂的线吧)


如果没有这个选项的话,估计是你的esp8266环境没有装好

要填入/修改的部分

  1. 配置好WIFI和密码
    1
    2
    3
    4
    /****1-1配置WIFI以及设备连接****/
    const char* WIFI_SSID = "xxx"; //WIFI名称
    const char* WIFI_PASSWORD = "xxx"; //WIFI密码
    /****************************/
  2. 引入新库及相关配置项
    1
    2
    3
    4
    5
    /****2-1引入新库及相关配置项****/
    #include <Servo.h> //引入舵机控制库
    int servo1_pin = 12; //设置舵机IO口
    Servo servo1; //初始化一个舵机
    /***************************/
  3. 自定义指令相关引脚
    1
    2
    3
    4
    5
    /****2-2自定义指令相关引脚****/
    servo1.attach(servo1_pin); //连接舵机到该IO口
    pinMode(14,OUTPUT); //设置指示灯IO口
    digitalWrite(14,LOW); //初始化指示灯(灭)
    /***************************/
  4. 编写指令函数事件
    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':'""'}···之间,可以看到双引号内还有一个单引号,这意味着我们要发布的数据是字符串类型的,如果两边没有这两个单引号,客户端会报错。而其它的整型浮点型等不用加上单引号。

在酷易物联APP中进行调试