背景介绍

最近公司在研究 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 名称的设备。如果没能看到,可能使因为设备驱动没有安装,同时检查拔插外设时是否已经允许映射到已运行的虚拟机上。下面是乐鑫提供的开发板驱动下载链接:

在 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 实践的更多相关文章

  1. 乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级

    目录 一.前言: 二.回顾下OTA的流程: 三.lwip网络框架的知识的使用: 四.如何处理服务器返回的数据? 五.扇区的擦除和烧写? 六.如何调用? 七.好好享用吧! 八.下载: 九.工程截图: 代 ...

  2. 乐鑫esp8266的 基于Nonos移植红外线1883,实现遥控器控制

    代码地址如下:http://www.demodashi.com/demo/12613.html 一.前言. 距离上篇的8266进阶博文有那么一段时间了,那么本文带来的是基于Nonos的红外线H1838 ...

  3. 基于Ubuntu的ESP32平台搭建

    提要:针对于Ubuntu下的ESP32搭建,网上有很多博文,乐鑫官网也有指导手册,对于到家都知道的部分我就一带而过,我主要描述搭建过程中遇到的问题和细节. 1.创建一个ESP的目录 I)在家目录下创建 ...

  4. ESP8266乐鑫版本的(支持云端升级 (Boot 模式)烧写方法,(V1.5.4官方介绍如下)(BOOT模式)

    硬件平台: nodeMCU devkit核心板,带ch340g,应该是仿造的,官方是cp2102驱动,安信可科技有连接https://wiki.ai-thinker.com/esp8266/board ...

  5. modbus转乐鑫物联网平台上传工具

    乐鑫平台推荐个人用户使用 界面比较简洁

  6. 乐鑫esp8266的串口通讯驱动源文件,nonos和rtos版本

    目录 一.前言: 二.esp8266的串口分布情况: 三.esp8266的串口通讯时候,应该怎么接线: 四.esp8266的NONOS非系统,串口编程: 五.esp8266的RTOS实时系统,串口编程 ...

  7. 实现乐鑫esp8266的无线OTA升级,实现远程在线升级固件

    代码地址如下:http://www.demodashi.com/demo/12994.html 一.前言: 写了这么多的8266博文,一直以满意100%的心态去敲写代码固件烧录,以致很少出现 bug ...

  8. 【快报】基于K2 BPM的新一代协同办公门户实践交流会

    2014年2月28日,“基于BPM的新一代协同办公门户”用户实践交流活动在深圳金茂JW万豪酒店3楼Meet Room IV举办.本次会议由K2携手微软共同举办,邀请到的参会企业都是K2 的BPM老客户 ...

  9. 基于Sql Server 2008的分布式数据库的实践(五)

    原文 基于Sql Server 2008的分布式数据库的实践(五) 程序设计 ------------------------------------------------------------- ...

  10. 基于Sql Server 2008的分布式数据库的实践(四)

    原文 基于Sql Server 2008的分布式数据库的实践(四) 数据库设计 1.E-R图 2.数据库创建 Win 7 1 create database V3 Win 2003 1 create  ...

随机推荐

  1. 【Java-GUI】02 Dialog对话框

    --1.对话框 Dialog java.awt.Dialog 和Window一样可以独立存在的一个窗体 但是注意: 1.Dialog对象一定需要一个依附的父级窗口 2.两种模式(模式和非模式),模式打 ...

  2. 【Spring-Security】Re02 基础认证流程

    一.权限认证模拟操作: 编写Security配置类: package cn.zeal4j.configuration; import org.springframework.context.annot ...

  3. 计算机领域:学术写作中的conducive的含义表示

    "Conducive" 的意思是"有助于"或"有益于".在学术和正式的写作中,"conducive" 常用于描述某种情况 ...

  4. C# Cefsharp 设置代理方法

    前提条件 为了实现在cefsharp里面设置代理,首先在创建一个ChromiumWebBrowser的时候,检查是否使用了以下代码 settings.CefCommandLineArgs.Add(&q ...

  5. 实习记录day03:尝试写一个接口

    前言:今天突然意识到,实习记录很少有技术性的东西,更多的是自己的心里活动和一些感想,其实这类博客更趋向于日记而非技术记录.也许哪天不再充满兴趣了,这个实习记录也就结束了(想下班了同志们) 实习第三天: ...

  6. 如何在 Recovery 中启用应用

    如果因为禁用了某个应用手机无法开机,那么你需要这个方法来救命 https://xdaforums.com/t/enable-or-disable-apps-directly-from-the-file ...

  7. dubbo序列化问题(三)子类覆盖父类字段hession反序列化获取不到 转

    在进行dubbo开发中遇到一个问题,当是用hession2进行序列化时,子类和父类有相同的字段时,hession2反序列化获取不到该字段数据,如下: import java.io.Serializab ...

  8. C语言中的短路现象

    短路现象1 比如有以下表达式 a && b && c 只有a为真(非0)才需要判断b的值: 只有a和b都为真,才需要判断c的值. 举例 求最终a.b.c.d的值. ma ...

  9. Elsa V3学习之脚本

    在前面的文章中,可以看到我们经常使用JS脚本来获取变量的值.在Elsa中是支持多种脚本的,最常用的基本是JS脚本和C#脚本. 本文来介绍以下这两个脚本使用. Javascript 在ELSA中的jav ...

  10. RISC-V全志D1多媒体套件文章汇总

    提示 此开发板的任何问题都可以在我们的论坛交流讨论 https://forums.100ask.net/c/aw/d1/57 文章目录汇总 教程共计14章,下面是章节汇总: 第0章_RISC-V全志D ...