基于nRF7002开发matter协议的部署
1 Matter协议的组织
虽然围绕matter的开发很热,但是完整实现的开发环境实例并不多,nRF7002就是一个很好的开发平台,不过,这个过程显得非常不友好,至少是在国内的伙伴们。本周尝试了10天左右,应该是说再见的时候。主要的原因就是第一步Matter的构建,需要从github源下载文件,在没有完全完成的情况下,已经达到11G。按照当下github所能提供的流量通道,这个已经很多了,但是这个matter需要完整引用多个submodule,这样至少有三层的子模块在--recursive的选项下是必须下载的,而这个过程其实几乎无法完全控制,在基本下载完的情况下,尝试build就首战告负,显示开发环境有开发错误,这个在不同版本的操作系统下并不罕见,不过,如果不是生产环境,仅仅是测试的过程,就要替厂家debug这个就有些划不来的。所以,这个部分的评测就此中止了。后面原计划还有的连续测试也就只好随后再说了。
不过,这个也说明了当下matter发展所遇到的现状。就是匆匆推出抢占市场,即使是在基础测试很成熟的情况下,在多态适应,多种场景切换,以及不同版本兼容上,还有很大的工作没有完成,无法成为市场的主体。仅从matter的开发需要下载11G的代码就可以看出,这个工作量偏大了。
在此,重新理清matter的脉络。
首先,matter是需要构建围绕2.4GHz的通讯协议互相联通的问题,目前主要的2.4GHz协议是wifi,蓝牙,低功耗蓝牙,蓝牙Mesh,thread,zigbee,以及各个厂家的私有协议,如TI的自有2.4GHz协议。其中wifi和蓝牙已经自称一体,各自在大流量和低功耗上分别占有主导地位,其实,出货量大的情况下,在小圈子里也可以自洽了。这个matter的最大收益者应该是zigbee,应该是zigbee的商业路线起步就要认证收费,和蓝牙等低门槛没认证就铺货不是一个玩法,然后wifi出了ESP芯片,一下子把硬件门槛给减下去了,所以wifi也是因为esp而赢麻了。还需要注意的是matter虽然号称开放,其实Lora,NB-IoT等并没有纳入其中,而且看来不打算纳入其中,所以嘛,还是 那个熟悉的味道。
这个图就比较典型,wifi和thread都各自成网,以wifi接入点也就是我们常见的路由器,thread路由器分别作为高层的网,与必须具备的matter控制器一起构成更高级的网络,这样把异构的网络都连接起来。
具体实现的信号比较复杂,为了保证数据各自安好,同时避免分赃不匀,这个安全协议是相当的复杂,但是基于其复杂度而言,已经是非常效率高的,搞密码的可以好好研究一下。而对应终端开发者记住这样的简单逻辑就是,任意一个终端节点,包括控制这些节点的手机APP,桌面程序等都首先发出一个基于原始协议的信号包,然后到达各自的网关,这个网关把信息提交matter控制器,打包成matter包,然后分发给原来的网关或者其他网关,这些网关再解包分发,这个过程,终端节点的代码和协议完全不变,但是网关和matter控制器是必须更新代码的,这样。在新的构架下,基于matter的编号也是扩展长度的,用matterID来描述。
相比而言,wifi的路由是可以不升级代码的,貌似因为这个包可以整包传给matter控制器,自己只需要支持ipv6就行了,老猫应该是不灵了。
2 构建Matter的方法
这里的核心就是构建matter控制器,目前,只有Linux可以支持,经过测试的操作系统不多,但是可以支持树莓派。这些matter代码,都需要原生系统上完成build,所以,花时间那个是不可避免的。
这里可以直接使用已经build成的linux版本,不过,只提供了nRF SDK2.5.0的,使用sdk2.4.2的终端代码无法兼容。Matter over Wi-Fi: Configuring CHIP Tool for Linux or macOS以及Working with the CHIP Tool和Building Matter — Matter SDK documentation
首先,下载代码,如果提示用户名不灵,需要改用http下载,
git clone --recurse-submodules git@github.com:project-chip/connectedhomeip.git
然后需要完成依赖包安装
sudo apt-get install git gcc g++ pkg-config libssl-dev libdbus-1-dev \
libglib2.0-dev libavahi-client-dev ninja-build python3-venv python3-dev \
python3-pip unzip libgirepository1.0-dev libcairo2-dev libreadline-dev
配置好wifi,这个需要固定IP,如修改如下命令
sudo nano /etc/systemd/system/dbus-fi.w1.wpa_supplicant1.service
然后安装ZAP file,这个是支持zigbee的文件,已经提供了build release,就不用下载源码了,这个也是一个巨大的工程,提供源码就太浪费资源了。这个就是要形成和zigbee联通的资源包。
都配置好,就build一下,先启动虚拟环境
source scripts/activate.sh
然后使用ninja来构建,而不是cmake
gn gen out/host
ninja -C out/host
这样就在build目录下生成可执行的chiptool文件。当然,前提是没有报错啊。
./scripts/examples/gn_build_example.sh examples/chip-tool BUILD_PATH
3 启动chiptool的控制
chiptool的运行命令简单很多,
$ ./chip-tool
直接起飞,运行完成,这个是单此运行。需要完整的功能需要进入交互模式,这样就在配网成功,终端接入的情况下启动,需要网络构建成功
./chip-tool interactive start
如果需要thread,还需要启动thread,这里thread提供了一个docker影像,不用从头开始,
sudo docker exec -it otbr sh -c "sudo ot-ctl dataset active -x"
这样及形成matter测试的基本环境。
4 终端设备的启动和运行
终端设备运行和识别,需要40位代码,前12位是广播码,后27位是设备码,含厂家编号等。
chiptool是单命令行,如果需要加入设备,或者控制设备的参数状态,都需要直接录入命令。比如,加入一个配对的设备,需要以下命令
$ ./chip-tool pairing code <node_id> <qrcode_payload-or-manual_code>
如果实现专用的功能,那么还需要再编写一个交互界面,才能简单使用起来。
在各个终端的app都已经升级了针对matter的扫描加入和读码加入功能,用户使用起来,就靠那40位编号搞联通,还算方便,不过,小米什么都都还很淡定,等子弹再飞一会儿,兴许自己就玩没了呢?
5 小结
原本是希望给做一个从零起步的模板打样,结果搞到最后弄了一个现(场表)眼的表现,不过,再丑也见一下各位,有高手用躺雷区,可以继续,不过,目前,已经搞不动了,就先到这里结帖,也不多评价了,毕竟各路大佬已经急急慌慌的弄了一把了,看来还活挺多,超越了我的智能水准,就等大佬什么时候能整出适合智商低一下的工具再用不迟。