不想了解代码实现,可直接到代码部分copy!ESP32亲测可用。
使用设备ESP32开发板(ESP32-WROOM-32)
搜了好多别人写的资料,很多都是copy+copy,也没有什么解释。啪,代码放在那里,自己看吧。
我不是说他们写的都是垃圾哈 ~ 那我承认,我就是这么想的,有的说是教程也啥都没写
不能怪人家不能怪人家,咱还是自己学!!!
咱的代码也是copy了再改的,没脸说人家。
让我自己写的话,那不叫写代码,那叫写bug。
在学习中进步!!
正题开始了
设备热点配网(Soft AP)
很抱歉C++的基础不好,没封装成库的形式,创建类后有一部分函数总是报错,没有解决。
但是也分成了文件的形式,要是拷贝使用也非常方便。
说明:LED显示配网状态
LED闪烁:表示正在尝试连接网络。
LED常亮:表示网络连接成功
LED常灭:表示等待配网
LED闪烁5次:表示已清除wifi信息
配网状态下ESP32开发板还挺温乎的!
实话实说,这是我抄的!!
但是我忘记在哪里抄的了。
(我的手机截图)
我是在这个网站看嫖来的配网界面好不好看的。
在线的,目前免费,试了一试还挺好用的
在这个软件中,新建工程复制进去这个代码就能看网页效果了。
因为我也不懂哈 ~ 有什么错误我可能不知道。但是显示的网页是正常的。
WIFI
红线上为配网前打印
红线后为配网后打印
以上就是代码之外的资料了 ~
本次工程包含三个文件main.ino、WiFiUser.cpp、WiFiUser.h
有关配网的函数都在WiFiUser.cpp、WiFiUser.h文件中,可直接添加这两个文件到工程目录下进行调用。
如果不想学习怎么实现,可直接复制这两个文件,两分钟内实现配网操作!
由于官方命名原因,ESP8266的库文件需要更改为ESP8266+库文件的形式,但函数可通用。(此条说明未验证)
如果想了解实现原理,需配合串口打印信息来分析。
很遗憾没有设置成类的形式,以后要改!!
在此文件夹下,声明了函数。可以见得,include此文件,只需要在自己写的函数中调用3个函数即可实现配网全操作。5个文件中一个是LED、一个是清除wifi保存在flash的信息、只有三个才是配网所需函数!
#ifndef __WIFIUSER_H__
#define __WIFIUSER_H__
#include
#include
#include
#include //用于设备域名 MDNS.begin("esp32")
#include //用于esp_wifi_restore() 删除保存的wifi信息
extern const int LED; //设置LED引脚
extern const char* HOST_NAME; //设置设备名
extern int connectTimeOut_s; //WiFi连接超时时间,单位秒
//===========需要调用的函数===========
void checkConnect(bool reConnect); //检测wifi是否已经连接
void restoreWiFi(); //删除保存的wifi信息
void LEDinit(); //LED初始化
void checkDNS_HTTP(); //检测客户端DNS&HTTP请求
void connectToWiFi(int timeOut_s); //连接WiFi
//===========内部函数===========
void handleRoot(); //处理网站根目录的访问请求
void handleConfigWifi() ; //提交数据后的提示页面
void handleNotFound(); //处理404情况的函数'handleNotFound'
void initSoftAP(); //进入AP模式
void initDNS(); //开启DNS服务器
void initWebServer(); //初始化WebServer
bool scanWiFi(); //扫描附近的WiFi,为了显示在配网界面
void wifiConfig(); //配置配网功能
void blinkLED(int led, int n, int t); //LED闪烁函数 //用不上LED可删除
#endif
这就是所有有关配网的函数的定义了 ~
这里有一点应该注意的是:HTML放在代码中时在 " 前应该加 \ (转义符)
#include "WiFiUser.h"
const byte DNS_PORT = 53; //设置DNS端口号
const int webPort = 80; //设置Web端口号
const char* AP_SSID = "ESP32-4_1"; //设置AP热点名称
//const char* AP_PASS = ""; //这里不设置设置AP热点密码
const char* HOST_NAME = "MY_ESP32"; //设置设备名
String scanNetworksID = ""; //用于储存扫描到的WiFi ID
IPAddress apIP(192, 168, 4, 1); //设置AP的IP地址
String wifi_ssid = ""; //暂时存储wifi账号密码
String wifi_pass = ""; //暂时存储wifi账号密码
const int LED = 2; //设置LED引脚
DNSServer dnsServer; //创建dnsServer实例
WebServer server(webPort); //开启web服务, 创建TCP SERVER,参数: 端口号,最大连接数
#define ROOT_HTML "WIFI "
/*
* 处理网站根目录的访问请求
*/
void handleRoot()
{
if (server.hasArg("selectSSID")) {
server.send(200, "text/html", ROOT_HTML + scanNetworksID + ""); //scanNetWprksID是扫描到的wifi
} else {
server.send(200, "text/html", ROOT_HTML + scanNetworksID + "