CHAPTER 13 / FIELD GUIDE

联网与保存配置

先连通、再服务,最后考虑持久化。

建议用时 60–90 分钟先预测,再实验,再解释

联网先学分层定位

连接接入点、获得 IP、连接服务器、应用协议成功是不同阶段。S3 的 Wi-Fi 使用 2.4 GHz;确认路由器提供兼容网络。不要把“Wi-Fi 已连接”当成“HTTP 请求必然成功”。

使用固定版本的官方完整工程

联网涉及事件注册和多个初始化步骤,直接从安装目录中随版本提供的完整例程开始,避免复制不完整的回调片段。下面给出 macOS/Linux 操作;Windows 在文件管理器中复制同名目录,再在 ESP-IDF 终端中执行后续 idf.py 命令。

# 先激活 ESP-IDF;确认当前目录下没有要覆盖的同名文件夹
mkdir -p ~/esp-labs
cp -R "$IDF_PATH/examples/wifi/getting_started/station" ~/esp-labs/wifi_station
cd ~/esp-labs/wifi_station
idf.py set-target esp32s3
idf.py menuconfig
# Example Configuration 中配置 SSID 与密码
idf.py build
idf.py -p YOUR_PORT flash monitor

验收:日志中出现获得 IP 的事件。关闭路由器再打开,观察例程的重试行为;它可能有重试次数上限。把“断线后最终放弃”和“持续退避重试”区分开,按实际产品需要修改。

第二个实验:HTTP 服务

cp -R "$IDF_PATH/examples/protocols/http_server/simple" ~/esp-labs/http_simple
cd ~/esp-labs/http_simple
idf.py set-target esp32s3
idf.py menuconfig
# 按该工程 README 配置 Wi-Fi 连接
idf.py build
idf.py -p YOUR_PORT flash monitor

电脑或手机连同一局域网,从日志读取设备 IP,在浏览器访问 http://设备IP/hello。若路由器启用访客隔离,客户端可能互相无法访问。先确认官方示例响应,再把响应改成一个固定的设备状态字段;不要一开始就在 HTTP 回调里直接控制电机。

NVS:只在需要时写配置

用官方 examples/storage/nvs/nvs_rw_value 做掉电保存实验,复制到新目录后采用同样的构建流程。理解初始化、打开命名空间、读取、设置、提交和关闭的顺序。设置值后需要 commit;读取不到键时提供默认值。不要为每个 ADC 样本写 Flash。

// API 顺序示意,不是可独立编译的工程
nvs_flash_init();
nvs_open("settings", NVS_READWRITE, &handle);
nvs_get_i32(handle, "brightness", &value); // 不存在时走默认值
nvs_set_i32(handle, "brightness", value);
nvs_commit(handle);
nvs_close(handle);
停下来想一想

为什么不在旋钮每变化一次时立即保存配置?

查看推导与答案

旋钮与 ADC 会不断抖动,这会产生大量无意义写入。可以在用户确认保存或停止调整一段时间后,再比较新旧值并写入。

本章验收

本章一手资料

卡住时可以直接向我提问:附上章节号、工程名、接线和第一条错误日志。