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

相关系列文章

基于芯科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也是一大堆坑,必须认真记录一下。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值