☰
ESP32 WiFi连接与IP地址获取教程
2026/11/1 4:25:18 网站建设 项目流程

1. 项目概述:ESP32 WiFi连接与IP地址打印

这个实验将带你用Arduino IDE完成ESP32的基础WiFi连接功能,并通过串口监视器打印获取到的IP地址。作为物联网开发中最基础的"Hello World"级项目,它能帮你快速验证开发环境配置是否正确,同时掌握ESP32连接WiFi网络的核心流程。

我经常建议新手从这个实验开始ESP32的学习,因为它:

  • 只需基础硬件(ESP32开发板+数据线)
  • 包含完整的网络连接流程
  • 通过串口输出直观反馈连接状态
  • 代码结构简单但包含关键要素
  • 为后续Web服务器、MQTT等应用打下基础

2. 硬件准备与环境搭建

2.1 所需硬件清单

  • ESP32开发板(推荐ESP32-DevKitC)
  • Micro USB数据线
  • 电脑(Windows/Mac/Linux均可)

注意:某些ESP32开发板需要手动安装USB转串口芯片驱动(如CH340),若设备管理器中出现未知设备,需先安装对应驱动。

2.2 软件环境配置

  1. 安装Arduino IDE:从官网下载最新版本(建议2.3.x)

  2. 添加ESP32支持:

    • 文件→首选项→附加开发板管理器网址添加:
      https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
    • 工具→开发板→开发板管理器→搜索"esp32"→安装
  3. 选择开发板型号:

    • 工具→开发板→ESP32 Arduino→选择"ESP32 Dev Module"
    • 端口选择对应的COM口(插入ESP32后出现)

3. 核心代码解析

3.1 完整代码实现

#include <WiFi.h> const char* ssid = "Your_WiFi_SSID"; // 替换为你的WiFi名称 const char* password = "Your_WiFi_Pass"; // 替换为你的WiFi密码 void setup() { Serial.begin(115200); delay(1000); // 等待串口初始化 WiFi.begin(ssid, password); Serial.println("\nConnecting to WiFi..."); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nConnected to WiFi!"); Serial.print("IP Address: "); Serial.println(WiFi.localIP()); } void loop() { // 保持连接状态 if (WiFi.status() != WL_CONNECTED) { Serial.println("WiFi disconnected!"); ESP.restart(); } delay(3000); }

3.2 关键代码段解析

  1. WiFi库引入:

    #include <WiFi.h>

    ESP32-Arduino核心库已内置WiFi支持,无需额外安装。

  2. 连接初始化:

    WiFi.begin(ssid, password);

    启动STA模式连接指定WiFi,需确保:

    • 2.4GHz网络(ESP32不支持5GHz)
    • 非企业级加密网络(如WPA2-Personal)
  3. 连接状态检测:

    while (WiFi.status() != WL_CONNECTED)

    WiFi.status()返回连接状态,常见返回值:

    • WL_CONNECTED:连接成功
    • WL_NO_SSID_AVAIL:SSID不可用
    • WL_CONNECT_FAILED:密码错误
    • WL_IDLE_STATUS:正在处理
  4. IP地址获取:

    WiFi.localIP()

    返回ESP32在局域网内的IPv4地址,格式为IPAddress对象。

4. 实操步骤详解

4.1 代码上传流程

  1. 复制完整代码到Arduino IDE
  2. 修改ssid和password为你的WiFi凭证
  3. 点击"验证"编译代码(Ctrl+R)
  4. 连接开发板,选择正确端口
  5. 点击"上传"(Ctrl+U)

注意:上传时需按住BOOT按钮(部分型号需要),直到出现"Hard resetting..."提示。

4.2 串口监视器使用

  1. 上传完成后打开串口监视器(Ctrl+Shift+M)
  2. 设置波特率为115200
  3. 观察输出日志:
    Connecting to WiFi... .... Connected to WiFi! IP Address: 192.168.1.100

4.3 常见问题排查

  1. 无法连接WiFi:

    • 检查SSID/密码是否正确
    • 确保路由器未开启MAC过滤
    • 尝试重置路由器
  2. IP地址显示0.0.0.0:

    • 检查路由器DHCP服务是否开启
    • 确认WiFi.status()返回WL_CONNECTED
  3. 频繁断开连接:

    • 添加外接电源(USB供电可能不足)
    • 调整代码中的重连机制

5. 进阶应用方向

5.1 添加重连机制

void reconnectWiFi() { if (WiFi.status() == WL_CONNECTED) return; Serial.println("Reconnecting..."); WiFi.disconnect(); WiFi.begin(ssid, password); int retries = 0; while (WiFi.status() != WL_CONNECTED && retries < 10) { delay(500); Serial.print("."); retries++; } if (WiFi.status() == WL_CONNECTED) { Serial.println("\nReconnected!"); } else { Serial.println("\nFailed to reconnect"); } }

5.2 多网络配置

const char* ssids[] = {"Home_WiFi", "Office_WiFi"}; const char* passwords[] = {"home123", "office456"}; void connectMultiWiFi() { for (int i = 0; i < 2; i++) { WiFi.begin(ssids[i], passwords[i]); Serial.printf("Trying %s...\n", ssids[i]); int retry = 0; while (retry < 10 && WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); retry++; } if (WiFi.status() == WL_CONNECTED) break; } }

5.3 信号强度检测

void checkRSSI() { long rssi = WiFi.RSSI(); Serial.print("Signal strength: "); Serial.print(rssi); Serial.println(" dBm"); if (rssi > -50) { Serial.println("Excellent signal"); } else if (rssi > -60) { Serial.println("Good signal"); } else if (rssi > -70) { Serial.println("Fair signal"); } else { Serial.println("Weak signal"); } }

6. 项目优化建议

6.1 添加LED状态指示

#define WIFI_LED 2 // ESP32内置LED通常接GPIO2 void setup() { pinMode(WIFI_LED, OUTPUT); // ...其他初始化代码 } void loop() { if (WiFi.status() == WL_CONNECTED) { digitalWrite(WIFI_LED, HIGH); } else { digitalWrite(WIFI_LED, LOW); } // ...其他代码 }

6.2 保存WiFi配置

使用Preferences库保存网络配置:

#include <Preferences.h> Preferences prefs; void saveWiFiConfig() { prefs.begin("wifi-config"); prefs.putString("ssid", ssid); prefs.putString("password", password); prefs.end(); } void loadWiFiConfig() { prefs.begin("wifi-config"); ssid = prefs.getString("ssid", ""); password = prefs.getString("password", ""); prefs.end(); }

6.3 添加Web配置界面

结合WebServer库创建配网页面:

#include <WebServer.h> WebServer server(80); void handleRoot() { String html = "<form action='/save'>" "SSID: <input type='text' name='ssid'><br>" "Password: <input type='password' name='pass'><br>" "<input type='submit' value='Save'>" "</form>"; server.send(200, "text/html", html); } void handleSave() { ssid = server.arg("ssid"); password = server.arg("pass"); server.send(200, "text/plain", "Credentials saved"); WiFi.begin(ssid.c_str(), password.c_str()); }

7. 实际应用案例

7.1 智能家居设备

通过IP地址实现:

  • 手机APP控制
  • 定时任务设置
  • 状态监控

7.2 工业传感器节点

  • 定时上报数据到服务器
  • 远程配置采集参数
  • 固件OTA升级

7.3 教学演示系统

  • 网络通信原理展示
  • IoT开发入门教学
  • 协议分析实验

经验分享:在实际项目中,建议将WiFi连接模块封装成独立类,方便不同项目复用。同时添加配网超时、低功耗模式等生产级功能。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询