Matter - 体验,灯泡(1)

news2024/12/26 11:33:02

一、前言

        Matter(当时称为 Project Connected Home over IP 或 Project CHIP)于2019年12月11日首次宣布。当时,它是由苹果、谷歌、亚马逊和联发科技等公司共同发起的一个项目,目的是创建一个开放标准,提高智能家居设备之间的互操作性。在2021年,该项目更名为 "Matter",同时宣布了首个 Matter 1.0 版本的发布,这标志着 Matter 开始为开发者和制造商提供稳定的规范,以便构建和推出兼容的智能家居设备。

        本篇采用 nordic 的 nrf-connect-sdk v2.5.0,matter 标准1.1.0,体验 Matter over Thread 开发。

二、先决条件

  1. 带蓝牙的 Ubuntu 22.04 PC 环境。(用作 Matter Controller 控制 MAD 和 开发编译环境)
  2. 支持 IPV6 的路由器。(WiFi Access Point,因为matter基于IPV6,所以路由器必须具备IPV6地址分配的能力(DHCPV6或者可以分配地址前缀信息),否则matter运行过程中mDNS会报错)
  3. Raspberry Pi 5 + nrf52840dongle。(用作 Open Thread Border Router - OTBR)
  4. nrf5340 dk。(作为 Matter Accessory Device - MAD)

本文基于 Matter over Thread 的网络:  

三、配置环境 

Tip:下载相关操作需要梯子。

1.安装 nrf-connect-sdk,构建编译环境。

方式一:使用 vscode 编译与下载(推荐),使用 vscode 的 nrf connect sdk 扩展去下载 toolchain 和 sdk 即可。

方式二:使用 命令行 编译与下载。

方式三:使用  SEGGER Embedded Studio(SES) 编译与下载。

2. 构建 MAD。编译 Matter light hulb 示例。

配置文件选择 prj_no_dfu.conf,不需要烧录 bootloader,其他需要先编译并烧录bootloader。

3. 构建 OTBR 和 编译 coprocessor 示例。

  • OTBR 需要 radvd 服务,来进行IPV6无状态自动配置。
sudo apt update
sudo apt install radvd
  • 创建 /etc/radvd.conf,例如:其中 wlan0 为网卡名称,根据实际情况修改,运行ifconfig查看网卡名称。
interface wlan0 {
  AdvManagedFlag on;
  AdvSendAdvert on;
  MinRtrAdvInterval 30;
  MaxRtrAdvInterval 60;
  prefix fd11:33::1/64 {
      AdvOnLink on;
      AdvAutonomous on;
      AdvRouterAddr on;
      };
  };
  • 重启 rvdvd 服务
sudo systemctl restart radvd
  • 登录 Raspberry Pi 并从 GitHub 克隆 ot-br-posix:
git clone https://github.com/openthread/ot-br-posix.git --depth 1
  • OTBR 可在线程接口和基础架构网络接口(例如 Wi-Fi/以太网)上使用,通过 INFRA_IF_NAME 指定。Thread 接口默认由 OTBR 创建,名为 wlan0。如果未明确指定 INFRA_IF_NAME,则基础架构接口的默认值为 wlan0。
cd ot-br-posix
./script/bootstrap
INFRA_IF_NAME=wlan0 ./script/setup
  • 检查 OTBR 是否已成功安装: 
$ sudo service otbr-agent status
● otbr-agent.service - Border Router Agent
   Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since Mon 2021-03-01 05:43:38 GMT; 2s ago
  Process: 2444 ExecStart=/usr/sbin/otbr-agent $OTBR_AGENT_OPTS (code=exited, status=2)
 Main PID: 2444 (code=exited, status=2)

对树莓派 sudo reboot 重启更改生效 

  • 对 nrf52840dongle 编译 RCP: 
west build -p always -b nrf52840dongle_nrf52840 nrf/samples/openthread/coprocessor/

 打包:

nrfutil pkg generate --hw-version 52 --sd-req=0x00 \
 --application build/zephyr/zephyr.hex --application-version 1 build/zephyr/zephyr.zip

 烧录:

nrfutil dfu usb-serial -pkg build/zephyr/zephyr.zip -p /dev/ttyACM0
  • 插入 RCP 到 Raspberry Pi,编辑文件 /etc/default/otbr-agent,改变tty端口和主干接口波特率。
OTBR_AGENT_OPTS="-I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyUSB0?uart-baudrate=100000"
  • 启动 otbr-agent 服务。
sudo systemctl start otbr-agent.service

4. 编译 CHIP Tool(POSIX chip-tool CLI)。

使用官方的最新 chip 项目:

git clone https://github.com/project-chip/connectedhomeip.git
cd connectedhomeip
git submodule update -f --init --recursive
./scripts/examples/gn_build_example.sh examples/chip-tool BUILD_PATH

other:Android chip tool;IOS chiptool。

四、测试设备

1. 配置和启动 OpenThread(OT)网络,在 raspberry pi 终端下执行。

sudo ot-ctl dataset init new
sudo ot-ctl dataset networkkey 00112233445566778899aabbccddeeff
sudo ot-ctl dataset extpanid 1111111122222222
sudo ot-ctl dataset panid 0x1234
sudo ot-ctl dataset channel 15
sudo ot-ctl dataset commit active
sudo ot-ctl ifconfig up
sudo ot-ctl thread start
  • 初始化一个新的 OpenThread 数据集。
  • 设置网络密钥(Network Key)为给定的值。这是用于保障网络安全性的密钥。
  • 设置扩展PAN ID(Extended PAN ID)为给定的值。这是网络的唯一标识符。
  • 设置PAN ID为给定的值。这是一个短地址,用于在同一网络中唯一标识设备。
  • 设置网络通信的频道为给定的值。在 IEEE 802.15.4 网络中,通信频道的选择对于网络的性能和干扰有影响。
  • 提交对数据集的更改,并激活新的数据集。这将应用上述设置。
  • 启动 OpenThread 接口,准备进行通信。
  • 启动 OpenThread 线程栈,使设备成为网络的一部分。

2. 使用 POSIX chip-tool CLI 来配置配对 Matter Light 设备。

        Matter Light 等待配对状态下 LED1 慢闪,配对中快闪,配对后常亮(nrf5340dk 按住 button1 3s 以上恢复出厂设置)。执行编译出来的 chip-tool 应用如下命令进行配对:

sudo ./chip-tool pairing ble-thread 1234 hex:0e08000000000001000035060004001fffe00708fd9e914e6def9df2030f4f70656e5468726561642d323361350410542ccde31a710d5b17af34e12fec0f140c0402a0f7f8051000112233445566778899aabbccddeeff0208111111112222222201021234000300000f 20202021 3840

$ ./chip-tool pairing ble-thread <node_id> hex:<operational_dataset> <pin_code> <discriminator>

  • pairing ble-thread: 指定使用 BLE Thread 进行配对。
  • <node_id>: 设备的节点ID。这是设备在网络中的唯一标识符。
  • hex:<operational_dataset>: 操作数据集(Operational Dataset)的十六进制表示。这是设备的操作参数,用于配置设备的网络连接等信息。
  • <pin_code>: PIN码。这是一种简单的配对方法,用户可以输入此代码来验证设备。
  • <discriminator>: 辨识码。用于在设备之间进行配对时进行标识的参数。

node_id 自定义为 1234。 operational_dataset 获取在 raspberry pi 终端中执行:

sudo ot-ctl dataset active -x

 得到

0e08000000000001000035060004001fffe00708fd9e914e6def9df2030f4f70656e5468726561642d323361350410542ccde31a710d5b17af34e12fec0f140c0402a0f7f8051000112233445566778899aabbccddeeff0208111111112222222201021234000300000f
Done

pin_code、 discriminator 在 Matter Light 启动时可以在设备的日志终端(例如UART)中找到,当前 pin_code:20202021,discriminator:3840。

I: 658 [DL]Device Configuration:
I: 662 [DL]  Serial Number: 11223344556677889900
I: 666 [DL]  Vendor Id: 65521 (0xFFF1)
I: 670 [DL]  Product Id: 32773 (0x8005)
I: 673 [DL]  Product Name: not-specified
I: 677 [DL]  Hardware Version: 0
I: 681 [DL]  Setup Pin Code (0 for UNKNOWN/ERROR): 20202021
I: 687 [DL]  Setup Discriminator (0xFFFF for UNKNOWN/ERROR): 3840 (0xF00)
I: 694 [DL]  Manufacturing Date: (not set)
I: 698 [DL]  Device Type: 65535 (0xFFFF)

3. 使用 POSIX chip-tool CLI 发送 ZCL 消息来控制 Matter Light 设备。

  • 使用以下命令模式切换 OnOff 属性状态(例如通过 LED 状态可视化):

$ ./chip-tool onoff toggle <node_id> <endpoint_id>

  • <node_id>为委托节点的用户自定义ID。

  • <endpoint_id>是已实现 OnOff 集群的端点的 ID。

  • 使用以下命令模式更改 CurrentLevel 属性的值(例如,通过 LED 亮度进行可视化): 

$ ./chip-tool levelcontrol move-to-level <level> <transition_time> <option_mask> <option_override> <node_id> <endpoint_id>

  • <level>0是在和之间编码的亮度级别254,除非在集群中配置了自定义范围。

  • <transition_time>是过渡时间。

  • <option_mask>是选项掩码。

  • <option_override>是选项覆盖。

  • <node_id>为委托节点的用户自定义ID。

  • <endpoint_id>是实现了 LevelControl 集群的端点的 ID。 

exmple:

翻转LED2:

sudo ./chip-tool onoff toggle 1234 1

 LED2 亮度 18,过渡时间 3s:

sudo ./chip-tool levelcontrol move-to-level 18 3 0 0 1234 1

相关参考

  • Matter over Thread: Configuring Border Router and Linux/macOS controller on separate devices
  • Thread tools
  • 线程边界路由器 - 双向 IPv6 连接和基于 DNS 的服务发现
  • Working with the CHIP Tool

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

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

相关文章

【Linux】Git - 新手入门

文章目录 1. git 版本控制器 - 该如何理解&#xff1f;2. git / gitee / github 区别&#xff1f;3. Linux 中 git 的使用3.1 安装 git3.2 使用 github 新建远端仓库3.2.1 账号注册3.2.2 创建代码仓库3.2.3 克隆仓库到本地3.2.4 .gitignore 文件 3.3 使用 git 提交代码到 githu…

【方法】Excel表格如何“限制编辑区域”?

在制作Excel表格的时候&#xff0c;你是否遇到这些情况&#xff1f;有时候需要限定部分区域让他人协助填写&#xff0c;有时候会有很多数据或公式&#xff0c;要防止误改&#xff0c;否则会引起错误。要保护好这些区域&#xff0c;我们可以给Excel表格设置“限制编辑区域”。 …

震惊!你还搞不懂PMP中的合同类型?

PMP中的合同类型包括固定总价合同、总价加激励费用合同、总价加经济价格调整合同、成本加固定费用合同、成本加激励费用合同和成本加奖励费用合同等。 下面分别针对各类合同进行详细的说明&#xff1a; 固定总价合同&#xff08;FFP&#xff09;&#xff1a;是最常用的合同类型…

ERP和MES对接的几种接口方式

在数字化工厂的规划建设中&#xff0c;信息化系统的集成&#xff0c;既是重点&#xff0c;但同时也是难点。ERP和MES对接时&#xff0c;ERP主要负责下达生产计划&#xff0c;MES是执行生产计划&#xff0c;二套系统在数据交互时&#xff0c;需要确保基础数据的一致性&#xff0…

mysql原理--redo日志2

1.redo日志文件 1.1.redo日志刷盘时机 我们前边说 mtr 运行过程中产生的一组 redo 日志在 mtr 结束时会被复制到 log buffer 中&#xff0c;可是这些日志总在内存里呆着也不是个办法&#xff0c;在一些情况下它们会被刷新到磁盘里&#xff0c;比如&#xff1a; (1). log buffer…

B端产品经理学习-B端产品的项目管理

项目管理的作用 指导Roadmap落地 每个节点的项目时间需要按照时间点落地&#xff0c;才不会影响后面的项目事件 为了明确需求&#xff0c;明确研发的工作 避免产研部门因为需求扯皮、研发部门抱怨需求文档不够清晰、在开发过程中增加很多细节需求、增加了研发的工作量、初次…

探寻爬虫世界01:HTML页面结构

文章目录 一、引言&#xff08;一&#xff09;背景介绍&#xff1a;选择爬取51job网站数据的原因&#xff08;二&#xff09;目标与需求明确&#xff1a;爬取51job网站数据的目的与用户需求 二、网页结构探索&#xff08;一&#xff09;51job网页结构分析1、页面组成&#xff1…

紫光展锐T770安卓核心板_展锐T770 5G核心板规格参数

紫光展锐T770安卓核心板是一款高性能的5G安卓智能模块&#xff0c;拥有先进的6nm制程工艺和强大的性能。板载8GB Ram 256GBROM的内存单元&#xff0c;支持4K H.265/ H.264视频编解码&#xff0c;搭载Android 13以上操作系统&#xff0c;功能丰富。除了支持5G NSA和SA双模式向下…

分布式搜索——Elasticsearch

Elasticsearch 文章目录 Elasticsearch简介ELK技术栈Elasticsearch和Lucene 倒排索引正向索引倒排索引正向和倒排 ES概念文档和字段索引和映射Mysql与Elasticsearch 安装ES、Kibana安装单点ES创建网络拉取镜像运行 部署kibana拉取镜像部署 安装Ik插件扩展词词典停用词词典 索引…

勾股数 - 华为OD统一考试

OD统一考试 题解&#xff1a; Java / Python / C 题目描述 如果三个正整数A、B、C &#xff0c;A B C 则为勾股数&#xff0c; 如果ABC之间两两互质&#xff0c;即A与B&#xff0c;A与C&#xff0c;B与C均互质没有公约数&#xff0c;则称其为勾股数元组。 请求出给定 n ~ …

一篇教你生成密钥给自己打的exe添加密钥

一篇教你生成密钥给自己打的exe添加密钥 我这里是自己写了一个python 打包exe,说总是给我报毒什么的 文章目录 一篇教你生成密钥给自己打的exe添加密钥前言一、使用java jdk 自带的keytool&#xff1f;二、进行转换2.把证书密钥写入到你的exe 总结 前言 生成密钥并为自定义 .…

【IPC通信--共享内存】

进程间通信目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了某种事件&#xff08;如…

xlua源码分析(五) struct类型优化

xlua源码分析&#xff08;五&#xff09; struct类型优化 上一节我们分析了xlua是如何实现lua层访问C#值类型的&#xff0c;其中我们重点提到了xlua默认实现方式下&#xff0c;struct访问的效率问题。实际上&#xff0c;xlua还提供了两种优化的方式&#xff0c;可以大大提高str…

软件测试|如何使用Selenium处理隐藏元素

简介 我们在使用selenium进行web自动化测试时&#xff0c;有时候会遇到元素被隐藏&#xff0c;从而无法对元素进行操作&#xff0c;导致我们的用例报错的情况。当我们遇到元素被隐藏的情况时&#xff0c;需要先对隐藏的元素进行处理&#xff0c;才能继续进行我们的操作&#x…

一篇文章搞懂Jenkins持续集成解决的是什么问题

01 持续集成的定义 大师 Martin Fowler 是这样定义持续集成的: 持续集成是一种软件开发实战, 即团队开发成员经常集成他们的工作. 通常, 每个成员每天至少集成一次, 也就意味着每天可能发生多次集成. 持续集成并不能消除Bug, 而是让它们非常容易发现和改正. 根据对项目实战的…

第08章_面向对象编程(高级)拓展练习(关键字:static,代码块,关键字:final,抽象类和抽象方法,接口,内部类,枚举类,注解,包装类)

文章目录 第08章_面向对象编程&#xff08;高级&#xff09;拓展练习01-关键字&#xff1a;static1、银行账户类2、图形类3、数组工具类4、二分查找5、二分查找6、素数7、阅读代码&#xff0c;分析运行结果8、阅读代码&#xff0c;分析运行结果 02-代码块9、阅读代码&#xff0…

软件测试|如何使用selenium处理下拉框?

简介 下拉框是网页表单中常见的元素之一&#xff0c;通常用于选择不同的选项。对于我们的自动化测试工作来说&#xff0c;操作下拉框是我们经常需要处理的元素&#xff0c;selenium作为我们最常使用的web自动化测试框架&#xff0c;也是支持我们对下拉框进行操作的。本文我们就…

Github镜像加速器-FastGit

简介 FastGit 是一个对于 GitHub.com 的镜像加速器。使用共享资源为 GitHub 加速。 FastGit中文指南 # 基本使用 关于 FastGit 的使用&#xff0c;本质上与 git 有关。常规的面向 GitHub 的 clone 命令可能如下&#xff1a; git clone https://github.com/author/repo使用 F…

Qt 使用vs2019制作Qt静态库( *.lib )并使用

一 .创建静态库 1.创建Qt Class Library(Qt静态类库)项目 2.设置项目名以及项目路径(注意:不能有中文字符) 点击next 3.选则需要的模式以及Qt 模块 然后点击next,Finish完成创建 4. 然后手动添加Qt Widget Form File (.ui)并对设计ui 5. tpendialog.h #pragma once #includ…

VScode远程连接开发嵌入式开发板

在做嵌入式开发时&#xff0c;很多时候需要远程连接或者远程调试设备&#xff0c;这时可以通过VScode上的插件来很方便的进行远程连接和调试。 ssh远程连接嵌入式开发板&#xff1a; 1、安装vscode ssh远程插件&#xff1a;Remote-SSH。 2、点击""&#xff0c;输入…