物联那点事儿之SmartConfig技术一键配网!(arduino+点灯科技篇) 您所在的位置:网站首页 微信小程序阿里云物联网 物联那点事儿之SmartConfig技术一键配网!(arduino+点灯科技篇)

物联那点事儿之SmartConfig技术一键配网!(arduino+点灯科技篇)

2023-12-24 22:48| 来源: 网络整理| 查看: 265

前言

  好久没更新了,最近在研究用ardunio+阿里云物联网平台+微信开发者者工具做微信小程序的项目,先来更新一下使用点灯科技第三方平台编写程序的代码吧!最近接触了了阿里云物联网平台之后,尤其是对mqtt的消息和订阅方面的知识,有点懵逼,发现还是点灯科技这个平台比较适合上手,因为blinker给出的库文件里面封装了mqtt的代码,新手是不需要考虑这个的,先上手如何使用smartConfig技术给esp8266智能配网吧!这个过程和刚买回家的天猫精灵配网差不多,具体请往下阅读!这篇帖子呢我以点灯科技的温湿度为例,代码中不包含小爱同学的代码,参考这篇文章的朋友可根据自己的需求自行更改代码哈。废话不多说,看下方!👇

物联那点事儿专栏回顾:

arduino+点灯科技+温湿度DHT11+esp01=自制网络温湿度计arduino+点灯科技+wifi继电器+esp01=网络远程控制开关机ardunio+点灯科技+温湿度+云存储=温湿度变化曲线

前两篇帖子我们都是用的直接配网的方式,直接将wifi的名称和密码写到代码中,在进行blinker初始化的时候直接将代码中写好的wifi名称和密码放到blinker.begin()函数中。

char ssid[] = "**********"; //你的wifi 名称 char pswd[] = "**********"; //你的wifi 密码/ Blinker.begin(auth, ssid, pswd); // // 初始化blinker

在代码中直接将wifi名称和密码直接写进去的话,这真的不是很符合现实中的需求,如果设备挪窝了咋办?如果换路由器了咋办?如果wifi名称和密码改了咋办?只能重新烧录程序了,要想批量生产的话是不现实的。而smartConfig技术就完美地解决了这个问题。👇

正文 准备:使用ardunio IDE上传程序(一定要安装好Blinker库和DHT库),手机配网方式用安信可的微信公众号直接给设备配网就可以了,当然也可使用手机app的esptouch配网,这里呢我还是建议用微信公众号去配网,比较省事情。硬件方面,用DHT11和esp01/nodemcu(和esp01相比就是引脚比较多,原理是一样的,都是esp8266)。使用smartConfig技术进行wifi配网的大概原理:

;;;在这里插入图片描述     大概的意思就是,手机连接路由器,手机通过软件向外发出UDP的广播信号,并且这时不管是否有人接收,就一直往外广播,其中的广播信号的内容就是wifi的名称和密码,esp8266设备上电开机后,收到广播信号,拿到路由器的wifi名称和密码,就连接上了对应的路由器,类似于wifi共享。

代码部分

    在给es98266设备编写连接wifi程序的时候,实则是用的ESP8266WIFI库,这里呢,点灯科技给的库文件也包含了这个ESP8266WIFI库的内容,所以我们直接在前面包含blinker.h就能完成一键配网的功能。 整体思路: 直接配网的代码就是将wifi的名称和密码放到bkinker.begin()函数中,这里呢,一键配网也就是设备获取到wifi的名称和密码,然后再传给blinker.begin()函数中,所以需要删除之前程序中的ssid和pswd数组。 一、先写一个配网函数,用于获取到手机发送的UDP广播信号中的wifi名称和密码。

void smartConfig()//配网函数 { WiFi.mode(WIFI_STA);//使用wifi的STA模式 Serial.println("\r\nWait for Smartconfig...");//串口打印 WiFi.beginSmartConfig();//等待手机端发出的名称与密码 //死循环,等待获取到wifi名称和密码 while (1) { //等待过程中一秒打印一个. Serial.print("."); delay(1000); if (WiFi.smartConfigDone())//获取到之后退出等待 { Serial.println("SmartConfig Success"); //打印获取到的wifi名称和密码 Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str()); Serial.printf("PSW:%s\r\n", WiFi.psk().c_str()); break; } } }

二、写一个wifi初始化函数,用于wifi连接操作。     因为esp8266乐鑫中的flash中会存储之前连接的wifi名称和密码,所以之前只要连接好WiFi之后,设备下次上电就不需要再去使用smartConfig技术去获取路由器wifi名称和密码,可以直接使用flsah存储的wifi名称和密码去连接路由器,.。

代码思路:

设备上电后,设备尝试使用flash中存储的wifi名称和密码连接路由器,定义一个整形全局变量count记录尝试连接次数,定义一个布尔型全局变量WIFI_Status并赋值为TRUE,用于表示连接状态,表示如果次数达到五次,WIFI_Status赋值为flase,执行smartConfig()配网函数。(1)定义全局变量。

int count=0; bool WIFI_Status = true;

(2)初始化函数体。

void WIFI_Init() { Serial.println("\r\n正在连接"); //当设备没有联网的情况下,执行下面的操作 while(WiFi.status()!=WL_CONNECTED) { if(WIFI_Status)//WIFI_Status为真,尝试使用flash里面的信息去 连接路由器 { Serial.print("."); delay(1000); count++; if(count>=5) { WIFI_Status = false; Serial.println("WiFi连接失败,请用手机进行配网"); } } else//使用flash中的信息去连接wifi失败,执行 { smartConfig(); //smartConfig技术配网 } } //串口打印连接成功的IP地址 Serial.println("连接成功"); Serial.print("IP:"); Serial.println(WiFi.localIP()); }

三、主函数中调用WIFI初始化函数,修改blinker.begin()函数 前面的代码都要写在setup函数前面啊,这样才可以在setup函数中调用wifi初始化函数,blinker.begin()函数中的参数分别是设备key、wifi名称、wifi密码。设备key是固定的,另外两个参数在 smartConfig()获取到的。

WIFI_Init();//调用WIFI函数 Blinker.begin(auth, WiFi.SSID().c_str(), WiFi.psk().c_str());//运行blinker

四、操作配网 代码上传成功后,就可以用安信可科技微信公众号给设备一键配网了,具体操作如下图,也看下面的演示视频。

一键配网效果演示

在这里插入图片描述 源码获取地址:可点击跳转至GitHub获取整篇源码

总结

使用点灯科技第三方平台可以实现一键配网,当然如果用阿里云物联网平台也是可以的,道理和这个一样,可以自己尝试,我已经试出来了。

逆水行舟不进则退,有问题在下方评论或者私聊我一直在,一起进步!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有