ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/9/15 12:31:05 拓冰建站 浏览量
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常规 sketchhuge_app3 MB无 otaspiffs 更大大体积程序、不做远程升级app3M_fat9M_16MB3 MBfatfs需 16MB flash要存图片或语音判断口径就一句要 OTA 就别选没有 ota 槽的方案程序超过 1MB 就换 huge_app 或更大容量方案同时放弃 OTA 或加 flash。高频问题现场急救现象上传时端口列表里没有串口或卡在 Connecting...。 根因USB 转串口芯片驱动没装或芯片没进下载模式。 处理先装驱动仍不行就按住 BOOT 轻触 RST连上后再松开 BOOT。现象WiFi 连上几秒后打印 IP随后频繁掉线。 根因供电扛不住发射电流WiFi 发射峰值能到 300 mA 左右。 处理电源换 5V/1AVCC 并一颗 100 µF 电容还不稳就调 WiFi.setSleep(true)用少量时延换电流。现象OTA 显示 100%设备还是跑旧固件。 根因更新后没重启otadata 指针没切过去。 处理onEnd 回调里加 ESP.restart()再确认所选分区方案带两个 ota 槽。现象深度睡眠醒来后RTC 变量读到 0。 根因变量没放进 RTC 内存段或整段 RTC 内存被写满。 处理补上 RTC_DATA_ATTRRTC 变量总量控制在约 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),仅供参考