相关系列文章

基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(-)-Z3GatewayHost应用搭建

基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(二)-使用gateway-management-ui

基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(三)-移植到ESP32平台(1)

基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(三)-移植到ESP32平台(2)

基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(四)-移植到STM32平台​​​​​​​

概要

最近一段时间,因为需要开发一款包含zigbee 3.0功能的融合通讯网关,所以花费了一段较长的时间来研究Silicon Labs的Host-NCP应用框架。主要的工作包括Silicon Labs官方SDK中推荐的基于Ubuntu环境下的项目搭建、代码编译、功能验证等工作。

同时,为了兼顾在不同应用场景下的开发需求,也把对应的Host部分移植到了ESP32、STM32等嵌入式环境中,中间碰到了不少困难和问题,现把一些关键内容、操作过程、注意事项进行记录,为以后相关开发做一个指引和帮助。(一些关于Silicon Labs项目的基础概念、代码生成、插件配置就不做详细记录了,网上也有很多相关的文章可以参考)。

参考文档

Host-NCP的基本架构和基于Simplicity Studio软件的项目创建,请参考以下文章(感谢相关文章作者的分享,在此借以引用参考,如有涉及版权问题,请及时联系我)

1.作者GOING BRYOND LIMITS 关于EFR32xG21搭建网关的一系列文章(建议按顺序全部阅读一次)

1)《EFR32xG21搭建网关demo - 概览》:https://blog.csdn.net/xingzhibo/article/details/104535007

2)《EFR32xG21搭建网关demo - bootloader》https://blog.csdn.net/xingzhibo/article/details/107808462

3)《EFR32xG21搭建网关demo -ncp-uart-sw》https://blog.csdn.net/xingzhibo/article/details/107841658

4)《EFR32xG21搭建网关demo - Z3GatwayHost应用》 https://blog.csdn.net/xingzhibo/article/details/107907184

2.Silicon Labs官方的gateway开发指导手册:《ug129-zigbee-gateway-ref-design-guide.pdf》

3.Silicon Labs官方在B站上的视频教学(其中LCGW-Training-Day 3-1_Intro为gateway在freeRTOS中的移植介绍)https://space.bilibili.com/605447248/channel/detail?cid=154303

4.Silicon Labs官方在github上的教学资源https://github.com/MarkDing/IoT-Developer-Boot-Camp/wiki/Zigbee

开发工具和SDK

  1. 芯科EmberZNet SDK 6.7.5.0
  2. Simplicity Studio V4

Host软硬件环境

Host环境

型号

操作系统

编译工具链

包含功能

可用性

移植工作量

PC

虚拟机:2核CPU,4G内存,50G硬盘

Ubuntu18.04

gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)

全部功能:设备入网、设备管理、命令行控制、设备绑定、OTA升级、mqtt对接等

非常稳定,可用性高。

ESP32

ESP32-WROOM-32D  Flash:8MB  SRAM 536KB

freeRTOS

xtensa-esp32-elf-gcc  gcc version 8.2.0 (crosstool-NG esp-2019r2)

大部分功能:设备入网、设备管理、命令行控制、设备绑定、OTA升级、mqtt对接等

比较稳定,可用性高。

较小。

生成给ESP32调用的静态库,大概需要调整10几处

STM32

STM32F407VGT6 核心版 Flash:1MB  SRAM 192+4KB

freeRTOS

gcc version 10.2.1 20201103 (release) (GNU Arm Embedded Toolchain 10-2020-q4-major) 

部分功能:设备入网、设备管理、命令行控制、设备绑定、mqtt对接

不稳定,主要引发异常的地方是使用esp8266连接互联网、mqtt部分。

较多。

生成给STM32调用的静态库,大概需要调整20几处;如果需要连接mqtt,需要引入带mqtt功能的esp8266模块。

NCP软硬件环境

使用EFR32MG21A020F768IM32模组(某宝上购买)作为NCP

在Silicon Labs官方的开发指导文档中,操作过程一般都是基于他们的开发板来进行的;所以如果没有开发板,直接使用模组进行开发的,需要做以下调整

1)bootloader-uart-xmodem项目Plugin中的GPIO activation 需要配置BTL_BUTTON的管脚,否则可能编译时会出现错误信息,无法编译通过。(我这里是随便配的,只要和host-ncp的串口通讯管脚不冲突即可)

2)ncp-uart-sw项目Plugin中的NCP-Uart需要配置ncp通讯使用的uart端口和uart管脚。

配置uart通讯端口

配置uart管脚

备注:如果后续要把模组用于其他项目的测试,不再作为NCP使用;例如测试官方的Z3LightSoc、Z3SwitchSoc例子,记得要先重新烧录合适的bootloader进行替换,例如bootloader-storage-internal-single固件;否则可能出现模组没有响应,或Z3LightSoc、Z3SwitchSoc应用无法正常加载的情况。

Host工程配置注意事项

1.默认的Host工程生成后,是不带mqtt功能的,所以需要手工在plugin中增加以下组件

- Paho MQTT
- cJSON
- Gateway MQTT transport
- Gateway Relay Mqtt
- Device Table
- Command Relay

在Host的工程介绍里面有提到

2.mqtt服务器的地址和端口以及订阅主题前缀,可以在Gateway MQTT transport插件中配置,它们的宏定义在工程目录下的“Z3GatewayHost.h”

3.项目工程目录和SDK目录尽量放在相对较近的位置,如下图所示。因为芯科的SDK目录、文件较多,嵌套较深,在编译的时候相对路径较长,可能导致操作系统或者Simplicity Studio找不到对应的资源文件。

工程将以相对路径方式链接编译资源

Ubuntu环境的调整

按照前面的“参考文档”的步骤说明,在Ubuntu下进行项目编译,基本是没问题的,但为了后续更加方便地迁移到ESP32和STM32平台,也做了相关调整,记录如下:

1.采用虚拟机的方式快速搭建编译环境。

1)利用乐鑫开源的一个AT项目中提供的虚拟机,直接导入Ubuntu18.04环境,虚拟机中已经安装好标准的gcc环境、乐鑫交叉编译环境、esp-idf、esp8266 sdk等,省去很多编译环境安装工作。(后续编译esp32静态库、修改esp8266 at命令都比较简单)。

2)乐鑫开源项目esp-at地址如下:https://gitee.com/EspressifSystems/esp-at

3)虚拟机下载地址如下:http://download.espressif.com/esp_share/env/ubuntu1804.ova

虚拟机加载后,桌面背景有基本的使用说明

4)通过gcc –v命令可以看到虚拟机中gcc版本是7.5.0,因此后续的编译生成将是基于gcc 7.5.0进行。

2.调整Makefile文件

1)不使用readline库、ncurses库:查看Makefile 文件416行附近,可以看到项目默认会引用两个外部lib,“readline”和“ncurses”。因为大部分linux环境下默认都没有这两个lib(MCU环境更加没有),使用的话需要另外安装。但在测试的时候,可以不使用这两个lib,也能正常跑起来使用全部功能。所以,我们在Makefile的顶部,定义NO_READLINE宏NO_READLINE ?= 1,编译的时候不使用这两个库。

备注:“readline”和“ncurses”库的使用,主要在SDK的“protocol/zigbee/app/util/serial/linux-serial.c ”文件中体现,可以看到SDK已经预留不使用这两个库的功能实现。


以上为Ubuntu环境下host应用编译的注意事项和调整的地方,在其他Linux环境,如centOS 7环境,也是类似。

把项目文件和sdk复制到虚拟机中(保持项目目录和sdk目录的相对路径一致);然后进入工程目录。

使用make命令,编译项目。

项目成功编译后(虚拟机大概需要几分钟,编译的时候最好暂时关闭杀毒软件),在Z3GatewayHost项目目录下,生成了build/exe目录;里面有Z3GatewayHost的可执行文件。

进入exe目录,执行./Z3GatewayHost –help命令,可以看到程序的帮助说明。

至此,Z3GatewayHost程序生成成功。

Host应用简单测试

1.用USB-串口线,将已经烧录好bootloader、ncp程序的模组与电脑连接。(确保串口线的TX、RX接到正确的NCP管脚)

2.如果是采用ESP32虚拟机的,需要将USB映射到virtualBox虚拟机上,如下图所示:

3.进入Z3GatewayHost可执行目录,运行  sudo ./Z3GatewayHost -n 0 -p /dev/ttyUSB0  命令,启动网关应用。其中/dev/ttyUSB0  为串口线USB设备在linux中的名称(可在/dev目录下查询)。

4.启动后,看到以下信息,代表网关启动成功。

5.直接在命令行中输入info命令,会输出NCP相关的Zigbee信息(和芯科SOC应用一样,可以通过cli命令行来进行各种插件功能操作)

关于日志输出

1.可以在启动host应用的时候,通过-t参数指定不同的日志输出,如下图所示:

2.SDK中提供了将Host-NCP串口通讯的数据记录到文件的功能,但需要在代码级别打开此功能。具体是在"\protocol\zigbee\app\ezsp-host\ezsp-host-io.c"中,如下图所示

取消宏

//#define ENABLE_HOSTIO_DEBUG       // must define to enable any debug option
//#define IO_LOG "ezspuart.log"     // log serial data read or written to a file

的注释后,重新make编译项目,启动应用后,会在exe目录中生成ezspuart.log日志文件,里面会清晰记录host和NCP之间的通讯流程。

这个日志文件可以作为后续将网关移植到其他平台时,Host与NCP之间串口通讯数据传输正确与否的重要依据。

接下来,将记录如果通过cli命令行方式或芯科提供的gateway-management-ui(基于nodejs、reactui的web应用)方式,测试ZigBee主要功能。

gateway-management-ui也是一大堆坑,必须认真记录一下。

基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(-)-Z3GatewayHost应用相关推荐

  1. 基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(三)-移植到ESP32平台(1)

    相关系列文章 基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(-)-Z3GatewayHost应用搭建 基于芯科Host-NCP解决方案的Zigbee 3.0 Gate ...

  2. 基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(二)-使用gateway-management-ui

    相关系列文章 基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(-)-Z3GatewayHost应用搭建 基于芯科Host-NCP解决方案的Zigbee 3.0 Gate ...

  3. ZigBee 3.0实战教程-Silicon Labs EFR32+EmberZnet-2-02:芯科的软件解决方案Gecko SDK

    [ 源码. 文档. 软件. 硬件. 技术交流. 技术支持, 入口见 文末] [所有相关 IDE. SDK和 例程源码均可从群文件 免费获取, 免安装, 解压即用] 持续更新中,欢迎关注! 虽然Sili ...

  4. 2018FME博客大赛-基于FME的不同比例尺线面要素 一致性检测关键技术研究

    编  写:曹 文 涛 武汉市测绘研究院 二○一八年三月 概述 随着地理信息系统技术的不断发展和广泛应用,各省市国土测绘部门都纷纷建立起了各种比例尺的基础地理信息数据库,其提供的矢量地理数据为社会各行业 ...

  5. 国科金:共融机器人基础理论与关键技术研究重大研究计划

    来源:学术头条 国家自然科学基金委员会现发布共融机器人基础理论与关键技术研究重大研究计划 2022 年度项目指南,请申请人及依托单位按项目指南中所述的要求和注意事项申请. 国家自然科学基金委员会 20 ...

  6. ZigBee 3.0实战教程-Silicon Labs EFR32+EmberZnet-2-01:芯科的硬件解决方案EFR32

    [源码.文档.软件.硬件.技术交流.技术支持,入口见文末] [所有相关IDE.SDK和例程源码均可从群文件免费获取,免安装,解压即用] 持续更新中,欢迎关注! Silicon Labs提供可用作Zig ...

  7. 国内android应用商城中程序隐私泄露分析,基于数据生命周期的Android应用程序隐私泄露分析技术研究...

    摘要: 目前,随着智能手机应用市场的发展与成熟,用户在方便地使用各类型应用的过程中亦会产生大量隐私数据,隐私泄露已成为智能手机平台的一个严重安全问题.由于Android平台的开放性,该问题更为突出,不 ...

  8. 【无标题】(论文阅读)基于蚁群算法的现代藏文字符轮廓提取技术研究-孙淑娟

    一.摘要 由于对字符提取骨架往往会失去受污损部位的重要信息,因此本文提出了一种基于蚁群算法的现代藏文字符轮廓提取 算法‚旨在用字符的轮廓线代替骨架线来表征字符.本算法用于印刷体藏文轮廓提取‚取得了良好 ...

  9. 文献拜读小记:7.基于深度学习的图像与无线信号的融合定位关键技术研究

    基于无线信号的室内定位技术 具有计算复杂度低.可实现性强的优点,但存在多径.非视距干扰.特征空间区分度不够等缺点; 基于计算机视觉的室内定位技术 具有能获得大量稳定的环境信息的优点,但存在计算复杂度高 ...

最新文章

  1. java正则表达式获取指定两个字符串之间内容
  2. jquery sortable简述
  3. 从(0,0)到(n,n)——广度优先及其改进
  4. 终极指南:如何使用Visual Studio Code进行 Java 开发?
  5. 必须实现继承的抽象方法
  6. 什么是服务器的SSL PSE
  7. Mysql探究与学习大纲--主要是为了自己复习方便
  8. 联通最全最新路由表【两种表示方式都在】
  9. 自写小函数处理 javascript 0.3*0.2 浮点类型相乘问题
  10. 5.1 Attention(注意力)概述 原理、作用、计算流程
  11. python抽学号程序_Python 9行代码来随机抽学生回答指定问题
  12. Java基础常见面试题及详细答案(总结40个)
  13. c语言汽车租赁平台报告,汽车租赁系统项目报告.doc
  14. 高中计算机课听课记录表,信息技术课听课记录
  15. 网站不收录怎么解决问题?三个SEO技巧秒收实例
  16. 第六十一期:中国农民花3000块,发明史上最牛输入法!曾火遍中国20年
  17. 设置计算机ip地址时网关的作用是什么,IP地址小课堂:起到门户作用的网关到底有多重要?...
  18. 联想拯救者15isk清灰_清灰和升级容易 联想拯救者14拆机解析
  19. 常见图片格式(HTML)
  20. ORA-00001: unique constraint (...) violated解决方案

热门文章

  1. ActionScript语言函数重载
  2. vant 表单按钮置灰_Vant Button 按钮
  3. 跨境电商运营 | 如何利用Instagram进行电子商务营销
  4. 人生没有白读的书,每一本都算数~
  5. python数据分析 | seaborn绘图学习
  6. python 爬取豆瓣的美剧
  7. M资源,每个进程最多N个资源,最多几个进程不会发生死锁
  8. app小窗口悬浮工具_侧边栏 app小窗口悬浮工具
  9. 2021-01-20
  10. Unity如何接入应用内购In-AppPurchase