【得捷电子Follow me第3期】两块ESP32C3通过Matter 互联实现控制
[复制链接]
Matter是一项好技术,适应Matter的设备正在逐渐增多。ESP32的大东家乐鑫,还专门提供了Matter解决方案:https://www.espressif.com.cn/zh-hans/solutions/device-connectivity/esp-matter-solution。
这篇分享,就是使用两块Seeed Studio XIAO ESP32C3,进行Matter匹配,一块为主控端,一块为受控端,通过主控端扩展板上的按键,来控制受控端上的LED。
一、硬件了解
1. Seeed Studio XIAO ESP32C3了解
在乐鑫的esp-matter方案中,esp32c3的开发板默认会调用esp32c3_devkit_m的配置,其对应的LED为GPIO8,且为WS2812,主控端对应的按键为GPIO9。
在这个实例中,受控端的LED,还是连接到GPIO8,具体见XIAO ESP32C3的引脚图:
主控端按键则使用扩展板上的按键:
这里的D1,对应了核心板上的GPIO3,后面需要进行对应的设置。
2. WS2812B
这里用的是一位WS2812B,DI为连到到开发板,DO为连接到下一级WS2812B的。
WS2812B通过一个数据引脚,就能接受控制信号,从而控制其上的LED。
二、软件了解
乐鑫开源了 开发者可以基于此,很方便的进行开发。
在此源码中,提供了两个实例,分别为light_switch、light,这两个实例,编译后下载到两个ESP32C3,然后通过配置工具,就能把他们通过Matter关联起来,实现light_switch上的按键,控制light上的LED。
ESP-Matter的文档,可以查看:https://espressif-docs.readthedocs-hosted.com/projects/esp-faq/zh-cn/latest/application-solution/esp-matter.html
三、编译源码
1. 编译环境
要搭建esp-matter的编译环境,可以参考esp-matter的文档,一步一步亲手搭建。
当然,也有更快捷的方法,那就是使用乐鑫提供的esp-matter的docker环境,一步到位,包括各种软件的适配。
一行命令,就能搞定一切:
mkdir -p ~/Projects/esp32/matter
cd ~/Projects/esp32/matter
# 启动docker环境
docker run --rm -v $PWD:/project -w /project -e HOME=/tmp -it espressif/esp-matter
启动docker环境后,再执行一些简单的脚本,就可以开始编译了:
# 安装vim
apt update
apt install vim
# 应用环境设置
. /opt/espressif/esp-matter/connectedhomeip/connectedhomeip/scripts/activate.sh
. /opt/espressif/esp-matter/export.sh
. /opt/espressif/esp-idf/export.sh
# 考虑light相关实例
cp -a /opt/espressif/esp-matter/examples/light* ./
2. 编译light_switch
编译前,先修改一下源码,以便使用GPIO3,从而用扩展板上的按键,做为控制按键。
vim /opt/espressif/esp-matter/device_hal/device/esp32c3_devkit_m/device.c
-#define BUTTON_GPIO_PIN GPIO_NUM_9
+#define BUTTON_GPIO_PIN GPIO_NUM_3
然后,按照下面的步骤编译:
cd light_switch
idf.py set-target esp32c3
idf.py menuconfig
idf.py build
esptool.py --chip esp32c3 merge_bin -o light_switch.bin --flash_mode dio --flash_size 4MB --flash_freq 80m 0x0 build/bootloader/bootloader.bin 0xc000 build/partition_table/partition-table.bin 0x1d000 build/ota_data_initial.bin 0x20000 build/light_switch.bin
编译完成后,使用esptool、flashdownload等工具,将light_switch.bin烧录到开发板即可,例如:
esptool write_flash -z 0x00 light_switch.bin
3. 编译light
编译完了light_switch,编译light更简单,具体步骤如下:
cd ../light
rm -rf build
idf.py set-target esp32c3
idf.py menuconfig
# 此时,需要搜索DEVICE_PRODUCT_ID,修改为0x8001,然后保存退出
idf.py build
esptool.py --chip esp32c3 merge_bin -o light.bin --flash_mode dio --flash_size 4MB --flash_freq 80m 0x0 build/bootloader/bootloader.bin 0xc000 build/partition_table/partition-table.bin 0x1d000 build/ota_data_initial.bin 0x20000 build/light.bin
注意其中需要修改DEVICE_PRODUCT_ID,以便和主控端区分。
编译完成后,使用esptool、flashdownload等工具,将light.bin烧录到第二块开发板即可,例如:
esptool write_flash -z 0x00 light.bin
烧录的时候,建议仅连接需要烧录的开发板,等全部完工后,再连接到一起。
4. 通过chip-tool工具配网
首先参考 ,编译当前环境的chip-tool。
然后,将两个开发板,都连接到电脑,并使用串口工具,进行监听,开发板启动后,显示到:
就可以进行配网了。
使用chip-tool,通过蓝牙进行配网,指令如下:
node_master=0x8000
node_slave=0x80001
# 主控端配置
chip-tool pairing ble-wifi $node_master OpenBSD1 13581882013 20202021 3840
# 受控端配置
chip-tool pairing ble-wifi $node_slave OpenBSD1 13581882013 20202021 3840
主控端配网后,显示:
受控端配网后,显示:
上述两个输出中,instance name 最后,就对应的 DEVICE_PRODUCT_ID ,默认为0x8000,受控端我们修改为了0x8001
然后,将两者进行关联:
chip-tool accesscontrol write acl '[{"privilege": 5, "authMode": 2, "subjects": [ 112233, '$(printf "%d" $node_master)' ], "targets": null}]' $node_slave 0x0
chip-tool binding write binding '[{"node":'$(printf "%d" $node_slave)', "endpoint":1, "cluster":6}]' $node_master 0x1
设置的过程中,会在主控上看到:
会在受控上看到:
这表示两者已经关联起来。
四、通过matter控制测试
1. 通过chip-tool测试控制功能
通过下面的命令,可以使用chip-tool直接控制受控端上的LED:
# 开灯
chip-tool onoff on 0x8001 0x1
# 关灯
chip-tool onoff off 0x8001 0x1
# 切换状态
chip-tool onoff toggle 0x8001 0x1
执行后,受控端将会收到控制指令,并控制LED:
2. 主控端按键控制:
现在,主控端和受控端,已经通过Matter关联起来了,受控端也可以控制了,那么,现在就可以按一按主控端扩展板上的用户按键了。
上图中,上面的受控端,连接了1位 WS2812B。下图为主控端,扩展板左下角的按键,为用户按键,对应GPIO3。
现在,按一下这个按键,则受控端上的LED会进行切换,两者的串口,也会输出对应的信息:
具体操作视频如下:
4498_1702564282
通过上面的视频可以看到,操作非常顺滑,几乎没有延时,控制效果非常好。
五、总结
Matter是一项正在蓬勃发展的技术,越来越多的设备都会接入Matter。
乐鑫对Matter的大力支持,是我们的已在ESP32C3开发板上,顺利的使用上Matter功能。
赶紧多多研究官方的实例,了解Matter功能的具体用法吧。
|