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 <WiFi.h>

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 <WiFi.h>

#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.h>  // 必须安装WiFiManager库
#include <WiFi.h>
#include <ESPmDNS.h>      // 可选:用于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

1. 安装VS Code 首先,需要在官下载并安装VS Code。 2. 安装ESP-IDF ESP-IDF是ESP32的开发框架,需要在命令行中安装。打开命令行,输入以下命令: ``` git clone --recursive https://github.com/espressif/esp-idf.git ``` 这会将ESP-IDF克隆到本地。 接下来,需要安装ESP-IDF的依赖项。输入以下命令: ``` cd esp-idf ./install.sh ``` 这将安装ESP-IDF所需的依赖项。 3. 安装ESP32的工具链 ESP32的工具链包括编译器、调试器、下载器等。需要在命令行中安装。输入以下命令: ``` sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-serial ``` 这将安装ESP32的工具链。 4. 安装ESP32的扩展 在VS Code中安装ESP32的扩展,可以方便地编写、编译、调试ESP32的程序。打开VS Code,点击左侧菜单栏中的“扩展”,搜索“ESP32”,点击安装即可。 5. 创建ESP32项目 在VS Code中,点击左侧菜单栏中的“文件”->“新建文件夹”,创建一个新文件夹,用于存放ESP32的项目。 打开命令行,进入该文件夹,输入以下命令: ``` idf.py create-project my_project ``` 这将创建一个名为“my_project”的ESP32项目。 6. ESP32项目 打开VS Code,点击左侧菜单栏中的“文件”->“打开文件夹”,选择刚才创建的项目文件夹。 在项目文件夹中打开“CMakeLists.txt”文件,根据自己的需要进行置。 7. 编译ESP32项目 在VS Code中,按下“Ctrl+Shift+P”,输入“ESP32: Build”并选择该命令,开始编译ESP32项目。 8. 调试ESP32程序 在VS Code中,按下“Ctrl+Shift+P”,输入“ESP32: Start Debugging”并选择该命令,开始调试ESP32程序。 以上是VS Code ESP32使用教程的基本步骤。根据自己的需要和实际情况,可以进行更加详细的置和调试。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值