在之前的分享 【得捷电子Follow me第3期】两块ESP32C3通过Matter 互联实现控制 中,已经介绍了两块ESP32C3,通过 Matter 实现关联,然后其中一个做为主控端,控制另外一个。
这篇分享,则使用一块nRF7002-DK开发板,做为主控端,接入Matter,与作为受控端的ESP32C3关联,从而实现nRF7002-DK上的按键,来控制ESP32C3上的LED。
一、硬件了解
关于硬件部分,这次就不多说了。
ESP32C3的部分,在【得捷电子Follow me第3期】两块ESP32C3通过Matter 互联实现控制 已经详细说明了。
nRF7002-DK开发板,自带有两个用户按键,如下图开发板右下角的Button1、Button2:
二、开发板上的Matter程序
ESP32C3受控端的程序,在【得捷电子Follow me第3期】两块ESP32C3通过Matter 互联实现控制 中,已经刷好了,这里我们就主要说nRF7002-DK 的。
在nRF SDK 中,提供了Matter的相关实例,从VSCode的nRF Connect 中,可以直接以light_switch为参考来实现。
1. 从样例程序新建工程
完成后,新的工程如下:
2. 编译工程
首先新建nRF7002-DK对应的编译配置:
然后点击 Actions中的Build,进行编译。
编译时间,要比通用的nRF程序要长,因为涉及到了Matter的部分。
编译完成后,最终输出信息如下,说明编译成功:
需要说明的是,如果工程路径中带有中文,可能会编译失败。
3. 烧录固件到开发板
将开发板接到电脑,然后直接使用Actions中的Flash烧录即可,烧录完成结果如下:
三、Matter互联测试
现在,两块开发板都准备好了,就可以进行Matter相关的测试了。
1. 设备信息获取
首先,使用串口监听工具监听两块开发板。
然后,长按nRF7002-DK开发板的Button1,5秒以上,串口会输出:
表示接收到了重置按键。如果按短了,会提示取消重置。
最后,会输出如下信息:
重点关注上面的Product ID,Pin Code,Discriminator。
Product ID对应ESP32C3编译时的设置DEVICE_PRODUCT_ID。
nRF7002-DK的Product ID,即为下面命令中的node_master。
ESP32C3的DEVICE_PRODUCT_ID,即为下面命令中的node_slave。
此时,LED1会狂闪,表示需要配网。
再长按Button2,来启动蓝牙配网模式,至少按5秒,最终输出如下:
此时,LED1会慢闪,表示配网中。
2. 通过蓝牙配网
SSID=你的WiFi名称
SSPW=你的WiFi密码
# 主控,也就是nRF7002-DK的Product ID
node_master=0x8004
# 受控,也就是ESP32C3的
node_slave=0x8001
# 对应的十进制Product ID
node_master_dec=$(printf "%d" $node_master)
node_slace_dec=$(printf "%d" $node_slave)
# 发送配网信息
chip-tool pairing ble-wifi $node_master $SSID $SSPW 20202021 3840
chip-tool pairing ble-wifi $node_slave $SSID $SSPW 20202021 3840
nRF7002-DK开发板配网成功后,输出如下:
输出中的instance name的最后,就是对应的Product ID。
配网成功后,LED1常亮。
ESP32C3配网成功后,输出如下:
输出中的instance name的最后,就是对应的DEVICE_PRODUCT_ID。
3. ACL权限设置
两块板子的网络配置好了,下面就要把他们关联起来,从而可以通过Matter互联和控制。
使用下面的命令,对nRF7002-DK和ESP32C3进行设置:
# 设置受控权限
chip-tool accesscontrol write acl '[{"privilege": 5, "authMode": 2, "subjects": [ 112233, '$node_master_dec' ], "targets": null}]' $node_slave 0x0
# 设置主控权限
chip-tool binding write binding '[{"node":'$node_slave_dec', "endpoint":1, "cluster":6}]' $node_master 0x1
设置完成后,两块板子输出如下:
从上面的信息可以,主控端收到了受控端的信息,受控端也收到了主控端的信息了。
4. 按键测试
现在,按一下nRF7002-DK的Button2,两块板子的输出信息如下:
从上述输出可以看nRF7002-DK的Button2按键被检测到,然后发送控制指令给ESP32C3控制LED。
每按一次Button2,ESP32C3连接的LED就会交换状态,从而实现亮灭了。
具体测试的视频如下:
四、总结
Matter真的是门好技术,值得好好研究。
在这次的分享中,通过Matter,不同类型的开发板,能够很方便的互联互通起来,进行控制。
这也正式Matter的精髓所在,将不同类型的碎片化的智能设备,通过统一的Matter,来互联互通到一起。
Nordic对Matter的支持非常完善,使得nRF7002-DK能够快速的跑起来Matter的应用,让开发效率大幅提升。