皇冠365bet体育投-365bet最新备用-beat365官方网站正规

— 怀旧经典 · 永恒记忆 —

ESP32教程(基于Arduino IDE)4-WiFi配网

ESP32教程(基于Arduino IDE)4-WiFi配网

ESP32教程系列 1 - 认识ESP32 2 - Arduino IDE安装&配置 3 - 基本操作 4 - WiFi配网 5 - WebServer① 6 - Web Server②控制输出 7 - Web Server③ HTML&CSS基础 8 - Web Server④ 在Arduinio中添加HTML&CSS 9 - 异步网页服务器 Asynchronous Web Server(DHT11) 10 - OTA ESP32无线升级,告别数据线

ESP32实战系列 WiFi遥控小车

ESP32 Homekit系列 Homekit & Homespan介绍 点亮一颗LED 调节LED亮度

更新

2025.3.16 更新AP配网

前言

从本节开始介绍ESP32核心功能之一—物联网功能。在正式进入物联网之前,我们先了解下如何连接Wi-Fi。

如何配网

连接Wi-Fi的方法一般有两种。 一是通过代码里固定写死账号密码,这种比较适合在已经明确的固定场所使用,如家庭,工作地点,上电自动连入Wi-Fi,避免繁琐的人工配网过程。缺点不言而喻,灵活性低,当将设备移到不同地方时,需重新烧录代码。 二是通过手机配网。现在的智能家居就是使用这种方法,先通过连入设备的热点,告诉设备所要连接的Wi-Fi以及密码,即可自动连上。设备在记忆后,断电后下次上电时可自动连入Wi-Fi。优点就是灵活性高,缺点就是首次配网教麻烦,当然代码也会相对复杂。

方法一

我们在学习ESP32网络相关时,一般使用自带的示例代码去熟悉这些函数的功能,编写。所以教程里也是用这些示例。 我们使用ESP32自带的示例WebServer. 我们选择secrets.h选项卡 在这个文件里配置需要连接的WiFi名称和密码

// add you wifi network name and PassPhrase or use WiFi Manager

const char *ssid = ""; //WiFi名称

const char *passPhrase = ""; //WiFi密码

配置好以后,每次上电时,ESP32会自动连接该WiFi。

方法二

第二种方法呢,我们希望在ESP32上电的时候,由我们自行决定连接哪个WiFi。 那么官方也提供了一个示例代码。 我们打开这个WiFiSmartConfig示例代码。

#include "WiFi.h"

void setup() {

Serial.begin(115200); //配置串口通信速率

//初始化WiFi模块为Station,开启智能配网

WiFi.mode(WIFI_AP_STA);

WiFi.beginSmartConfig();

//等待手机端的智能配网

Serial.println("Waiting for SmartConfig.");

while (!WiFi.smartConfigDone()) {

delay(500);

Serial.print(".");

}

Serial.println("");

Serial.println("SmartConfig received.");

//等待WiFi连接

Serial.println("Waiting for WiFi");

WiFi.begin();

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println("WiFi Connected.");

//连接成功后打印IP地址

Serial.print("IP Address: ");

Serial.println(WiFi.localIP());

}

void loop() {

// put your main code here, to run repeatedly:

}

使用智能配网时,我们需要用到手机上的APP。 安装应用:下载并安装 ESP Touch 应用(Android)或 ESPTouch 应用(iOS)。这个应用用于向ESP32发送Wi-Fi网络信息。 博主的手机为iPhone,以下说明以iPhone为例。

1、在应用商店下载下述App

该APP为Espressif官方App

2、配网

打开App后,界面如下。异常简洁。我们选择EspTouch即可。 确保手机已经连入WiFi,此时SSID处会出现相应的WIFI名称,在密码框中输入密码,最后点击屏幕最下方的确认即可完成配网。 那么在串口处会出现以下内容,说明联网成功。 第一行的…表示在等待配网。 配网成功后会显示IP地址。

WiFiSmartConfig的BUG

这一段官方的代码呢,仅为示例代码,过程是上电后需要等待手机配网,配网成功后打印IP地址。

#include "WiFi.h"

void setup() {

Serial.begin(115200); //配置串口通信速率

//初始化WiFi模块为Station,开启智能配网

WiFi.mode(WIFI_AP_STA);

WiFi.beginSmartConfig();

//等待手机端的智能配网

Serial.println("Waiting for SmartConfig.");

while (!WiFi.smartConfigDone()) {

delay(500);

Serial.print(".");

}

Serial.println("");

Serial.println("SmartConfig received.");

//等待WiFi连接

Serial.println("Waiting for WiFi");

WiFi.begin();

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println("WiFi Connected.");

//连接成功后打印IP地址

Serial.print("IP Address: ");

Serial.println(WiFi.localIP());

}

void loop() {

// put your main code here, to run repeatedly:

}

经过实测,掉电再上电后,需要重新配网,那么这种做法在实际项目中就没有太大意义了。所以我们需要对这段代码进行改造。 逻辑就是,先检查是否有保存过的Wifi信息,有的话,去连接这个WiFi;没有则进入配网过程。

#include

void setup() {

Serial.begin(115200);

// 检查是否有保存的Wi-Fi配置信息

if (WiFi.status() != WL_CONNECTED) {

WiFi.begin(); // 尝试自动连接上次保存的Wi-Fi

Serial.println("尝试连接已保存的WiFi...");

// 等待连接成功

int attempts = 0;

while (WiFi.status() != WL_CONNECTED && attempts < 20) {

delay(500);

Serial.print(".");

attempts++;

}

}

// 如果无法自动连接Wi-Fi,则进入SmartConfig模式

if (WiFi.status() != WL_CONNECTED) {

Serial.println("\n开始配网...");

WiFi.beginSmartConfig(); // 启动SmartConfig

while (!WiFi.smartConfigDone()) {

delay(500);

Serial.print(".");

}

Serial.println("配网成功");

}

// 确保连接成功

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println("\nWiFi已连接.");

Serial.print("IP地址: ");

Serial.println(WiFi.localIP());

}

void loop() {

// 在此处可以添加其他代码

}

上述代码虽然可以掉电保存已连接的WiFi,但我们想要更换WiFi的话就比较困难了,所以我们需要加一个外部操作,如按键,按下按键时,清除原来已保存的wifi信息,重新进入配网过程。

#include

#define BUTTON_PIN 0 // 使用GPIO 0作为按键引脚(可以根据硬件情况更改)

void setup() {

Serial.begin(115200);

pinMode(BUTTON_PIN, INPUT_PULLUP); // 设置按键引脚为输入并启用上拉电阻

// 检查按键是否被按下

if (digitalRead(BUTTON_PIN) == LOW) { // 如果按键按下,进入配网模式

Serial.println("Button pressed, clearing Wi-Fi settings...");

WiFi.disconnect(true, true); // 清除保存的Wi-Fi信息

delay(1000); // 给清除过程一些时间

}

// 检查是否有保存的Wi-Fi配置信息

if (WiFi.status() != WL_CONNECTED) {

WiFi.begin(); // 尝试连接保存的Wi-Fi

Serial.println("Trying to connect to saved Wi-Fi...");

int attempts = 0;

while (WiFi.status() != WL_CONNECTED && attempts < 20) {

delay(500);

Serial.print(".");

attempts++;

}

}

// 如果无法自动连接Wi-Fi,则进入SmartConfig模式

if (WiFi.status() != WL_CONNECTED) {

Serial.println("\nStarting SmartConfig...");

WiFi.beginSmartConfig(); // 启动SmartConfig

while (!WiFi.smartConfigDone()) {

delay(500);

Serial.print(".");

}

Serial.println("SmartConfig Success");

}

// 确保连接成功

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println("\nWiFi已连接.");

Serial.print("IP地址: ");

Serial.println(WiFi.localIP());

}

void loop() {

// 在此处可以添加其他代码

}

方法三

原理:ESP32启动AP模式,用户连接后通过网页配置WiFi。 需要的库:WiFiManager

#include // 必须安装WiFiManager库

#include

#include // 可选:用于mDNS服务(局域网域名访问)

void setup() {

Serial.begin(115200);

Serial.println("\n启动中...");

// 初始化WiFiManager

WiFiManager wifiManager;

// 可选配置 ----------------------------------------

// 设置配网超时时间(单位:秒,超时后自动重启)

wifiManager.setTimeout(180);

// 自定义AP名称和密码(默认无密码)

// wifiManager.autoConnect("ESP32-AP", "12345678");

// ------------------------------------------------

// 尝试连接已保存的WiFi,若失败则启动配网AP

if (!wifiManager.autoConnect("ESP32-Config")) {

Serial.println("配网失败,重启设备");

delay(3000);

ESP.restart(); // 重启

}

// 配网成功后的逻辑 --------------------------------

Serial.println("\nWiFi已连接!");

Serial.print("IP地址: ");

Serial.println(WiFi.localIP());

// 可选:启用mDNS服务(通过域名访问ESP32)

if (MDNS.begin("esp32")) {

Serial.println("mDNS域名: esp32.local");

}

// 在此添加后续代码(如启动Web服务器、OTA等)

}

void loop() {

// 保持连接,防止看门狗复位

delay(1000);

}

烧录之后,使用手机连接SSID为ESP32-Config的网络,无需密码。 在网页浏览器里输入:http://192.168.4.1 点击【Configure WiFi】 选择要连接的网络,并输入密码,最后点击Save按钮即可。

拓展

各位有兴趣也可以将上述配网信息显示在OLED中。针对OLED类的I2C设备做一个小拓展。 博主以前也买过不少OLED模块,但每次买回来都要折腾一番。主要是地址与模块上显示的地址不匹配。Arduino自带了一个I2C地址扫描示例,我们可以利用这个示例代码来查找我们所连接的I2C地址是多少。

#include "Wire.h"

void setup() {

Serial.begin(115200);

Wire.begin(5,4); //Wire.begin(SDA,SCL),根据具体的开发板进行修改

}

void loop() {

byte error, address;

int nDevices = 0;

delay(5000);

Serial.println("Scanning for I2C devices ...");

for (address = 0x01; address < 0x7f; address++) {

Wire.beginTransmission(address);

error = Wire.endTransmission();

if (error == 0) {

Serial.printf("I2C device found at address 0x%02X\n", address);

nDevices++;

} else if (error != 2) {

Serial.printf("Error %d at address 0x%02X\n", error, address);

}

}

if (nDevices == 0) {

Serial.println("No I2C devices found");

}

}

找到地址后会在串口中显示。

结束

以上就是配网的基本教程。 如有错误,欢迎指正。 如果喜欢,欢迎关注微信公众号:+大钱硬件

苹果智能家居HomeKit系列文章 ESP32 Homekit实战 - Homekit & Homespan介绍 ESP32 Homekit实战 - 点亮一颗LED

相关推荐

皇冠365bet体育投 [讨论]腾讯哈勃沙箱似乎停止服务了?

[讨论]腾讯哈勃沙箱似乎停止服务了?

📅 09-30 👁️ 295
365bet最新备用 霹的五笔怎么打?霹的五笔拆分图.

霹的五笔怎么打?霹的五笔拆分图.

📅 07-06 👁️ 5847
365bet最新备用 Word表格中的文字垂直、纵向居中

Word表格中的文字垂直、纵向居中

📅 07-11 👁️ 2043
365bet最新备用 各大银行保本理财产品大比拼,哪个最值得买?

各大银行保本理财产品大比拼,哪个最值得买?

📅 08-10 👁️ 5971
皇冠365bet体育投 花钱可插队:12306的难题,海底捞要怎么解?

花钱可插队:12306的难题,海底捞要怎么解?

📅 08-09 👁️ 1928
365bet最新备用 永恒记忆:2002世界杯的土耳其启示

永恒记忆:2002世界杯的土耳其启示

📅 07-27 👁️ 5777
365bet最新备用 删除系统安装残留NT6引导菜单

删除系统安装残留NT6引导菜单

📅 09-17 👁️ 8254
beat365官方网站正规 查看在 OneDrive 中与你共享的文件

查看在 OneDrive 中与你共享的文件

📅 08-13 👁️ 1995
beat365官方网站正规 男瓜子脸适合什么发型,男瓜子脸发型适配指南

男瓜子脸适合什么发型,男瓜子脸发型适配指南

📅 10-01 👁️ 9349
皇冠365bet体育投 去清迈找邓丽君,是为了重返一代人的记忆

去清迈找邓丽君,是为了重返一代人的记忆

📅 09-12 👁️ 7386