基于乐鑫 ESP32-C3 的 Matter Light 实践

news/2024/10/14 15:27:23

背景介绍

最近公司在研究 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 开发指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71464.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

记录一次edu的小通杀

记录一次edu的小通杀 fofa查询随便点的一个虚拟仿真实训系统,存在多处未授权、逻辑漏洞,并且存在文件上传漏洞导致getshell,检索下来差不多十几个学校在用 从虚拟仿真系统入手感觉容易一些,一个系统可能很多学校都会用 fofa语法title="虚拟仿真 && status_cod…

计量经济学(二)——多元线性回归概览

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 多元线性回归(Multiple Linear Regression, MLR)是一种统计模型,被广泛认为是计量经济学的核心基础。多元线性回归为经济研究者提供了一种有效的方法来建模…

文本三剑客——sed【转】

sed sed处理的是行 sed 不打开文件的情况下更改文件的内容 sed [选项 ] ...{脚本语法} 文件名 sed 自己的语法:输出哪些行,留下哪些行 语法:范围+操作sed命令的选项 -i:实际修改文件内容 -i.bak:实际修改前先备份原文件,会产生一个源文件.bak的文件 -n:关闭自动打印 -r…

Qt/C++编写的mqtt调试助手使用说明

一、使用说明第一步,选择协议前缀,可选mqtt://、mqtts://、ws://、wss://四种,带s结尾的是走ssl通信,ws表示走websocket通信。一般选默认的mqtt://就好。 第二步,填写服务所在主机地址,可以是IP地址也可以是网址,只要真实存在的就行。 第三步,填写通信所用端口号,mqtt…

springboot~ConstraintValidatorContext验证两个字段内容相同

场景 我在开发修改密码功能,通过原密码和新密码及确认新密码,希望通过ConstraintValidator这个方式来校验新密码和确认新密码,规则是这两个密码需要是相同的。 参考文档https://github.com/micronaut-projects/micronaut-core/issues/3243 https://stackoverflow.com/questi…

制造业单项冠军 | 麦澜德如何用CRM管业务,做到“专精特新” ?

南京麦澜德医疗科技股份有限公司,股票代码:688273.SH(以下简称:麦澜德)成立于2013年,是国内女性全生命周期物理康复干预技术解决方案提供商。 公司产品广泛应用于妇产、盆底康复、生殖康复、泌尿肛肠、体检等医疗健康领域。荣获工信部专精特新小巨人企业、苏南潜在独角兽铜…

PyQt5 使用 aiohttp 发送异步请求

PyQt5 使用 aiohttp 发送异步请求 本文使用PyQt5演示,如何结合aiohttp库,发送异步请求 代码结构 本文中全部代码全在test_async_request.py这一个文件中编码,步骤中有变动的地方会注释标注,无改动的不会重复显示出来,需要看完整代码的,可直接移步到末尾。 需要安装PyQt5,…

华为 OD 的职级与薪资。。

大家好,我是R哥。 之前分享了一篇《冲进数字马力了!真滴香!!》,这是大厂内包,今天说说华为 OD,一种不同于普通外包的高级外包。 华为 OD,我们面试辅导也弄了不少人进去,很多小伙伴纳闷华为 OD 和华为正编、华为外包有什么区别? 一提到外包,可能大多数人都会嗤之以鼻…