Files

43 lines
5.0 KiB
Markdown
Raw Permalink Normal View History

# EchoEar 重新联网与配网检查
日期:2026-09-30。当前小程序:`C:\Users\19926\WeChatProjects\voicelink`。
## 出门后更换网络
1. 准备有互联网的 2.4 GHz WPA2 Wi-Fi,或手机的 2.4 GHz 热点。热点和路由器密码需 8–63 位可打印 ASCII;设备不支持本流程下的开放网络、需要网页认证的公共 Wi-Fi 或仅 5 GHz 网络。
2. 长按**设备触摸屏底部中央 3 秒**,看到蓝牙配网提示后松手。固件触摸区域为 x=60–300、y=280–335;这是屏幕操作,不是电源键。语音未就绪时双击也能开启,语音就绪时双击会发起聊天,因此界面统一提示长按。
3. 登录原来的小程序账号,在“设备 → 设备管理 → 重新配网”打开操作页。开启手机蓝牙和微信蓝牙权限,搜索并选择该设备;当前固件广播名称为 `vl-ECHOEAR-S3-xxxxxxxx`,这台 COM6 为 `vl-ECHOEAR-S3-26091601`。
4. 填新 Wi-Fi 名称和密码,发送后在 **60 秒内轻点设备屏幕确认**。`received` 仅表示收到了信息。
5. 等小程序显示 `Wi-Fi 已更新` / 设备状态 `success`,设备约 15 秒后重启。仅修改 Wi-Fi 时蓝牙断开不能单独作为成功证据;应回设备页确认实时在线及固件版本。
已绑定设备发送空 `bind_token`,设备调用只读 `/api/v1/device/ble-state` 核对仍有有效绑定,再保存新 Wi-Fi。不会解绑、创建新归属、删除历史聊天或清除工厂身份。检查前不要使用“恢复出厂”或“解除绑定”操作。
## 自动恢复规则
| 场景 | 当前行为 |
| --- | --- |
| 正常运行时 Wi-Fi 短暂掉线 | 快速重连 5 次,随后每 10 秒继续尝试;取得 IP 后清掉失败标记和重试计数。 |
| 开机旧 Wi-Fi 不可用,且有 BLE 工厂身份 | 正常联网等待最多 30 秒(扫描另有耗时)后,记录配网请求并重启进入 BLE;不会回到旧的 192.168.4.1 热点流程。 |
| 已完成 v2 配网,手动/自动进入 BLE 后未确认新任务 | 5 分钟窗口结束停止广播;检查没有持久化待执行任务后清配网请求,重启连接旧 Wi-Fi。旧 Wi-Fi 仍不可用则再次进入 BLE。 |
| 已收到新 Wi-Fi,但 60 秒内没有轻点确认 | 标记确认超时,可重新发送;窗口结束后可按上行规则回到旧 Wi-Fi。 |
| 已实体确认并持久化,Wi-Fi/平台调用仍处理中 | 保留任务继续恢复/重试;窗口结束不会清除已确认操作或绑定凭据。 |
| 首次配网,没有完成记录或保存的旧 Wi-Fi | 窗口结束后不会凭空恢复网络;长按底部中央 3 秒重新开启。 |
| 传统设备没有 BLE 工厂身份 | 保留原有 Wi-Fi 热点配网页兼容流程。 |
已确认任务在平台超时、429 或服务器异常时保留相同任务继续重试。处于 `binding` 时不要把断线当成功;如果新网络没有互联网,应先恢复该网络的互联网连接。当前任务没有通用取消入口。
## 本次修复与验证
- 修复普通运行断网重试耗尽后永久离线;恢复 IP 清除过期失败状态。
- 修复已完成 BLE 配网的设备去新地点开机时落入旧热点配网页,改成与小程序一致的 BLE 流程。
- 修复 BLE 超时后一直留在配网模式,导致保存的原网络无法恢复;关闭广告只做一次,避免每秒重复调用 stop。
- 修复确认过期后 `received` 状态吞掉短触摸,造成窗口到期无法双击重开的情况。
- 修复 BLE 服务初始化失败后误继续普通 Wi-Fi 初始化,避免两个模块重复持有 STA。
- 网页与当前小程序提示改成真实可用的屏幕底部中央长按入口。
- 新测试 `tests/network-reconnect-host.cjs` 编译完整生产 `network.c`,覆盖连续 25 次重连、BSSID 回退、延迟回调、IP 恢复、驱动停止防护、BLE/传统 AP 启动分流、旧凭据保留和存储失败。
- 新测试 `tests/ble-timeout-host.cjs` 运行生产确认/超时恢复函数,覆盖无人确认后回旧 Wi-Fi、持久化任务保护、首次配网保护、存储失败、处理中状态及仅重启一次。
- 上述真实 C 测试与原有 plaintext endpoint、22 项 BLE Wi-Fi 生命周期测试,在隔离 `/tmp` 内经 GCC AddressSanitizer / UndefinedBehaviorSanitizer 通过。
- 当前 voicelink 小程序家庭端微信一键登录改造后 140 项测试通过;9 个原生页面、事件处理、路由以及 WXML/WXSS 编译通过。源代码已修改,本次未上传发布小程序。
这些测试验证代码行为;本机现已通过真实无线 OTA 运行 `controls.22`,实物自动恢复保存的 Wi-Fi 并实时在线。接收容量优化仅将运行时动态 Wi-Fi 接收缓存改为 32、TCP 接收队列改为 24,原配网和重连规则保持不变,最终版本的联网/BLE 回归再次通过。真实手机热点切换仍未验收;真实 OTA 结果以 [远程升级记录](device-remote-ota-20260930.md) 为准。重新配网需要手机在设备附近通过蓝牙操作;云端“重新配网”入口不会远程打开蓝牙,也不能向离线设备直接写入陌生 Wi-Fi。