背景介绍
最近公司在研究 Matter 协议在智能家居领域的市场机会,考虑到易用性和文档支撑等方面,相比较 Telink,产品部门对乐鑫的 Matter-SDK 更感兴趣,因而开展了一些测试工作,毕竟实践出真知嘛。😕
正文
1.1 Matter 介绍
2019 年 12 月,亚马逊、谷歌、苹果、CSA(连接标准联盟,原 Zigbee 联盟)等联合发起了智能家居互联协议 CHIP (Connected Home over IP),即 Matter 的前身。CHIP 致力于打造一个基于开源生态的新智能家居协议,打破平台间的割裂和开发路径的差异。Matter 可实现智能家居和语音服务的兼容,例如亚马逊 Alexa、苹果 HomeKit 的 Siri、Google Assistant 等。
这就意味着,Matter 可以让设备厂商更容易构建与智能家居和语音服务兼容的设备,例如设备厂商为了支持亚马逊 Alexa、苹果 HomeKit 的 Siri、Google Assistant ,原本需要准备三套方案,现在只要支持 Matter,就可以同时支持这三大平台。
目前,许多消费者都拥有着多种智能家居产品,例如智能锁、摄像头、传感器、智能开关、智能照明等等。在过去,由于不同制造商缺乏互操作性,因此从单个APP或终端控制所有智能设备变得非常困难。而新的 Matter 协议将有助于解决这一挑战,Less is more !。
1.2 环境概览
- 操作系统:Windows 10。
- 虚拟机:VMware WORKSTATION PRO 17。
- 镜像版本:Ubuntu-20.04.2.0。
- 开发板:ESP32-S3(例程问题比较多,后面改用了C3)、ESP32-C3。
- 网络:WIFI、以太网,同时为了能够访问 Github,需要一些科学的方法。
注意:官方教程是推荐直接利用主机进行开发的,如果使用虚拟机,哪怕是官方推荐的 WSL,会出现在利用 CHIP-TOOL 工具对设备进行配网调试时会出现查找蓝牙设备失败的情况。当时因为这个问题处理了很久,后面改用了其他方法,详见后文。
1.3 搭建 IDF 环境
Matter 的开发依赖于 ESP-IDF 的开发环境,在开始之前需要保证本地开发环境处于可用状态。
(1)使用下述命令进行安装准备:
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
(2)获取 ESP-IDF:
首先导航至安装目录,打开终端运行下述命令:
mkdir -p ~/esp
cd ~/esp
git clone -b v5.1.1 --recursive https://github.com/espressif/esp-idf.git
(3)设置工具:
其中,我这里使用的是 esp32c3 的开发板,如果打算开发其他芯片的项目,可以改成其他名称:
cd ~/esp/esp-idf
./install.sh esp32c3
注意:在工具安装的过程中会从 Github 下载大量文件,如果电脑访问 Github 的速度比较慢,可以设置一个环境变量优先使用乐鑫的下载服务器来下载相应的资源,使用下列指令:
cd ~/esp/esp-idf
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
./install.sh esp32c3
(4)设置环境变量:
安装的工具还没有被添加到 PATH 环境变量中,为了能够使这些工具在命令行中使用,必须设置一些环境变量。在需要使用 ESP-IDF 的终端中运行以下语句。不过为了方便使用,这里可以创建一个脚本来执行 export.sh。
. $HOME/esp/esp-idf/export.sh
(5)测试环境
将 esp32c3 开发板连接到电脑上,正常情况下运行 ls /dev/tty*
能够查找到类似于 ttyUSB0 名称的设备。如果没能看到,可能使因为设备驱动没有安装,同时检查拔插外设时是否已经允许映射到已运行的虚拟机上。下面是乐鑫提供的开发板驱动下载链接:
- CP210x: CP210x USB 至 UART 桥 VCP 驱动程序
在 esp-idf 的 examples 目录中有一系列示例,我们复制 hello_world 用于开发环境的测试。
cd ~/esp
cp -r $IDF_PATH/examples/get-started/hello_world .
导航至 hello_World 目录,把 esp32c3 设置为目标。
cd ~/esp/hello_world
idf.py set-target esp32
运行下列命令生成项目,该命令将编译应用程序和所有的 ESP-IDF 组件,然后生成引导加载程序、分区表等文件。
idf.py build
烧录前将开发板擦除,之后刷入刚才构建的项目:
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flash
如果在flash过程结束时没有问题,主板将重新启动并启动"hello_world"应用程序。通过 IDF监视器,可以看到该程序的运行情况:
idf.py -p /dev/ttyUSB0 monitor
使用 Ctrl+]
退出监视器,至此开发环境搭建和测试完成。
1.4 搭建 Matter
(1)进行安装准备:
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
(2) 获取仓库,进行安装:
cd esp-idf
source ./export.sh
cd ..git clone --depth 1 https://github.com/espressif/esp-matter.git
cd esp-matter
git submodule update --init --depth 1
cd ./connectedhomeip/connectedhomeip
./scripts/checkout_submodules.py --platform esp32 linux --shallow
cd ../..
./install.sh
cd ..
如果是使用虚拟机进行 clone 的话,这一步可能会报错,例如:connection refused 等。需要在虚拟机中手动配置一下 Porxy 以解决网络问题。
(3)配置环境:
每次打开一个新的终端时都应该使用以下命令来配置 Matter 的开发环境:
cd esp-idf; source ./export.sh; cd ..
cd esp-matter; source ./export.sh; cd ..
可以选择开启 Ccache 来提升编译速度:
export IDF_CCACHE_ENABLE=1
和之前配置 ESP-IDF 一样,以上命令也可以添加到一个脚本当中,以便每次在打开新的终端时快速启动。
(4)烧录固件:
本次测试利用 ESP32C3 自带的小灯,构建一个灯的 Matter 应用。
进入 esp-matter/examples/light 示例目录,选择 IDF 目标为本次的开发板型号:
idf.py set-target esp32c3
进入 esp-matter/examples/light 路径下,运行以下命令将例程烧录至设备:
idf.py flash monitor
(5)设备配网:
这里官方教程使用的是基于蓝牙配网的方案,但是因为我是虚拟机的原因,尝试了很多次并没有成功,因而我改用控制台的方式通过命令给设备进行配网:
matter esp wifi connect <ssid> <password>
(6)利用 CHIP-TOOL 连接板子:
打开交互式环境,可以单开一个新的终端,配置一下 Matter 的环境,运行:
cd esp-idf; source ./export.sh; cd ..
cd esp-matter; source ./export.sh; cd ..
export IDF_CCACHE_ENABLE=1
chip-tool interactive start
连接开发板,其中 0x11 类似于设备的ID,20202021 为识别码:
pairing onnetwork 0x11 20202021
(7)利用指令控制 Matter 小灯:
如果上述操作都没有报错的话,下面就可以开心的利用命令控制 Matter 小灯的亮灭了:
onoff on 0x11 0x1
onoff off 0x11 0x1
1.5 参考文章
- 与 ESP32-C3 创建串口连接
- 创建 ESP-IDF 开发环境
- ESP-Matter 开发指南