86Box

86box 中控是智能家居系统的重要组成部分,具有集中管理和控制各种智能家电的功能。其设计类似普通开关插座,可以方便地安装在墙壁上或嵌入墙壁内。用户只需通过手机、平板等专用应用,即可远程控制空调、电视、灯光、窗帘、门锁等各类设备。86box中控使家庭智能化管理变得尽心且便捷,极大提升了家庭生活质量。

概述

本文介绍了基于 Realtek RTL8772GWP 的 86box Smart Home 方案相关信息,旨在帮助用户搭建开发环境,包括了解 SDK、编译和烧录固件及系统测试方法等。开发者可烧录 SDK 中的测试文件,确保开发环境配置得当、EVB 可以正常工作。

备注

  • 本文所述示例方案采用 Realtek RTL8772GWP EVB,搭配 st7701s 驱动的 RGB(480 * 480) LCD 显示、gt911 驱动的触控屏模组,开发者若选用本文相同的硬件环境,可直接运行 SDK 中的样例工程。

  • 如需适配其他型号的显示屏和输入设备,请参考 移植,适配到新的显示和输入设备驱动。

  • Realtek RTL8772GWP 芯片支持的显示接口:i8080、qspi/spi、RGB888/RGB565。

实用案例

下图显示了 86box 应用包含的模块:

../../../../_images/fig_module.jpeg

86box 系统模块组成

支持功能

Realtek 86box 应用程序提供完备功能支持:

  • 支持蓝牙 mesh 1.1/1.0 协议

  • 支持 Matter 协议

  • 支持 Wi-Fi 入网

  • 支持可视化 UI 开发

环境需求

  1. RTL87x2GWP EVB

  2. LCD 屏幕模块

  3. Wi-Fi模块

  1. ARM Keil MDK: ArmMDK

  2. MPTool_kits: RealMCU

  3. DebugAnalyzer: RealMCU

  4. RVisualDesigner: RealMCU

  5. scons 4.4.0: python 环境运行 pip install scons==4.4.0

  6. GCC: Matter arm-gcc

  1. Mesh dongle 模块

  2. Matter 设备

硬件连线

EVB

EVB 提供了用户开发和应用调试的硬件环境。86box 应用使用 Model B EVB 进行演示,EVB 由母板和子板组成。EVB 具有下载模式和工作模式,下载模式用于烧录固件等功能,工作模式为正常运行应用程序模式,开发者需要配置 EVB 以进入所需的模式。有关 EVB 母板的详细介绍和使用方法请参阅 评估板指南

../../../../_images/fig_evb.png

86box EVB 接线

Wi-Fi模块

Wi-Fi模块在EVB上的安装方法请参考 Wi-Fi 文档中 硬件连线 章节。

配置选项

SDK 中 86box 方案的配置在 SDK\applications\86box\proj\menu_config.h 中,默认配置如下:

 #define CONFIG_REALTEK_BUILD_GUI_OS_HEAP      /* RTK GUI Use OS Heap */

// #define CONFIG_REALTEK_BUILD_MATTER_SWITCH  /* Enable Matter Switch */
#define CONFIG_REALTEK_BUILD_MESH_SWITCH   0   /* Enable Mesh Provisioner, 0: disable, 1: enable */
#define CONFIG_REALTEK_BUILD_WIFI_NIC    0     /* Enable WIFI NIC, 0: disable, 1: enable */

备注

当配置修改后,根据所支持的编译方式重新构建工程后配置生效,构建方法请参考 编译和下载 步骤。

  • CONFIG_REALTEK_BUILD_GUI_OS_HEAP:配置是否使用内部 RAM 为主 RAM 资源,可配置为 PSRAM 作为主 RAM 资源。

  • CONFIG_REALTEK_BUILD_MATTER_SWITCH:配置是否使能 Matter 模块, Matter 模块仅支持 GCC 编译。

  • CONFIG_REALTEK_BUILD_MESH_SWITCH:配置是否使能 Mesh 模块, Mesh 模块仅支持 arm-compiler 编译。

  • CONFIG_REALTEK_BUILD_WIFI_NIC:配置是否使能 Wi-Fi模块, Wi-Fi模块仅支持 arm-compiler 编译。

编译和下载

请参阅 快速入门 进行编译和下载。值得注意的是:

  1. 生成Flash Map 步骤:
    开发人员需要根据 SDK\applications\86box\proj\flash_map.h 生成 flash_map.ini
  2. 务必使能 psram power,其他功能可根据需要进行配置。
../../../../_images/fig_system_config.png

system config enable psram power

  1. 编译APP Image 步骤:

    1. 86box SDK 工程路径为:SDK\applications\86box\proj

    2. keil MDK 工程路径为: SDK\applications\86box\proj\mdk

    3. 当修改了工程的配置后,需要重新构建工程,将会生成全新工程文件,覆盖原有的工程文件。

    4. 构建工程时,在工程路径下打开 cmd 窗口。

      1. 对于支持 arm-compiler 的工程,运行命令 scons --target=mdk5 构建 mdk 工程,打开 mdk 工程进行编译,APP image 将生成在以下路径中:SDK\applications\86box\proj\mdk\bin

        SDK\applications\86box\proj> scons --target=mdk5
        scons: Reading SConscript files ...
        ...
        CC xxxx.o
        CC xxxx.o
        ...
        LINK app.elf
        fromelf --bin app.elf --output rtthread.bin
        fromelf -z app.elf
        scons: done building targets.
        
      2. 对于支持 gcc 的工程,运行 scons 构建并编译工程,APP image 将生成在工程路径下。

        SDK\applications\86box\proj> scons
        scons: Reading SConscript files ...
        ...
        CC xxxx.o
        CC xxxx.o
        ...
        arm-none-eabi-size app.elf
        text    data     bss     dec     hex filename
        974942       0  221424 1196366  12414e app.elf
        ..\..\..\tools\md5\md5.exe app_MP.bin
        MD5 v1.0.4
        Output Image: app_MP_sdk_1.0.5.16_5870d5e6-ecdd77cad50adfc46b584686317c7199.bin
        scons: done building targets.
        
  2. 生成和下载 User Data:

    1. 请使用 MP Tool 的 User Data 功能下载 root(0x4600000).bin,写入地址: 0x04600000

    2. demo User Data 路径:SDK\subsys\gui\gui_engine\example\screen_480_480\

    3. 当使用 RVisualDesigner 导出自定义的 UI 时,路径: RVisualDesigner prj\Export\bin

测试验证

UI 测试流程

  1. 正确完成烧录固件及 UserData 后,令 EVB 切换到工作模式,复位重启。

  2. 设备重启后可以看到有 “小鸟” 图标,点击 "小鸟" 进入应用,应用内部具有多个横向标签页,左右滑动可顺序切换,底部圆点标识当前标签页位置,点击可快速跳转。标签页包括主页面、开关页面、空调页面、窗帘页面和 wifi 测速页面,每个页面中的控件如按键等可进行交互。更多控件的交互演示,请参阅 示例 86box 应用程序

../../../../_images/fig_uiDemo.png

86box UI 演示

Mesh 测试流程

  1. 在工程中配置使能 Mesh 模块,构建编译,烧录下载。

  2. 将 Mesh Dongle 上电,并保证 dongle 上的开关为 ON 状态,当开关拨至 ON 状态时,Dongle 闪烁一次。

  3. EVB 重启后点击 “小鸟”图标进入 86box 应用,滑动至开关页面,点击对应开关可观察到 Mesh Dongle 亮起或关闭,且与屏幕上灯状态一致。

  4. 有关 Mesh 功能详细的介绍和测试请参阅 Mesh Provisioner

../../../../_images/fig_meshDemo.png

86box mesh 演示

Matter 测试流程

  1. Matter照明开关的编译部分请参考 照明开关 文档中的 编译 章节,生成的Matter静态链接库将被包进86box 应用程序。

  2. 在工程中配置使能 Matter 模块,构建编译,烧录下载。

  3. 设备配网、绑定和照明控制的测试过程请参考 照明开关 文档中的 测试验证 章节。使用86box 应用程序替换原照明开关应用程序。

Wi-Fi测试流程

  1. 在工程中配置使能 Wi-Fi 模块,构建编译,烧录下载。

  2. Wi-Fi扫描、连接等功能的测试过程请参考 Wi-Fi 文档中 测试验证 章节。

软件设计介绍

本章主要介绍 RTL8772GWP 86box 解决方案的软件相关技术参数和行为规范,为 86box 的所有功能提供软件概述,包括 GUI 任务、 Mesh 通信任务、Matter 通信任务、Wi-Fi 通信任务等行为规范,用于指导 86box 的开发和追踪软件测试中遇到的问题。

源代码目录

  • 工程文件目录: sdk\application\86box\proj

  • 源代码目录: sdk\application\86box\src

86box SDK中的源文件目前分为以下几类:

└── Project: 86box
    └── app                            includes the 86box user application implementation
        ├── menu_config.h              project construct configurations
        ├── main.c
        └── 86box_init.c
    ├── lib
    ├── device
    ├── peripheral                     includes all peripheral drivers and module code used by the application
    ├── profile                        includes BLE profiles or services
    ├── dfu
    ├── dfu_task
    ├── rtk_gui                        includes all gui porting
        ├── gui_port_acc.c
        ├── gui_port_dc.c              display controller port
        ├── gui_port_filesystem.c      filesystem api port
        ├── gui_port_ftl.c
        ├── gui_port_indev.c
        └── gui_port_os.c              os api port
    ├── realgui/3rd
    ├── JerryScript
    ├── JerryScriptPort
    ├── realgui/app
    ├── realgui/dc
    ├── realgui/engine
    ├── realgui/input
    ├── realgui/misc
    ├── realgui/SaaA                   includes js middle layer function implementation
    ├── realgui/server
    ├── realgui/widget                 includes all the realgui widgets implementation
    ├── database
    ├── fs
    ├── hal_drivers
    ├── lcd_low_driver                 includes display pannel IC driver implementation
    ├── Compiler
    └── touch_driver                   includes touch IC driver implementation
    :
    └── matter_switch                  includes Matter switch function implementation
    :
    ├── mesh switch                    includes mesh driver support
    └── mesh app                       includes mesh application implementation
    :
    └── wifi_nic                       includes wifi nic function implementation

Flash布局

应用程序默认的 flash 布局头文件: sdk\application\86box\proj\flash_map.h

Flash布局说明

Example layout with a total flash size of 16 MB

Size(byte)

Start Address

Reserved

4K

0x04000000

OEM Header

4K

0x04001000

Bank0 Boot Patch

32K

0x04002000

Bank1 Boot Patch

32K

0x0400A000

OTA Bank0

2456K

0x04012000

  • OTA Header

4K

0x04012000

  • System Patch code

32K

0x04013000

  • BT Lowerstack Patch code

60K

0x0401B000

  • BT Host code

212K

0x0402A000

  • APP code

2148K

0x0405F000

  • APP Config File

0K

0x04278000

  • APP data1

0K

0x04278000

  • APP data2

0K

0x04278000

  • APP data3

0K

0x04278000

  • APP data4

0K

0x04278000

  • APP data5

0K

0x04278000

  • APP data6

0K

0x04278000

OTA Bank1

0K

0x04278000

Bank0 Secure APP code

16K

0x04278000

Bank0 Secure APP Data

0K

0x040AC000

Bank1 Secure APP code

0K

0x0427C000

Bank1 Secure APP Data

0K

0x0427C000

OTA Temp

2148K

0x0427C000

FTL

16K

0x04495000

APP Defined Section1

0K

0x04499000

APP Defined Section2

0K

0x04499000

重要

软件架构

系统软件架构如下图所示:

../../../../_images/fig_swArch.png

系统软件架构

  • Platform feature: 包括OTA、Flash、FTL 等。

  • Peripheral driver: 提供对 RTL87x2G 外设接口的应用层访问。

  • OSIF: 实时操作系统的抽象层。

  • GAP: 用户应用程序与 BLE 协议栈通信的抽象层。

  • Application: 应用层包含用户定义的各个应用任务。

任务和优先级

如下图所示,用户应用程序共创建了8个任务:

../../../../_images/fig_swTask.png

任务和优先级

各任务描述及优先级如下表:

任务说明及优先级

任务

描述

优先级

Timer

实现 FreeRTOS 所需的软件定时器

6

BT Controller stack

实现 HCI 以下的BLE协议栈

6

BT Host stack

实现 HCI 以上的BLE协议栈

5

Wi-Fi

完成 Wi-Fi 初始化

2

Mesh

完成 Mesh 初始化

1

Matter

完成 Matte 始化

1

GUI

处理 UI 显示及交互

1

Idle

运行后台任务

0

备注

可以创建多个应用任务,并相应地分配内存资源。

GUI 任务

GUI 任务的软件架构如下图所示:

../../../../_images/fig_swUI.png

GUI 任务软件架构

86box 应用的 GUI 基于脚本语言配合可视化 UI 设计工具 RVisualDesigner 进行开发,开发者使用 UI 设计工具进行 UI 布局设计和资源配置,再使用 JS 脚本语言进行交互逻辑设计。该开发模式和软件架构灵活便捷,利用 JS 中间件和 XML 解析库来对常用控件和交互方式进行封装,能降低开发者学习成本,缩短开发周期。如何使用 JS 脚本和 RVisualDesigner 进行 UI 设计开发,具体请参阅 使用脚本设计应用程序

在 GUI 任务中,GUI 利用 HMI(Human Machine interface) 搭配硬件设备驱动来即时获取和处理用户的交互,包括触屏、显示等,而后 GUI 将信息传给对应的控件,开发者可以在 JS 脚本中通过 api 对用户行为和控件动作进行监听,从而进一步回调处理。此外,GUI 将通过消息队列来实现与其他任务间的信息同步,如 mesh 消息、matter 消息、wifi 消息等。当开发者需要进行移植或适配其他硬件平台时,只需修改相关的接口文件,具体请参阅 移植

Mesh 任务

Mesh 任务的软件架构请参考 Mesh Overview 文档。

Matter 任务

Matter 任务主要用于初始化 Matter 协议栈。Matter 协议栈是基于官方的 Matter GitHub repository 上开发,并且是开源的。

Wi-Fi 任务

Wi-Fi 任务的软件架构请参考 Wi-Fi 文档中 系统架构 章节。