news 2026/9/15 12:30:56

ESP32 上手教程:4 步让节点连上 WiFi,再开远程 OTA 和 2 张选型表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ESP32 上手教程:4 步让节点连上 WiFi,再开远程 OTA 和 2 张选型表

ESP32 上手教程:4 步让节点连上 WiFi,再开远程 OTA 和 2 张选型表

【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32

先做一个小任务:让一块 ESP32 板子上的传感节点连上办公室 WiFi,以后改代码时不用拆板子,把新固件文件发过去就行。本文基于 arduino-esp32(乐鑫官方的 Arduino 核心),读完整篇你能拿走 4 个能直接用的操作:WiFi 稳定连接、分区表选择、OTA 远程更新、深度睡眠省电。

安装核心并跑通第一个示例

第 1 步:在 IDE 首选项里添加开发板管理器网址,再安装 esp32 核心。官方地址以 docs/en/installing.rst 页面为准,装完后开发板管理器能搜到 "esp32"。

第 2 步:板子选 "ESP32 Dev Module",打开 libraries/WiFi/examples/WiFiClientBasic/ 示例,把 SSID 改成你的网络后上传。→ 预期现象:串口监视器先打印 "Connecting to WiFi",随后出现 "Got IP:" 加一个 192.168 网段地址。

第 3 步:在工具菜单核对 Flash Size 与 CPU Frequency,多数 DevKit 用默认的 240MHz / 4MB 即可。 → 预期现象:上传成功,末尾出现 "Hash of data verified"。

看懂核心的分层方式

把芯片想象成一栋公寓:ESP32 内部的 IDF 是水电总闸,cores/esp32/ 里的 HAL 层是物业,把你对 WiFi.begin、analogRead 的调用翻译成芯片寄存器操作,顺带处理内存对齐、中断分发、任务调度。你只管在自己那间屋里写业务逻辑。所以同一份 sketch 只改工具菜单里的板型选项,就能跑在双核的初代 ESP32 和单核的 ESP32-C3 上。

选定板型变体并核对引脚

variants/ 目录下有 300 多个开发板的引脚定义,每个板型一个子目录。选板子之前先对着丝印图核对引脚:

三条经验:

  • 串口 TX/RX 的引脚编号因板而异,先定变体再谈端口。
  • 初代 ESP32 的 GPIO6 到 GPIO11 接在 SPI flash 总线上,不能外接信号。
  • GPIO34 到 GPIO39 只能输入且无上拉,只适合读电平。

给 WiFi 挂上自动重连

现场掉线很常见:AP 重启、信号被墙挡、供电瞬时下陷。重连逻辑不要写进业务层,交给核心。

#include <WiFi.h> const char* ssid = "office-net"; const char* pass = "12345678"; void setup() { Serial.begin(115200); WiFi.setAutoReconnect(true); // 掉线后自动重握手 WiFi.setSleep(false); // 射频不睡眠,时延从几十毫秒降到个位数 WiFi.mode(WIFI_STA); WiFi.begin(ssid, pass); } void loop() { if (WiFi.status() != WL_CONNECTED && millis() > 5000) { WiFi.reconnect(); // 兜底:断开满 5 秒就强制再试一次 delay(2000); } }

易错点:WiFi.begin 要等供电稳定后再调,芯片刚上电的头几秒调用可能直接把 CPU 拉复位;中断服务程序里不要调任何 WiFi 函数。需要多 AP 备份时直接用 WiFiMulti,完整代码在 libraries/WiFi/examples/WiFiMulti/WiFiMulti.ino。

启用 OTA 远程更新

批量部署后不可能挨个拆板子插串口,固件必须能从网络推送。

#include <ArduinoOTA.h> void beginOTA() { ArduinoOTA.setHostname("sensor-node-01"); ArduinoOTA.setPassword("change-me"); ArduinoOTA.onEnd([]() { Serial.println("update finished, rebooting"); ESP.restart(); // 必须重启:otadata 指针切到新固件 }); ArduinoOTA.begin(); }

前提是分区表带 ota 槽位(下面选型表会讲)。完整工程参考 libraries/ArduinoOTA/examples/BasicOTA/BasicOTA.ino。易错点:更新成功后忘了重启,设备继续跑旧固件,看起来就像"升级失败"。

用深度睡眠把电流压下去

电池供电的节点 99% 的时间在睡觉,只有 1% 醒着采样和上传,睡眠电流直接决定电池撑几个月。常用四种模式的量级对比:

模式典型电流唤醒耗时保留状态
活动 + WiFi100-240 mA即时全部
调制解调器睡眠20-30 mA1 ms 内全部
轻度睡眠约 1 mA1 ms 内RTC 内存
深度睡眠10-150 µA约 150 msRTC 内存

想让变量在深睡后还在,得把它放进 RTC 内存区:

#include <esp_sleep.h> RTC_DATA_ATTR uint32_t round = 0; void napUntilButton() { round += 1; // RTC 内存,醒来后仍在 esp_sleep_enable_ext0_wakeup(GPIO_NUM_4, 0); // 4 号脚拉低即唤醒 esp_deep_sleep_start(); }

易错点:RTC 内存区只有约 4KB(初代 ESP32 是 8KB),往里塞大数组会静默溢出;需要保持引脚电平跨睡眠不变时,调用 gpio_hold_en(pin) 再睡。

按需求选分区表

Flash 由分区表切成应用区和数据区,决定了程序能做多大会不会支持 OTA。从工具菜单选方案,或者拿 tools/partitions/ 里的 csv 文件做自定义:

方案应用区约OTA 与数据区适合谁
default1 MB双 ota 槽 + spiffs常规 sketch
huge_app3 MB无 ota,spiffs 更大大体积程序、不做远程升级
app3M_fat9M_16MB3 MBfatfs,需 16MB flash要存图片或语音

判断口径就一句:要 OTA 就别选没有 ota 槽的方案;程序超过 1MB 就换 huge_app 或更大容量方案,同时放弃 OTA 或加 flash。

高频问题现场急救

  1. 现象:上传时端口列表里没有串口,或卡在 "Connecting..."。 根因:USB 转串口芯片驱动没装,或芯片没进下载模式。 处理:先装驱动;仍不行就按住 BOOT 轻触 RST,连上后再松开 BOOT。
  2. 现象:WiFi 连上几秒后打印 IP,随后频繁掉线。 根因:供电扛不住发射电流,WiFi 发射峰值能到 300 mA 左右。 处理:电源换 5V/1A,VCC 并一颗 100 µF 电容;还不稳就调 WiFi.setSleep(true),用少量时延换电流。
  3. 现象:OTA 显示 100%,设备还是跑旧固件。 根因:更新后没重启,otadata 指针没切过去。 处理:onEnd 回调里加 ESP.restart();再确认所选分区方案带两个 ota 槽。
  4. 现象:深度睡眠醒来后,RTC 变量读到 0。 根因:变量没放进 RTC 内存段,或整段 RTC 内存被写满。 处理:补上 RTC_DATA_ATTR;RTC 变量总量控制在约 4KB 以内。

把下一个节点跑起来

整套流程一句话:变体选对、分区表选对,联网、升级、省电就都落在几行配置里。下一步动作:打开 libraries/WiFi/examples/,挑一个最贴近你项目的场景,比如 WiFiScan 或 WiFiClientStaticIP,替换 SSID 后编译上传,10 分钟内你能看到自己的节点出现在路由器的设备列表里。

【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 12:30:30

甘肃网站建设开发app避坑指南:3大方案实测告诉你别交智商税

甘肃网站建设开发app避坑指南:3大方案实测告诉你别交智商税 别再说“我的网站不够用”了,真相是:你买的那个998元的模板,从第一天起就注定要返工。 很多甘肃的朋友问我,为什么花了几千块做的网站,客户看了摇头,自己看着也难受?因为模板网站太丑且功能僵化,根本撑不起现在复杂的业务需求。…

作者头像 李华
网站建设 2026/9/15 12:30:18

iOS开发第一课:从Hello World到真机部署全解析

1. 从“Hello World”到真机运行&#xff1a;一个iOS新手真正该踩的第一道门槛 你打开Xcode&#xff0c;新建项目&#xff0c;选中“App”&#xff0c;填好Product Name&#xff0c;点击Create——然后盯着空白的 ContentView.swift 发呆。旁边教程写着“输入 Text("H…

作者头像 李华
网站建设 2026/9/15 12:28:32

黑群晖系统分区已损毁修复全攻略:二合一镜像手动救援

上周末我正往家里那台NAS里导照片&#xff0c;群晖的连接突然全部断掉&#xff0c;网页管理和SMB共享一瞬间全部没反应。强制断电再开机之后&#xff0c;Synology Assistant倒是把设备搜出来了&#xff0c;但设备状态栏明晃晃写着“已损毁”。这台机器用的是典型的“二合一”镜…

作者头像 李华
网站建设 2026/9/15 12:28:19

Filestash 如何接入 Syncthing 后端以只读方式浏览同步文件夹

Filestash 如何接入 Syncthing 后端以只读方式浏览同步文件夹 【免费下载链接】filestash :file_folder: Universal File Storage Client 项目地址: https://gitcode.com/GitHub_Trending/fi/filestash Filestash 的存储后端列表里内置了一个 Syncthing 插件&#xff08…

作者头像 李华
网站建设 2026/9/15 12:27:08

2026年AI降噪工具在继续教育中的核心应用与选型指南

1. 为什么2026年继续教育必须关注AI降噪工具&#xff1f;在信息爆炸的时代&#xff0c;继续教育从业者正面临前所未有的知识过载挑战。根据LinkedIn 2025年度学习报告显示&#xff0c;73%的专业人士表示在线上学习时难以集中注意力&#xff0c;主要原因来自各类AI生成内容的干扰…

作者头像 李华