学习笔记 · Obsidian

从 Wi-Fi 到 HTTPS:一步一步判断联网状态

ESP-IDFC / C++

协议层次先摆正

业务:采样上报、配置读取、设备命令
应用协议:HTTPS / MQTT / WebSocket(按场景选择)
安全与传输:TLS(需要时) / TCP(本路线所用方式)
网络:IP
接入:Wi-Fi

这张图限定本课程常用的 TCP 通信方式,不描述所有 HTTP 或物联网传输变体。BLE 通常从广播、连接、GATT 服务和特征值学习,是独立分支;不能把 BLE 当成 MQTT 必须经过的一层。ESP32-S3 的蓝牙方向是 BLE,不能假定支持经典蓝牙 SPP。ESP32-S3 入门能力说明

“已联网”要拆成多个状态

状态证据此时不能推断什么
正在连 Wi-Fi发起连接尚未与 AP 建链
Wi-Fi 已连接WIFI_EVENT_STA_CONNECTED不代表已经拿到 IP
IP 就绪IP_EVENT_STA_GOT_IP不代表域名解析和服务可达
HTTPS 交互成功TLS 校验、HTTP 状态与响应完整不代表业务一定接受了请求
业务成功校验业务响应字段才可按约定更新设备业务状态

Wi-Fi 事件与获得 IP 的处理顺序见 ESP-IDF Wi-Fi Driver。表中的服务和业务状态是本学习项目进一步拆分的设计。

第一个 Java 接口只做一件事

先设计一个尚未实现的练习接口 POST /api/lab/devices/{deviceId}/telemetry,接收一条人工采样,返回是否接受及服务端接收时间。正式集成前再与实际后端契约对齐。

设备端工作顺序:等待网络就绪,构造有大小上限的 JSON,发请求,检查状态码,按长度读取响应,最后释放请求资源。TLS 校验应信任正确 CA 并校验主机名;证书有效期检查还依赖合理的设备时间。ESP HTTP Client

localhost 在设备上指设备自己。访问 Mac 上的服务,要使用设备能够路由到的地址,并检查服务监听地址、同网段/路由和防火墙。

错误恢复是应用状态机

本项目建议把错误分成:无网络、DNS/TLS 失败、超时、服务拒绝、响应不合法。每类给出可观察状态,避免统一显示“请求失败”。

临时连接失败可用带抖动和上限的退避重试;认证失败先修正凭据或配置,不能高速无限重连。断线后清理失效会话,拿到新 IP 后按状态重建连接。事件回调只推进状态或投递工作,不在其中等待长 HTTP 请求。

重复上报使用应用层唯一键去重,例如本课程草案中的 deviceId + bootId + sequence。网络超时只表示没有收到确定结果,不能推断服务器没处理。

数据字段先定义单位与有效性

练习 JSON 建议包含 schemaVersion、bootId、sequence、uptimeMs、value、valid。value 的测量单位由具体传感器契约定义;失败时允许缺省/空值,并保持 valid=false,不要虚构读数。

uptimeMs 是开机经过时长,不是世界时间。没有校准时钟时,服务端记录接收时间;不能把开机秒数当 Unix 时间写进数据库。

验收场景

  • 正常请求:设备与服务端能对应同一次上报。
  • Wi-Fi 断开、恢复:显示断线状态,恢复后再上报,UI 继续响应。
  • 服务超时或返回 500:重试有上限/退避,内存没有持续下降。
  • 返回 401、错误 JSON、超长响应:分类处理,不进入成功状态。
  • 相同请求重发:服务端去重结果明确。

这些都是待执行实验;本文没有建立服务器或连接任何实际云服务。


返回学习入口 · 来源与版本