CHAPTER 13 / FIELD GUIDE
联网与保存配置
先连通、再服务,最后考虑持久化。
联网先学分层定位
连接接入点、获得 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 会不断抖动,这会产生大量无意义写入。可以在用户确认保存或停止调整一段时间后,再比较新旧值并写入。
本章验收
本章一手资料
卡住时可以直接向我提问:附上章节号、工程名、接线和第一条错误日志。