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 应用包含的模块:
支持功能
Realtek 86box 应用程序提供完备功能支持:
支持蓝牙 mesh 1.1/1.0 协议
支持 Matter 协议
支持 Wi-Fi 入网
支持可视化 UI 开发
环境需求
硬件连线
EVB
EVB 提供了用户开发和应用调试的硬件环境。86box 应用使用 Model B EVB 进行演示,EVB 由母板和子板组成。EVB 具有下载模式和工作模式,下载模式用于烧录固件等功能,工作模式为正常运行应用程序模式,开发者需要配置 EVB 以进入所需的模式。有关 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 编译。
编译和下载
请参阅 快速入门 进行编译和下载。值得注意的是:
- 生成Flash Map 步骤:开发人员需要根据
SDK\applications\86box\proj\flash_map.h
生成flash_map.ini
。 - 务必使能 psram power,其他功能可根据需要进行配置。
编译APP Image 步骤:
86box SDK 工程路径为:
SDK\applications\86box\proj
keil MDK 工程路径为:
SDK\applications\86box\proj\mdk
当修改了工程的配置后,需要重新构建工程,将会生成全新工程文件,覆盖原有的工程文件。
构建工程时,在工程路径下打开 cmd 窗口。
对于支持 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.
对于支持 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.
生成和下载 User Data:
请使用 MP Tool 的 User Data 功能下载
root(0x4600000).bin
,写入地址:0x04600000
demo User Data 路径:
SDK\subsys\gui\gui_engine\example\screen_480_480\
当使用 RVisualDesigner 导出自定义的 UI 时,路径:
RVisualDesigner prj\Export\bin
测试验证
UI 测试流程
正确完成烧录固件及 UserData 后,令 EVB 切换到工作模式,复位重启。
设备重启后可以看到有 “小鸟” 图标,点击 "小鸟" 进入应用,应用内部具有多个横向标签页,左右滑动可顺序切换,底部圆点标识当前标签页位置,点击可快速跳转。标签页包括主页面、开关页面、空调页面、窗帘页面和 wifi 测速页面,每个页面中的控件如按键等可进行交互。更多控件的交互演示,请参阅 示例 86box 应用程序。
Mesh 测试流程
在工程中配置使能 Mesh 模块,构建编译,烧录下载。
将 Mesh Dongle 上电,并保证 dongle 上的开关为 ON 状态,当开关拨至 ON 状态时,Dongle 闪烁一次。
EVB 重启后点击 “小鸟”图标进入 86box 应用,滑动至开关页面,点击对应开关可观察到 Mesh Dongle 亮起或关闭,且与屏幕上灯状态一致。
有关 Mesh 功能详细的介绍和测试请参阅 Mesh Provisioner。
Matter 测试流程
Wi-Fi测试流程
在工程中配置使能 Wi-Fi 模块,构建编译,烧录下载。
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
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 |
|
4K |
0x04012000 |
|
32K |
0x04013000 |
|
60K |
0x0401B000 |
|
212K |
0x0402A000 |
|
2148K |
0x0405F000 |
|
0K |
0x04278000 |
|
0K |
0x04278000 |
|
0K |
0x04278000 |
|
0K |
0x04278000 |
|
0K |
0x04278000 |
|
0K |
0x04278000 |
|
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 |
重要
如需调整Flash布局,请参考 快速入门 中 生成Flash Map 的步骤。
调整Flash布局后,必须使用新的
flash_map.ini
重新进行 生成OTA header 和 生成System Config File 步骤。
软件架构
系统软件架构如下图所示:
Platform feature: 包括OTA、Flash、FTL 等。
Peripheral driver: 提供对 RTL87x2G 外设接口的应用层访问。
OSIF: 实时操作系统的抽象层。
GAP: 用户应用程序与 BLE 协议栈通信的抽象层。
Application: 应用层包含用户定义的各个应用任务。
任务和优先级
如下图所示,用户应用程序共创建了8个任务:
各任务描述及优先级如下表:
任务 |
描述 |
优先级 |
---|---|---|
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 任务的软件架构如下图所示:
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 文档中 系统架构 章节。