首页 >> 大全

ESP32系列教程之SmartConfig智能配网

2023-11-13 大全 24 作者:考证青年

文章目录

介绍

随着越来越多智能家居设备进入家庭,这些产品大部分都是要连接家庭的WiFi网络的。而WiFi网络的接入需要知道无线路由器的名称(SSID)和密码,绝大多数的智能家居是没有输入接口的,在设备中预先设置WiFi的名称和密码显然是不现实的,这样对于智能家居要连接的无线路由器输入无线路由器的名字和密码就成了一个困难。为了克服这个问题,人们使用了多种配网方法,比如智能家居热点配网,手机热点配网,蓝牙辅助配网等等,这些配网方式都存在一定的不方便之处,而配网方式是这些无线配网方式里面比较方便和快捷的配网方式之一。

、ESP32使用了ESP-Touch协议,它适用于TI开发的技术。又名快连,用于将基于Wi-Fi的新型物联网设备连接到Wi-Fi网络。当前设备在没有和其他设备建立任何实际性通信链接的状态下,一键配置该设备接入WIFI。

的配网基本原理是通过手机直接发送报文到待配网设备。手机发送UDP广播报文,待配网设备扫描所有的可用无线信道,找到发送的报文,并锁定在这一信道上开始接收数据。

完成配网主要分以下3个步骤:

添加智能组网设备说明书__智能设备怎么配网

设备进入初始化状态,开始监听附近的WiFi数据包。手机/平板设置WiFi名称和密码后,发送UDP广播包。设备通过UDP包(长度)获取配置信息,切换网络模式,连接上家里WiFi,配置完成。 智能配网代码说明 引入头文件

#include 

智能配网

智能配网用到的主要函数为WiFi.()。通过查询连接状态判断WiFi是否连接成功,用到的主要函数为WiFi.()。

void smart_config(void)
{// Init WiFi as Station, start SmartConfigWiFi.mode(WIFI_AP_STA);WiFi.beginSmartConfig();// Wait for SmartConfig packet from mobileSerial.println("Waiting for SmartConfig.");while (!WiFi.smartConfigDone()){delay(500);Serial.print(".");}Serial.println("");Serial.println("SmartConfig received.");// Wait for WiFi to connect to APSerial.println("Waiting for WiFi");while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}WiFi.setAutoConnect(true); // 设置自动连接
}

开机自动连接WiFi

bool connect_wifi(void)
{WiFi.mode(WIFI_STA);WiFi.begin(); //启动WIFI连接Serial.println("Connection WIFI");int retry_count = 0;while (retry_count < MAX_RETRY){delay(500);Serial.print(".");retry_count++;if (WiFi.status() == WL_CONNECTED) //检查连接状态{return true;}}return false;
}

添加智能组网设备说明书_智能设备怎么配网_

开机判断联网方式,初次联网,则进入智能配网

void setup_wifi(void)
{if (!connect_wifi()){smart_config();}
}

程序运行结果

Connection WIFI
..........Waiting for SmartConfig.
...............................................
SmartConfig received.
Waiting for WiFiWiFi connected: Ohyes
IP address: 192.168.3.94
hello world!
hello world!

Connection WIFI
.........
WiFi connected: Ohyes
IP address: 192.168.3.94
hello world!
hello world!
hello world!
hello world!
hello world!
hello world!

附录:完整代码

完整代码可在下载://

#include #define MAX_RETRY 10void smart_config(void)
{// Init WiFi as Station, start SmartConfigWiFi.mode(WIFI_AP_STA);WiFi.beginSmartConfig();// Wait for SmartConfig packet from mobileSerial.println("Waiting for SmartConfig.");while (!WiFi.smartConfigDone()){delay(500);Serial.print(".");}Serial.println("");Serial.println("SmartConfig received.");// Wait for WiFi to connect to APSerial.println("Waiting for WiFi");while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}WiFi.setAutoConnect(true); // 设置自动连接
}bool connect_wifi(void)
{WiFi.mode(WIFI_STA);WiFi.begin(); //启动WIFI连接Serial.println("Connection WIFI");int retry_count = 0;while (retry_count < MAX_RETRY){delay(500);Serial.print(".");retry_count++;if (WiFi.status() == WL_CONNECTED) //检查连接状态{return true;}}return false;
}void setup_wifi(void)
{if (!connect_wifi()){smart_config();}Serial.println("");Serial.print("WiFi connected: ");Serial.println(WiFi.SSID());Serial.print("IP address: ");Serial.println(WiFi.localIP());
}void setup()
{// put your setup code here, to run once:Serial.begin(115200);setup_wifi();
}void loop()
{// put your main code here, to run repeatedly:Serial.println("hello world!");delay(1000);
}

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了