1. 前言

欢迎使用ESP32进行WiFi配网!本教程将带领您轻松掌握两种不同的配网方法:一种是通过Web服务器在浏览器中手动输入WiFi信息;另一种则是利用BLE(低功耗蓝牙)进行无线配网。只需按照以下步骤操作,您就能顺利将ESP32连接到家庭WiFi网络,并且下次启动可以自动连接之前连过的wifi。

2. 先决条件

这一次还是采用Arduino编程就会轻松许多开发。这样就可以愉快进行【ESP32 配网教程】
在继续此项目之前,请确保检查以下先决条件。我们将使用 Arduino IDE 对 ESP32/ESP8266 开发板进行编程,因此在继续本教程之前,请确保已在 Arduino IDE 中安装这些开发板。此外,为了实现ESP32S3与SNR9816TTS模块的串口通信,请确保您已经安装了WebServerWiFi库。

2.1 环境配置

  1. Arduino IDE:下载并安装 Arduino IDE;

  2. ESP32 开发板库:在 Arduino IDE 中添加 ESP32 支持;
    参考博客:【esp32c3配置arduino IDE教程】
    为安装过程留出一些时间,具体时间可能因您的互联网连接而异。

2.2 所需零件

要学习本教程,您需要1个ESP32S3 Sense,或者随便一个esp32。

名称 端口 功能 购买地址
ESP32S3 Sense TXGPIO01 RXGPIO02 主控 官方地址
中文版 SNR9816TTS TXRX RXTX TTS模块 淘宝地址

3.3 硬件连接步骤

目前这是我使用的ESP32S3官方硬件(小小的身材有大大的力量)只需要35元加摄像头麦克风79元,后期我会整理相关专栏进行Arduino系统学习。有需要可以购买xiao开发板,SeeedXIAO ESP32S3 Sense硬件购买地址:https://s.click.taobao.com/lekazrt,ESP32S3 Sense直接连接电脑

3. Web热点手动配网

Web热点手动配网是通过esp32生成一个热点AP,用户连接后在配网网页中输入要连接的热点信息,检查无误后发送连接,下次启动可以自动连接之前连过的wifi。

3.1. 准备工作

首先,确保您的ESP32开发板已正确连接至电脑,并在Arduino IDE中安装好所需的库(如WiFi.hWebServer.h)。将教程提供的第一份代码复制粘贴到IDE中。

main.c

#include <WiFi.h>#include <WebServer.h>#include "smartconfig.h"void setup() {
  Serial.begin(115200);
  if (!AutoConfig()) {
    smartConfig();
  }}void loop() {
  WiFiClient client;
  const char* host = "www.baidu.com";
  const int httpPort = 80;

  Serial.print("Connecting to ");
  Serial.println(host);

  if (!client.connect(host, httpPort)) {
    Serial.println("Connection failed");
    return;
  }

  Serial.println("Connected to server successfully");
  client.stop();
  delay(5000);}123456789101112131415161718192021222324252627282930

smartconfig.h

#include <WebServer.h>#include <WiFi.h>const char *ssid = "ESP32-AP";const char *password = "";  // 设置为空字符串表示没有密码WebServer server(2024);void handleRoot() {
  server.send(200, "text/html", "<h1>ESP32 WiFi配网</h1><p>请输入您的WiFi名称和密码</p><form action='/connect' method='post'><label for='ssid'>WiFi名称:</label><input type='text' id='ssid' name='ssid'><br><label for='password'>WiFi密码:</label><input type='password' id='password' name='password'><br><input type='submit' value='连接'></form>");}void handleConnect() {
  String ssid = server.arg("ssid");
  String password = server.arg("password");
  if (ssid != "" && password != "") {
    uint8_t count = 0;
    WiFi.begin(ssid.c_str(), password.c_str());
    while (WiFi.status() != WL_CONNECTED) {
      count++;
      Serial.println("Connecting to WiFi...");
      server.send(200, "text/html", "<h1>连接中...</h1><p>请稍候,ESP32 正在连接到您的WiFi网络。</p>");
      if (count >= 60) {
        Serial.printf("\r\n-- wifi connect fail! --");
        server.send(400, "text/html", "<h1>错误</h1><p>请输入WiFi名称和密码。</p>");
        ESP.restart();  // 执行软件重启
      }
      delay(200);
    }
    Serial.println("Connected to WiFi");
    server.send(200, "text/html", "<h1>连接成功</h1><p>请断开网络。</p>");
  }}void smartConfig() {
  // WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);
  IPAddress IP = IPAddress(192, 168, 33, 33);
  IPAddress gateway(192, 168, 33, 1);
  IPAddress subnet(255, 255, 255, 0);
  WiFi.softAPConfig(IP, gateway, subnet);
  server.on("/", HTTP_GET, handleRoot);
  server.on("/connect", HTTP_POST, handleConnect);
  server.begin();
  Serial.println("WiFi热点已启动");
  while (WiFi.status() != WL_CONNECTED) {
    server.handleClient();
  }}//自动配网函数,成功配对以后设备会记忆密码,通电自动连接bool AutoConfig() {
  WiFi.mode(WIFI_AP_STA);
  WiFi.begin();
  //如果觉得时间太长可改
  for (int i = 0; i < 20; i++) {
    int wstatus = WiFi.status();
    if (wstatus == WL_CONNECTED) {
      Serial.println("WIFI SmartConfig Success");
      Serial.printf("SSID:%s", WiFi.SSID().c_str());
      Serial.printf(", PSW:%s\r\n", WiFi.psk().c_str());
      Serial.print("LocalIP:");
      Serial.print(WiFi.localIP());
      Serial.print(" ,GateIP:");
      Serial.println(WiFi.gatewayIP());
      return true;
    } else {
      Serial.print("WIFI AutoConfig Waiting......");
      Serial.println(wstatus);
      delay(1000);
    }
  }
  Serial.println("WIFI AutoConfig Faild!");
  return false;}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

3.2. 编译上传程序

在Arduino IDE中选择正确的ESP32开发板型号和端口,点击“上传”按钮将程序烧录至ESP32。

3.3. 进行手动配网

  • 连接ESP32热点:打开手机或电脑的WiFi设置,找到名为“ESP32-AP”的热点并连接(初始密码通常为空)。

  • 访问配网页面:在浏览器中输入http://192.168.33.33:2024,访问ESP32提供的配网页面。

    填写WiFi信息:在页面上分别输入您家庭WiFi的名称(SSID)和密码,然后点击“连接”按钮。

  • 确认配网结果:如果配网成功,浏览器将显示“连接成功,请断开网络”。这时,请断开与ESP32热点的连接,让ESP32自动连接到您的家庭WiFi。

注意:wifi和密码不能是中文并且不能太长,合起来不能超过20字符

4. BLE无线配网

BLE无线配网是通过esp32通过开启一个低功耗蓝牙模式,用户采用蓝牙调试app连接后输入要连接的热点信息,检查无误后发送连接,下次启动可以自动连接之前连过的wifi。

4.1. 准备工作**

确保ESP32开发板已连接至电脑,且Arduino IDE已安装所需库(如WiFi.hWebServer.hBLEDevice.h等)。将教程提供的第二份代码复制粘贴到IDE中。

4.2. 编译上传程序

在Arduino IDE中选择正确的ESP32开发板型号和端口,点击“上传”按钮将程序烧录至ESP32。

4.3. 使用手机APP进行无线配网

  • 连接ESP32 BLE设备:打开支持BLE功能的手机,安装并打开一个蓝牙调试的APP(如自开发APP或第三方智能家居APP)。在APP中搜索并连接名为“ESP32 BLE”的设备。

  • 输入WiFi信息:在APP中依次填入您家庭WiFi的名称(SSID)和密码iQOO:12345678,然后点击“发送”或类似按钮,将信息通过BLE发送至ESP32。

  • 确认配网结果:ESP32接收到WiFi信息后,将尝试连接指定的WiFi网络。连接成功后,ESP32会通过BLE发送“ success”消息给APP。

  • 5. 总结

现在,我们在本教程中,您已学会如何使用Web服务器手动配网或利用BLE无线配网为ESP32连接家庭WiFi。从而实现对外部世界进行感知,充分认识这个有机与无机的环境,后期会持续分享esp32跑freertos实用案列科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。

如果你有任何问题,可以通过下面的二维码加入鹏鹏小分队,期待与你思维的碰撞