前言
我最近正在研究 COAP 协议,也搬运了一个 (转)RFC7252-《受限应用协议》中文版 (COAP协议) COAP协议的文档,翻译得很不错,示例也很清晰,非常推荐大家去学习学习。
我发现我很多的传感器设备(比如我的光照传感器)很多时候其实没有什么数据交互,大部分都是 SDDC 维持连接的消耗,这类传感器设备其实不需要这么高的实时性,完全没必要去维持一个长连接,这种纯传感器设备更加适合 COAP 协议, COAP 协议数据发完就可以休眠了,功耗更低,更容易做低功耗。
最近恰好发现爱智似乎也支持 COAP,在他们官网看到了 IoT Pi CoAP 设备开发 教程,之前一直是用SDDC协议连接精灵一号,今天就尝试跟着官方教程通过 COAP 连接精灵一号。
获取 CoAP 组件
官方使用的 IOT PI 正好我手里也有一个,不过对应的COAP库好像不能直接构建,需要单独去下载 官方的 git 连接好像有问题,没办法 clone 下来,我这边分享一下我用的:
https://github.com/ms-rtos/libcoap.git
亲测有效!
我之前就构筑过 IOT PI 的BASE和BSP 了,详细可以去看我的初识 IOT Pi 与 MS-RTOS 和 从零开始的DIY智能家居- 基于 IOT Pi 的智能甲醛检测器 好像可以直接用,不需要重新去构筑了,只需要将 获取到的 libcoap 文件夹放入 base 根目录即可:
然后在 IoT Studio 目录刷新一下即可刷出:
之后需要修改 bspstm32f4xx/src/board/IOT_PI/iot_pi_init.h 文件,在这个文件中设定了 IoT Pi 开发板开机时会创建进程启用 0x08040000 地址处的程序,修改自启动进程名字,具体代码如下:
ms_process_create("iotpi_coap", (ms_addr_t)0x08040000, 65536, 4096, 9, 0 , 0, MS_NULL, MS_NULL, MS_NULL);
之后重新编译 BASE 和 BSP 即可。
烧写镜像
使用 MS-RTOS AutoTester 烧写镜像,请参考 《IoT Pi 快速入门》 完成 bspiotpi.bin 和 coap_server_example.bin 镜像烧写,注意不同的镜像需要烧写到不同的地址,如下表所示:
镜像 | 烧写地址 |
---|---|
bspiotpi.bin | 0x08000000 |
coap_server_example.bin | 0x08040000 |
启动 CoAP Server
按下 IoT Pi 开发板的 RESET 按键或者点击 MS-RTOS Auto Tester GO 按钮启动板子:
MS-RTOS 操作系统启动后,
将自动运行 0x08040000 地址处的 CoAP Server 程序,在 MS-RTOS Auto Tester Input 窗口输入 ps 命令查看进程的信息:
看到这个 iot_coap 的就说明我们的 COAP 起来了
验证功能
又到了令人蛋疼的时刻,和 SDDC 一样
爱智官方没有提供调试工具!
麻了啊!之后找时间弄一个吧。
现在先按照官方的方法安装 Node CoAP CLI 进行调试吧。
Node CoAP CLI
通过如下命令安装 Node CoAP CLI:
npm install coap-cli -g
输入 coap get coap://192.168.128.103/test 获取 CoAP Server 的 test 资源(这时没有信息,所以显示 no data),如下图所示:
输入 coap put -p 灵感桌面 coap://192.168.128.103/test 修改 CoAP Server 的 test 资源为字符串 “灵感桌面”,如下图所示:
再次输入 coap get coap://192.168.128.103/test 可以发现获取到上一步设置的字符串 “灵感桌面”了。
注意 COAP 的IP地址在启动的时候可以看到。
总结
按照官方的说法,我确实是把 COAP起来了,但是一个使用CoAP协议的设备通常既是客户端又是服务端,我还没办法测试客户端的功能。具体如何在爱智场景中更好的使用,我还得琢磨一下,在传统的COAP使用的M2M(端到端)的交互场景,在加入爱智之后肯定会发生变化,不知道精灵一号和 COAP 又能碰撞出什么新的场景。