绑定到账户¶
绑定是一次性的过程:设备获得一次性绑定令牌,在门户上用它换取永久密钥,并把密钥保存到 NVS。此后每次重启都会自行连接门户。没有密钥时,设备处于设置模式并等待令牌。
在 iDryer 应用中¶
- 设备已在网络中(见 Wi-Fi),手机在同一网络。
- 连接新设备 → 绑定 步骤(如果设备已经在网络中,点击窗口顶部该步骤的标签)→ 绑定。
- 应用在局域网中找到设备,从门户获取令牌交给设备,并等待门户确认设备已上线。
- 显示 设备已绑定 后,设备出现在门户和应用的列表中。
绑定前的日志:
[BOOT] WiFi ok, logs enabled
[INFO ] CLOUD: WiFi connected, IP: 192.168.1.42, RSSI: -55 dBm, …
…
[INFO ] CLOUD: binding-v3: no secret — awaiting pairing token (SETUP)
绑定后:
[INFO ] CLOUD: binding-v3: pairing token received (… chars)
[INFO ] CLOUD: binding-v3: activating with pairing token (serial=DEVICE_… mcu=-)
[INFO ] CLOUD: binding-v3: activated, deviceId=… -> Ready
…
[INFO ] MQTT: Connected! …
固件的网页安装器通过 USB 用 PAIR_TOKEN 命令传递令牌(见下文)。
解绑¶
在应用或门户中解绑时,设备会收到 revoke 命令。每个固件都需要这个处理函数:
// 在应用或门户中解绑:清除密钥,等待新的绑定。
s_link.onCommand("revoke", [](JsonObjectConst) { s_link.handleRevoke(); });
handleRevoke() 清除密钥并保留网络:设备重新等待绑定。没有处理函数时密钥会留在设备中,只有执行 WIPE_IDENTITY 之后才能重新绑定。
USB 命令¶
连上网络后,核心在串口上接收命令行(115200,每行以换行结束):
| 命令 | 回复 | 作用 |
|---|---|---|
STATUS |
STATUS:state=… wifi=… ip=… cloud=… serial=… mcu=… fw=… part=… |
状态:state 为 bound(已绑定)或 setup(等待令牌),cloud 为 online/offline |
WIPE_IDENTITY |
WIPE_IDENTITY:OK |
像 revoke 一样清除密钥;网络保留 |
PAIR_TOKEN:<令牌> |
PAIR_TOKEN:OK、PAIR_TOKEN:ERROR、PAIR_TOKEN:ERROR:ALREADY_BOUND |
传入绑定令牌;已绑定的设备不接受 |
STATUS
STATUS:state=setup wifi=1 ip=192.168.1.42 cloud=offline serial=DEVICE_… mcu=- fw=0.1.0 part=…
连上网络之前端口被 Improv 占用,命令没有回复。在带 IDRYER_DEV_REPL 的构建中,端口归产品使用,这些命令不存在:见 详细设置。
如果没有成功¶
- 应用找不到设备:手机和设备要在同一网络;访客网络经常阻止设备发现;
- 出现
PAIR_TOKEN:ERROR:ALREADY_BOUND,或设备属于另一个账户:在门户上解绑,或发送WIPE_IDENTITY后重新绑定。
下一步¶
遥测。