前言

兄弟们,我发现一个有意思的东西,我在爱智官网翻资料的时候,发现他们终于终于把官网文档的索引优化了!有一说一,真是方便不少,终于不再是一堆文档糊在一坨了。

另外我还发现他们居然做了一个EFR32的教程 我去年就很想搞一个来玩的,但是网上资料太少了,难搞的一逼,于是简单弄了一下后就丢一遍吃灰去了。现在终于可以回过头把EFR32捡起来了。

配置 Simplicity Studio 可能遇到的问题

关于 Simplicity Studio 介绍和简单教程可以看看我去年写的《基于EFR32的Zigbee开发-自定义Cluster》 ,接下来就是跟着官方的EFR32的教程 配置一下,我跟着做了一遍,完全可以,但是有很多细节一定要注意,很容易忽略。

首先是编译过程中出现出现各种找不到文件,搜索这些文件的时候发现都是IDE目录下的文件,最后查看Makefile打印的时候发现,报错的编译信息的路径都是“./xxx/xxx”开头,看了一下这个./实际上是 workspace 文件夹所在的地址,也就是说编译的时候它是以workspace所在的地址为根目录去IDE里面的文件,也就是说必须把 workspace 和 IDE 塞一个文件夹里面。没见过这么奇怪的做法。



编译提示各种宏缺少的时候,看看缺少的宏是什么宏,看上去像各种功能相关的,那大概率是 ZCL Clusters 那边勾选出了问题,如果看上去是各种硬件的宏报错,那就检查一下硬件配置。



ZCL Clusters 这里是配置一些命令和通道之类的东西,在下一个章节我在细说。



在这配置硬件相关的东西,注意右侧红框内的东西,比较容易被忽略,需要根据你板子实际情况选择。

配置 ZCL Clusters

官方教程中使用了基于 ZigBee HA 修改出了自己的一个规范,也给了一个XML文件给大家做一个参考,而这个 XLM 文件其实就是 ZDDC 设备端的关键。这里需要我们去官方教程中复制文档最下面的 XML 代码 :

<configurator>
<domain name="acoinfo" />
<cluster>
<name>acoinfo_aio</name>
<domain>acoinfo</domain>
<description>Acoinfo custom cluster</description>
<code>0x000C</code>
<define>ACOINFO_ZB_AIO_CLUSTER</define>
<client init="false" tick="false">true</client>
<server init="false" tick="false">true</server>
<attribute side="server" code="0x2000" define="ACOINFO_ZB_AIO_ATTR_1"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_AIO_ATTR_1</attribute>
<attribute side="server" code="0x2001" define="ACOINFO_ZB_AIO_ATTR_2"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_AIO_ATTR_2</attribute>
<attribute side="server" code="0x2002" define="ACOINFO_ZB_AIO_ATTR_3"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_AIO_ATTR_3</attribute>
<attribute side="server" code="0x2003" define="ACOINFO_ZB_AIO_ATTR_4"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_AIO_ATTR_4</attribute>
<attribute side="server" code="0x2004" define="ACOINFO_ZB_AIO_ATTR_5"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_AIO_ATTR_5</attribute>
<attribute side="server" code="0x2005" define="ACOINFO_ZB_AIO_ATTR_6"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_AIO_ATTR_6</attribute>
<attribute side="server" code="0x2006" define="ACOINFO_ZB_AIO_ATTR_7"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_AIO_ATTR_7</attribute>
<attribute side="server" code="0x2007" define="ACOINFO_ZB_AIO_ATTR_8"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_AIO_ATTR_8</attribute>
</cluster> <clusterExtension code="0x0006">
<attribute side="server" code="0x2000"
define="ACOINFO_ZB_DIO_ATTR_1"
type="BOOLEAN" min="0x00" max="0x01" writable="true"
default="0x00" optional="true">ACOINFO_ZB_DIO_ATTR_1</attribute>
<attribute side="server" code="0x2001"
define="ACOINFO_ZB_DIO_ATTR_2"
type="BOOLEAN" min="0x00" max="0x01" writable="true"
default="0x00" optional="true">ACOINFO_ZB_DIO_ATTR_2</attribute>
<attribute side="server" code="0x2002"
define="ACOINFO_ZB_DIO_ATTR_3"
type="BOOLEAN" min="0x00" max="0x01" writable="true"
default="0x00" optional="true">ACOINFO_ZB_DIO_ATTR_3</attribute>
<attribute side="server" code="0x2003"
define="ACOINFO_ZB_DIO_ATTR_4"
type="BOOLEAN" min="0x00" max="0x01" writable="true"
default="0x00" optional="true">ACOINFO_ZB_DIO_ATTR_4</attribute>
<attribute side="server" code="0x2004"
define="ACOINFO_ZB_DIO_ATTR_5"
type="BOOLEAN" min="0x00" max="0x01" writable="true"
default="0x00" optional="true">ACOINFO_ZB_DIO_ATTR_5</attribute>
<attribute side="server" code="0x2005"
define="ACOINFO_ZB_DIO_ATTR_6"
type="BOOLEAN" min="0x00" max="0x01" writable="true"
default="0x00" optional="true">ACOINFO_ZB_DIO_ATTR_6</attribute>
<attribute side="server" code="0x2006"
define="ACOINFO_ZB_DIO_ATTR_7"
type="BOOLEAN" min="0x00" max="0x01" writable="true"
default="0x00" optional="true">ACOINFO_ZB_DIO_ATTR_7</attribute>
<attribute side="server" code="0x2007"
define="ACOINFO_ZB_DIO_ATTR_8"
type="BOOLEAN" min="0x00" max="0x01" writable="true"
default="0x00" optional="true">ACOINFO_ZB_DIO_ATTR_8</attribute>
</clusterExtension> <clusterExtension code="0x0300">
<attribute side="server" code="0x2000" define="ACOINFO_ZB_DIO_ACTIVE_T_ATTR"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_DIO_ACTIVE_ATTR</attribute>
<attribute side="server" code="0x2001" define="ACOINFO_ZB_DIO_WRITE_T_ATTR"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_DIO_WRITE_ATTR</attribute>
<attribute side="server" code="0x2002" define="ACOINFO_ZB_AIO_ACTIVE_T_ATTR"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_AIO_ACTIVE_ATTR</attribute>
<attribute side="server" code="0x2003" define="ACOINFO_ZB_AIO_WRITE_T_ATTR"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_AIO_WRITE_ATTR</attribute>
<attribute side="server" code="0x2004" define="ACOINFO_ZB_MEM_ACTIVE_T_ATTR"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_MEM_ACTIVE_ATTR</attribute>
<attribute side="server" code="0x2005" define="ACOINFO_ZB_MEM_WRITE_T_ATTR"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_MEM_WRITE_ATTR</attribute>
</clusterExtension> <clusterExtension code="0x0500">
<attribute side="server" code="0x2000"
define="ACOINFO_ZB_MEM_ATTR_1"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_MEM_ATTR_1</attribute>
<attribute side="server" code="0x2001"
define="ACOINFO_ZB_MEM_ATTR_2"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_MEM_ATTR_2</attribute>
<attribute side="server" code="0x2002"
define="ACOINFO_ZB_MEM_ATTR_3"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_MEM_ATTR_3</attribute>
<attribute side="server" code="0x2003"
define="ACOINFO_ZB_MEM_ATTR_4"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_MEM_ATTR_4</attribute>
<attribute side="server" code="0x2004"
define="ACOINFO_ZB_MEM_ATTR_5"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_MEM_ATTR_5</attribute>
<attribute side="server" code="0x2005"
define="ACOINFO_ZB_MEM_ATTR_6"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_MEM_ATTR_6</attribute>
<attribute side="server" code="0x2006"
define="ACOINFO_ZB_MEM_ATTR_7"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_MEM_ATTR_7</attribute>
<attribute side="server" code="0x2007"
define="ACOINFO_ZB_MEM_ATTR_8"
type="INT32U" min="0x00000000" max="0xFFFFFFFF" writable="true"
default="0x00000000" optional="true">ACOINFO_ZB_MEM_ATTR_8</attribute>
</clusterExtension>
</configurator>

然后保存到一个空的文档中并另存为 XML 格式,然后将这个这个XML文件放入:

\v4\developer\sdks\gecko_sdk_suite\v2.7\app\zcl

文件夹下,在 ZigBee Stack 中添加 XML 文件后就能发现 ZCL Clusters 中多了一些东西。



这里是设置模型 ID 和制造商名字什么的。



这里设置了对应的通道是什么功能,截图中的的意思就是,DIO通道1和DIO通道2分配为灯的开关。



这是最蛋疼也是最有欺骗性的地方 官方设定 :

Cluster ID :0x0300 为本规范定义的通用属性,Attribute ID 0x2000-0x2005 为 6 个属性,类型为

uint32,只读

而原本的 0x0300 是被占用了的,官方这么玩的话,这个通用属性就会跑到颜色那一栏去,而这个通用属性,实际上是管理通道有效性的,上图代表:通道 1 和通道 2 有效并且可读可写。

这次的代码我用的就是官方的代码,他们说得很详细了,我就不重复一遍了。

总结

配置完成将代码烧入 EFR32 开发板 ,通过我们新的嗅探器发送 dio0/1 :true/false 就可以控制我们的LED:PC0/PC1了。

手把手带你使用ZigBee——通过爱智控制EFR32,以及 Simplicity Studio 使用过程中注意事项的更多相关文章

  1. 【原创】控制perl和python脚本执行过程中脚本文件是否关闭的方法

    引子 跟踪perl和python脚本对文件的访问,实际过程中,perl和python解析器在解析完脚本后,直接关闭了 脚本文件,在进程中查询不到是访问文件的脚本文件名称. shell.perl和pyt ...

  2. 手把手带你使用EFR32 -- 土壤湿度传感器变身第二形态,以 ZigBee 形态出击

    前言 后悔,总之就是非常后悔,我当时到底是为啥才会猪油蒙心,选择了 EFR32 来学习 ZigBee 使用啊? EFR32 这玩意看性能确实不错,但是资料太少了,EmberZnet SDK 也是用得一 ...

  3. 手把手带你做一个超炫酷loading成功动画view Android自定义view

    写在前面: 本篇可能是手把手自定义view系列最后一篇了,实际上我也是一周前才开始真正接触自定义view,通过这一周的练习,基本上已经熟练自定义view,能够应对一般的view需要,那么就以本篇来结尾 ...

  4. Android:手把手带你深入剖析 Retrofit 2.0 源码

    前言 在Andrroid开发中,网络请求十分常用 而在Android网络请求库中,Retrofit是当下最热的一个网络请求库 今天,我将手把手带你深入剖析Retrofit v2.0的源码,希望你们会喜 ...

  5. [转帖]从零开始入门 K8s | 手把手带你理解 etcd

    从零开始入门 K8s | 手把手带你理解 etcd https://zhuanlan.zhihu.com/p/96721097 导读:etcd 是用于共享配置和服务发现的分布式.一致性的 KV 存储系 ...

  6. 手把手带你阅读Mybatis源码(三)缓存篇

    前言 大家好,这一篇文章是MyBatis系列的最后一篇文章,前面两篇文章:手把手带你阅读Mybatis源码(一)构造篇 和 手把手带你阅读Mybatis源码(二)执行篇,主要说明了MyBatis是如何 ...

  7. [.Net] 手把手带你将自己打造的类库丢到 NuGet 上

    手把手带你将自己打造的类库丢到 NuGet 上 序 我们习惯了对项目右键点击“引用”,选择“管理NuGet 程序包”来下载第三方的类库,可曾想过有一天将自己的打造的类库放到 NuGet 上,让第三者下 ...

  8. Android性能优化:手把手带你全面实现内存优化

      前言 在 Android开发中,性能优化策略十分重要 本文主要讲解性能优化中的内存优化,希望你们会喜欢 目录   1. 定义 优化处理 应用程序的内存使用.空间占用 2. 作用 避免因不正确使用内 ...

  9. GitHub 热点速览 Vol.26:手把手带你做数据库

    作者:HelloGitHub-小鱼干 摘要:手把手带你学知识,应该是学习新知识最友好的姿势了.toyDB 虽然作为一个"玩具"项目不能应用在实际开发中,但通过它你可以了解到如何制作 ...

随机推荐

  1. Solution -「HDU #6566」The Hanged Man

    \(\mathcal{Description}\)   Link.   给定一棵含 \(n\) 个点的树,每个结点有两个权值 \(a\) 和 \(b\).对于 \(k\in[1,m]\),分别求 \[ ...

  2. ssh 主机之间免密配置脚本

    文章目录 单向免密 `expect` 免交互 `sshpass` 免交互 相互免密 单向免密 expect 免交互 注意修改脚本内的 your_password 为 远程主机用户的密码 脚本内的 &q ...

  3. 使用docker部署canal

    文章目录 mysql开启binlog mysql创建canal用户 启动canal容器 配置canal 启动canal容器 查看docker容器日志 canal-client 验证 关于canal m ...

  4. 从零开始, 开发一个 Web Office 套件(4):新的问题—— z-index

    <从零开始, 开发一个 Web Office 套件>系列博客目录 这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office ...

  5. 关于WebStorm-React-Native 代码提示安装方法

    声明 本方法 为网上好心人提供  我提供整理 插件名称:Webstrom live template 安装方法一:1.打开终端输入 git clone https://github.com/virto ...

  6. NSSCTF-gift_pwn

    最近才开始接触"pwn"这个东西,这是近两天做的一个题目,然后就想着记一下. 好的,步入正题, 直接nc连接返回空白,然后直接退出,用kali的checksec工具或者是die检测 ...

  7. DoS泛洪测试与防御

    实验目的 DoS泛洪测试与防御 实验内容 DoS泛洪测试与防御 实验环境描述 1. 学生机与实验室网络直连: 2. VPC1与实验室网络直连: 3. 学生机与VPC1物理链路连通: 实验步骤 学生登录 ...

  8. JsonResponse类的使用、form表单上传文件补充、CBV和FBV、HTML的模板语法之传值与过滤器

    昨日内容回顾 Django请求生命周期 # 1.浏览器发起请求 到达Django的socket服务端(web服务网关接口) 01 wsgiref 02 uwsgi + nginx 03 WSGI协议 ...

  9. 业务人员可以进行自助ETL操作?这款BI工具你值得拥有

    ​ETL是什么? ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.E ...

  10. 使用while循环和for循环输出2~100之间的素数(只能被1和自己整除的自然数)

    不管是while循环还是for循环,原理都是取根号,循环到取根号后的数,至于为什么需要循环到开根后的数,我想主要是因为一个数的分解因子在开根号后的数向上取整以下吧. 话不多说,上代码: while循环 ...