开发日志
智能手表项目开发日志 004:NFC 和语音,让设备不只靠按键操作
记录基于 NT3H/NDEF 的 NFC 门禁原型和基于 SU-03T 的语音控制链路,重点说明两种交互如何接入统一事件模型。
门禁功能先从 NFC 记录写入开始
项目资料中把 NFC 设计成“碰一碰”的门禁入口。设备端通过 NT3H 芯片访问 NFC 标签存储区,使用 NDEF 格式组合文本记录和 URI 记录。门禁 1 写入 door1,门禁 2 写入 door2,随后再写入网页地址,手机碰触后可以跳转到对应页面。
代码中 nfc_store_text() 和 nfc_store_uri_http() 分别封装了文本和 URI 写入,nfcForum.c 负责组织 NDEF 头部、类型字段和负载。业务层只需要在门禁状态切换时调用这些接口,不必关心底层记录格式。
NFC 原型和正式门禁不是一回事
当前代码使用了示例网页地址,功能重点是验证芯片初始化、NDEF 组包和写入流程。它证明了 NFC 的交互入口能够工作,但还不能直接等同于安全门禁。
正式方案至少需要加入设备身份绑定、权限校验、令牌失效、重放防护和服务端审计。网页跳转可以作为信息展示或授权入口,不能仅凭一个固定 URI 就决定用户是否能够开门。
语音模块通过串口接入事件系统
SU-03T 模块使用 UART2,配置为 115200 波特率、8 位数据、无校验、1 位停止位。模块返回命令后,su_03t_thread 读取前两个字节并组合成 16 位命令码,然后封装为 event_su03t 事件发送到系统事件队列。
业务层收到事件后,可以执行三类动作:切换运动状态、切换门禁状态,以及查询温度、时间和步数。查询结果再通过约定格式回传给语音模块。数据发送函数在报文前后加入固定帧头和帧尾,并用索引区分返回数据的类型。
统一事件比直接改状态更重要
按键、云端和语音是三种不同的输入方式。如果每种输入都直接修改全局变量,系统很快会出现状态不一致:屏幕显示改了,NFC 没初始化;云端显示改了,设备本地没有同步。
当前设计把输入先转换为事件,再由 smart_home_iot_cmd_process() 和 smart_home_su03t_cmd_process() 统一处理。这样运动、门禁和开关状态的修改路径更集中,LCD 刷新、NFC 初始化和语音反馈也更容易保持一致。
阶段结果
这一阶段完成了两种非按键交互的原型验证:NFC 负责非接触式信息和门禁入口,语音模块负责自然语言触发的设备控制与数据查询。后续如果要继续完善,应优先把 NFC 的安全模型和语音命令的容错处理补齐,再接入云端和手机端的远程控制。