【分享】多模网关快速开始

网关设备, 语音中控设备等
Post Reply
shuangshuang.ruan
Posts: 7

多模网关 是一款网关核心板,您可以用来用来熟悉 涂鸦 IoT 开发平台 接入的开发流程,提高后续产品开发效率。同时,也能作为产品预研阶段的快速验证,并快速搭建演示 DEMO。

一、产品详情

多模网关在硬件上集成了蓝牙模组和 Zigbee 模组,软件上使用 SSD202D TuyaOS 产物包,可零代码实现网关智能化。您无需任何适配,可接入涂鸦生态的所有 Zigbee 子设备和蓝牙子设备。

二、快速开始

目录结构

  • 开发包整体目录结构如下:

    Code: Select all

    	├── hardware                  # 硬件手册,存放涂鸦自研硬件资料
    	├── pc
    	│    └── tools                # 工具类目录,存放各种开发相关工具
    	├── software
    	│    ├── packages             # SDK 压缩包
    	│    ├── SDKInformation.json  # SDK 信息文件
    	│    └── TuyaOS               # SDK 开发包目录
    	│        ├── apps             # 应用示例代码目录,开发者可以根据需求修改
    	│        ├── build
    	│        ├── build_app.sh     # 编译脚本
    	│        ├── CHANGELOG.md
    	│        ├── doc              # API 文档
    	│        ├── include          # SDK 头文件
    	│        ├── libs             # SDK 库文件,开发者可以按需链接
    	│        ├── LICENSE          # Tuya MIT License
    	│        ├── Makefile
    	│        ├── output           # 产物输出目录
    	│        ├── README.md
    	│        ├── scripts
    	│        └── vendor           # 工具链,编译时会自动把工具链下载到该目录下
    	└── tuya.json
  • TuyaOS > apps > demo 目录结构:

    Code: Select all

    	├── application_components       # 网关开源组件
    	├── application_drivers          # 网关开源驱动
    	├── app.mk
    	├── audio                        # 音频源码文件
    	├── build                        # 网关工程需要包含的资源
    	├── build.conf
    	├── build.sh                     # 编译脚本
    	├── doc                          # 说明文档
    	├── include                      # 源码头文件
    	├── key                          # 按键源码文件
    	├── led                          # KED 源码文件
    	├── Makefile                     # 编译 Makefile
    	├── package.json
    	├── README.md                    # README
    	└── src                          # 源码文件
  • TuyaOS > apps > demo > build 目录结构:

    Code: Select all

    	├── board
    	│    ├── audio_file              # 语音资源
    	│    ├── keyname.txt             # 固件名称记录,用于模组产测,修改固件 key 名称后需要及时修改此文件记录内容。固件名称不是项目名称
    	│    ├── startup.sh              # 启动脚本,系统启动后会先执行此脚本,一般不要修改
    	│    └── unpack                  # 解压升级包程序
    	├── image
    	│    ├── app_upgrade.sh          # 当 OTA 时会调用此脚本
    	│    ├── async_run.sh
    	│    ├── config.json             # 网关信息配置
    	│    ├── json_parser.sh
    	│    ├── prod_upgrade.sh         # 当使用批量升级工具升级时会调用此脚本
    	│    ├── show_net_stat.sh        # 打印显示一些网络状态
    	│    ├── start_record.sh
    	│    ├── tuya_start.sh           # 开始运行网关工程
    	│    ├── tuya_user1
    	│    │    ├── app_detect.sh        # 监控程序是否运行
    	│    │    ├── app_stop.sh          # 网关程序停止
    	│    │    ├── config.json          # 网关信息配置
    	│    │    ├── debugtool            # 对 Zigbee 的调试工具,可以获取如 Zigbee 网络信息
    	│    │    ├── log_detect.sh        # 日志监控脚本,对日志进行归档打包
    	│    │    ├── process_monitor.sh      # 软喂狗监控程序
    	│    │    └── tuya_start_children.sh  # 主程序启动
    	│    ├── udhcpc.script           # 有线 dhcp 脚本
    	│    ├── udhcpd.conf             # 有线 dhcp 配置
    	│    └── wlan0_udhcpc.script     # 对 wlan0 的 dhcp 配置
    	├── image_create.sh              # QIO 和 OTA 打包脚本,将会调用 BSP 打包工具
    	├── pack.sh                      # 工程打包脚本
    	├── rcp_image
    	│    └── si_rcp_uart_mg21_OTA_1.4.3.bin   # RCP OTA 固件
    	└── third_image                   # 第三方开源包

配置

在编译固件之前,您需要修改一下配置,把 PID 修改成在 涂鸦 IoT 开发平台 创建的网关产品 PID。

配置文件位于 TuyaOS > apps > demo > build > image > tuya_user1 > config.json

![img](https://images.tuyacn.com/fe-static/doc ... 507bce.jpg)

配置文件 config.json 详细解析如下:

基本格式

Code: Select all

 {
     "pid": <xxx>,
     "uuid": <...>,
     "authkey_key": <...>,
     "ap_ssid": <... optional>,
     "ap_password": <... optional>,
     "log_level": <level>,
     "storage_path": <...>,
     "start_mode": <xxxx>,
     "tuya": {
         "zigbee": {
                       "storage_path": <xxx, string>,
                       "cache_path": <xxx, string>,
                       "dev_name": <xxx, string>,
                       "cts": <xxx, number>,
                       "thread_mode": <xxx, number>
         },
         "bt": {
                   "enable_hb": <xxx, number>,
                   "scan_timeout": <xxx, number>,
                   "mode": <xxx, number>
         }
     },
     "user": {
         [ { "tp": <DEV_ATTACH_MOD_X, number>, "sw_ver": <version, string> }, ... ]
     },
 }

编译

本小节将会介绍在 VSCode 上编译 THP104-ZBX 固件。

  1. 展开开发包的 TuyaOS > apps 目录,选择 demo 目录,并单击右键,在菜单中选择 Build Project,再输入版本号按下回车键,开始编译。

    ![img](https://images.tuyacn.com/fe-static/doc ... 00f6a8.jpg)

  2. 观察 VSCode 下方的 终端,会看到编译的输出打印。直到看到如下图所示打印时,代表编译成功,生成的固件位于 output 目录下。

    ![img](https://images.tuyacn.com/fe-static/doc ... c51e65.jpg)

    固件说明:

    • demo_fw_QIO_<版本号>.bin:全量固件,用于整片 Flash 烧录,需要进入 U-boot 进行烧录,详细参见《THP104-ZBX QIO 烧录指南.pdf》。

    • demo_fw_UG_<版本号>.bin:OTA 固件,用于固件升级,可以上传到涂鸦 IoT 开发平台进行远程 OTA 升级。

    • demo<版本号>debug:保留符号表的主程序,用于 GDB 调试等场景。

    • gateway.tar.gz:程序包的压缩包,用于临时调试,可以加速调试进程,详见 [简易调试]章节。

      :::info
      在编译 vendor 时候,64 位系统需要安装 32 位运行库和编译库。
      :::

运行

前置工作基本完成了,接下来您可以运行示例程序,查看效果。

您可以把 OTA 固件烧录到 THP104-ZBX 开发板上,详见 [OTA 烧录]。烧录完成后,断电重启设备。

THP104-ZBX 支持有线配网和热点配网,您可以用涂鸦智能 App 来激活网关,App 详细教程请参考 使用指南

上传 OTA 固件

详细步骤请参考文档 固件升级

串口登录

您可以通过串口方式登录到 THP104-ZBX 开发板后台,便于开发调试。

  • 串口默认波特率为 115200

  • 用户名为 root

  • 默认密码为 tygw@SSD20x

    :::important
    若默认密码不正确,请联系 提交工单 涂鸦客户支持,提供 S/N。
    :::

调试串口的位置如下图所示:

![img](https://images.tuyacn.com/fe-static/doc ... 65107a.png)

简易调试

由于 OTA 固件升级需要擦除和写入 Flash,并且需要重启系统才能生效,在开发调试过程比较消耗时间。因此,您可以使用 gateway.tar.gz 将程序解压缩到运行目录,手动运行程序,这样可以方便您进行调试,节省开发时间。

  1. 电脑安装 TFTP Server,并将 gateway.tar.gz 放在 TFTP Server 的目录下。

  2. 通过串口方式登录到 THP104-ZBX 后台,详见 串口登录

  3. 在 THP104-ZBX 后台执行压缩包下载命令:

    Code: Select all

    	cd /tmp && tftp <tftp 服务器 IP 地址> -gr gateway.tar.gz
  4. 在 THP104-ZBX 后台执行停止程序命令:

    Code: Select all

    	/tmp/tuya/tuya_user1/app_stop.sh
  5. 在 THP104-ZBX 后台执行压缩包解压命令:

    Code: Select all

    	cd /tmp && echo "tuya_start_dir=/tmp/tuya/tuya_user1" > /tmp/tuya/start.conf;tar -C /tmp/tuya -xvf gateway.tar.gz
  6. 在 THP104-ZBX 后台执行启动程序命令:

    Code: Select all

    	/tmp/tuya/tuya_start.sh /tmp/tuya

    程序启动后,可以执行 ps 命令观察 tyZ3Gw 程序是否运行。

  7. 在 THP104-ZBX 后台执行实时日志打印命令:

    Code: Select all

    	tail -f /tmp/tuya.log

OTA 烧录

本小节将会介绍如何在 THP104-ZBX 开发板烧录 OTA 固件,需要通过串口登录到后台,登录方法请参见 串口登录

  1. 电脑安装 TFTP Server,并将 OTA 固件放在 TFTP Server 的目录下。

  2. 通过串口登录到 THP104-ZBX 后台,详见 串口登录

  3. 在 THP104-ZBX 后台执行固件下载和升级命令:

    Code: Select all

    	cd /tmp && tftp <tftp 服务器 IP 地址> -g -l <固件文件名> && unpack -f <固件文件名>
  4. 升级完成后断电重启。

三、全量烧录

本小节将会介绍如何在 THP104-ZBX 开发板烧录全量固件。烧录全量固件需要在串口以下操作均在 THP104-ZBX 后台完成,需要通过串口登录到后台,登录方法请参见 [串口登录]。

数据备份

烧录全量固件将会把整片 Flash 擦除,然后写入 128MB QIO 固件。所以,在烧录之前,您要把开发板上的授权信息进行备份,待烧录完成后,把数据进行恢复。

备份授权信息

  1. 执行 nvram show,把打印的信息拷贝备份到电脑上。

  2. 烧录完固件后要通过 nvram set <key> <value> 命令写入。

  3. 写入完成后执行 nvram commit 写入 Flash。

    需要备份以下 key 的内容:

    • country

    • AUTHKEY

    • slave_mac1

    • bsn

    • master_mac

    • UUID

进入 UBoot

默认是禁用进入 UBoot 的,需要先登录到开发板的后台把运行进入 UBoot 标志打开。

执行 nvram set persist.uboot.enter on && nvram commit,然后断电重启,在重启过程不停地按 Enter 键,就会进入 UBoot。

![img](https://images.tuyacn.com/fe-static/doc ... 5a7ca4.png)

固件烧录

  1. 终端上要设置下 serverip(电脑 IP)和 ipaddr(设备 IP,默认是 192.168.1.55),终端输入:pri 可以看到当前的 IP 情况

  2. 输入 setenv serverip xxxxsetenv ipaddr xxxx 后,网线插上后,输入 ping 指令,ping xxxxx(设置的 serverip),出现 alive,说明网络通畅

  3. demo_fw_QIO_<版本号>.bin 放到 TFTP 的路径下(TFTP 开启 Server 服务,并且在 Setting 里面已绑定 TFTP 到电脑服务端 IP)

    ![img](https://images.tuyacn.com/fe-static/doc ... 605c76.png)

  4. 终端输入 tftp 0x21000000 demo_fw_QIO_<版本号>.bin 上传,务必确认上传 100% 成功。

    ![img](https://images.tuyacn.com/fe-static/doc ... 4c73c7.png)

  5. 终端输入 nand erase.chip

  6. 终端输入 nand write 0x21000000 0x0 ${filesize}

  7. 网关重新上电,或者在终端输入 res 重启设备

    ![img](https://images.tuyacn.com/fe-static/doc ... da889f.png)

    ![img](https://images.tuyacn.com/fe-static/doc ... 3d784f.png)

全量固件烧录较久,请耐心登录烧录完成,烧录完成断电重启即可。

数据恢复

全量固件烧录完成并重启后,最后一个步骤是把在 数据备份 章节备份的数据重新写入到 Flash。

示例:

Code: Select all

# nvram set country CN
# nvram set AUTHKEY h8eHMxNGVCUxzsKLCd2cmgAgFwI6OUaY
# nvram set slave_mac1 105a17f3cc2b
# nvram set bsn JDCJ30UTU00009
# nvram set master_mac 105a17f3cbf2
# nvram set UUID 1420ee8d85e3a146
# nvram commit

四、安全设置

作为网关,安全是十分重要的,本 Demo 出于二次开发的方便,会开放一些限制,供您自行设置。

:::important
建议您后续对 Demo 中的安全选项进行修改。
:::

root 密码

开发板默认密码为 tygw@SSD20x,建议及时修改 root 密码,修改指令为:echo root:password | chpasswd -m,将 password 替换为自定义密码即可。

SSH

SSH 的开启可能会遭受到骇客的远程试探和攻击。不使用远程登录时,建议关闭 SSH,并且修改默认端口,都可以起到一定的防范作用。

打开 build/board/startup.sh 文件,将 dropbear -p 22 注释,系统启动时就不会自动开启 SSH,需要开启时执行此命令即可。通过修改 -p <端口号> 来自定义端口。

可执行程序

release 版的可执行程序应该是经过 strip 的,本 Demo 中,已在 pack.sh 对可执行程序进行了 strip。

U-Boot

:::info
在不使用的情况下,建议关闭 U-Boot。
:::

  • 关闭设置:

    Code: Select all

    	nvram set persist.boot.enter off
    	nvram commit
  • 打开设置:

    Code: Select all

    	nvram set persist.boot.enter on
    	nvram commit

其它安全建议

除以上方法,在商用时建议还进行以下安全方法补充:

  • 通过涂鸦的云服务对设备进行 OTA 升级,且 OTA 固件进行校验。您也可对固件自定义加签解签。
  • 移除物理调试接口,如 JTAG/SWD 等。开发板已经进行了移除,如自行打板请注意此项。
  • 日志信息中不包含任何敏感数据,如 UUID、AUTHKEY、密码等。
  • 无涂鸦服务之外的本地网络端口占用。
  • 无涂鸦服务之外的远程网络服务访问。
  • 所有网络交互的数据,仅限上传至/下载自设备所在或法律允许的国家/地区的服务器。
  • 无 web server、telnetd 等本地网络服务。
  • 固件内不包含硬编码的敏感信息。

五、如何申请白名单

在 TuyaOS Wind IDE 插件中,按以下步骤申请:

![产品开发包](https://images.tuyacn.com/fe-static/doc ... a1044c.png)


Tags:
Post Reply