基于乐鑫 ESP32-C3 的 Matter Light 实践
背景介绍
最近公司在研究 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 的 Matter Light 实践的更多相关文章
- 乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级
目录 一.前言: 二.回顾下OTA的流程: 三.lwip网络框架的知识的使用: 四.如何处理服务器返回的数据? 五.扇区的擦除和烧写? 六.如何调用? 七.好好享用吧! 八.下载: 九.工程截图: 代 ...
- 乐鑫esp8266的 基于Nonos移植红外线1883,实现遥控器控制
代码地址如下:http://www.demodashi.com/demo/12613.html 一.前言. 距离上篇的8266进阶博文有那么一段时间了,那么本文带来的是基于Nonos的红外线H1838 ...
- 基于Ubuntu的ESP32平台搭建
提要:针对于Ubuntu下的ESP32搭建,网上有很多博文,乐鑫官网也有指导手册,对于到家都知道的部分我就一带而过,我主要描述搭建过程中遇到的问题和细节. 1.创建一个ESP的目录 I)在家目录下创建 ...
- ESP8266乐鑫版本的(支持云端升级 (Boot 模式)烧写方法,(V1.5.4官方介绍如下)(BOOT模式)
硬件平台: nodeMCU devkit核心板,带ch340g,应该是仿造的,官方是cp2102驱动,安信可科技有连接https://wiki.ai-thinker.com/esp8266/board ...
- modbus转乐鑫物联网平台上传工具
乐鑫平台推荐个人用户使用 界面比较简洁
- 乐鑫esp8266的串口通讯驱动源文件,nonos和rtos版本
目录 一.前言: 二.esp8266的串口分布情况: 三.esp8266的串口通讯时候,应该怎么接线: 四.esp8266的NONOS非系统,串口编程: 五.esp8266的RTOS实时系统,串口编程 ...
- 实现乐鑫esp8266的无线OTA升级,实现远程在线升级固件
代码地址如下:http://www.demodashi.com/demo/12994.html 一.前言: 写了这么多的8266博文,一直以满意100%的心态去敲写代码固件烧录,以致很少出现 bug ...
- 【快报】基于K2 BPM的新一代协同办公门户实践交流会
2014年2月28日,“基于BPM的新一代协同办公门户”用户实践交流活动在深圳金茂JW万豪酒店3楼Meet Room IV举办.本次会议由K2携手微软共同举办,邀请到的参会企业都是K2 的BPM老客户 ...
- 基于Sql Server 2008的分布式数据库的实践(五)
原文 基于Sql Server 2008的分布式数据库的实践(五) 程序设计 ------------------------------------------------------------- ...
- 基于Sql Server 2008的分布式数据库的实践(四)
原文 基于Sql Server 2008的分布式数据库的实践(四) 数据库设计 1.E-R图 2.数据库创建 Win 7 1 create database V3 Win 2003 1 create ...
随机推荐
- 【Mybatis-Plus】02 Spring整合,基本CRUD
创建非骨架普通Maven工程: 引入Spring & MybatisPlus的依赖坐标及其它持久层依赖: <properties> <spring.version>5. ...
- LeetCode 上1769号 面试编程题,python编程
原题地址: https://leetcode-cn.com/problems/minimum-number-of-operations-to-move-all-balls-to-each-box/ - ...
- ubuntu18.04系统环境下使用vs code安装pylint检查python的代码错误
相关: Ubuntu18.04 系统环境下 vscode中忽略pylint某些错误或警告 ============================================ python的代码错 ...
- 内存交换空间--Swap Space
转载请注明出处: 一.概述 内存交换空间(Swap Space)是计算机内存的一种补充,位于硬盘驱动器上.当物理内存(RAM)不足时,系统会将不活跃的页面(或称为内存页)移到交换空间中,以释放物理内存 ...
- 开源的 P2P 跨平台传文件应用「GitHub 热点速览」
就在上周,发完那篇文章之后不久,我就有幸获得了 GitHub Models 服务公测的访问权限,所以就体验了一下 Playground 聊天功能. 起初,我以为这是"微软菩萨"降临 ...
- RabbitMq高级特性之死信队列 通俗易懂 超详细 【内含案例】
RabbitMq高级特性之死信队列 又称 死信交换机 DLX 介绍 当消息成为 Dead message 后,会重新发送到另一个交换机,这个交换机就是 DLX(死信交换机) 消息成为死信的情况公有三种 ...
- CH06_函数
CH06_函数 概述 作用:将一段可复用的代码封装起来,减少代码重复. 一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能. 函数的定义 函数的定义一般主要有5个步骤: 返回值类型 函数名 ...
- vs code 快速配置
1. 基本操作 打开工程文件: ctrl + p 在文件搜索内容: ctrl + shift + f 进入设置: ctrl + shift + p, 然后输入 user setting 添加插件: c ...
- CentOS 进入救援模式
因某些修改操作,导致系统重启后无法正常启动,此时需要进入救援模式,修复错误配置即可. 1.重启系统后,进入grup引导页面,选中第一项然后按"e" 进入编辑模式: 2.通过↓键找到 ...
- 仿MFC的消息印射(全局函数的实现)
//弄了个仿MFC消息映射,这是全局函数都好弄,照着MFC就弄出来了,//在vs2017上可以通过#include <windows.h> #include "resource. ...