demo 示例工程
AC792N AIoT SDK(fw-AC792_SDK)中位于 sdk/apps/demo/ 下的 7 个最小功能示例工程集合,用于演示 BLE、经典蓝牙 EDR、WiFi STA/AP、WiFi 扩展联网、音频采集播放、LVGL UI 显示等单项能力,是开发者评估芯片功能、学习 API 用法与创建新工程的起点。
Purpose and Scope
本文档介绍 AC792N SDK 中 demo 示例工程(目录 sdk/apps/demo/)的整体情况,包括:
- 7 个示例工程(
demo_hello、demo_ble、demo_edr、demo_wifi、demo_wifi_ext、demo_audio、demo_ui)各自的用途、路径与编译目标; - 每个 demo 的标准工程目录结构(入口
app_main.c、板级配置board/wl83/、应用配置include/app_config.h等); - demo 与 SDK 公共组件(
sdk/apps/common/)及平台预编译库(sdk/cpu/wl83/liba/)之间的依赖关系; - 编译、烧录与上电运行的整体流程。
不涵盖的内容:sdk/apps/wifi_camera/、sdk/apps/wifi_soundbox/、sdk/apps/wifi_bbm/ 等完整量产方案工程属于各自的方案页面;蓝牙 Profile、音频编解码、LVGL 图形库、WiFi 协议栈等公共组件的内部实现细节由对应的组件页面负责。demo 仅演示这些能力的“最小可用”用法,本文档不重复展开这些底层机制。
开发前请同时阅读 AC792 SDK 在线文档中心,仓库本身不含开发文档,仅含 SDK 代码与示例工程(见 README.md)。
Overview
AC792N 是杰理科技推出的 WiFi 802.11b/g/n + 双模蓝牙 V5.4 AIoT 多媒体 SoC,内部集成主频 320MHz 的双核浮点 DSP,并完整集成音频(ADC/DAC)、视频(DVP/MIPI 摄像头 + ISP)、显示(MIPI/RGB 推屏 + LVGL/AWTK + GPU2.5D)与丰富外设(GPIO、IIC、SPI、UART、USB、ADC、RTC 等)。SDK 为 wl83 平台(AC7921A / AC7922A / AC7922C / AC7923A / AC7923B / AC7923C / AC7925A / AC7925B / AC7925C / AC7926A)提供四类应用工程:wifi_camera、wifi_soundbox、wifi_bbm 与 demo(见 README.md 芯片平台表)。
demo 示例工程的定位:
- 能力展示:每个 demo 聚焦一项(或少量组合)芯片能力,以最小的代码量展示该能力的完整调用链路;
- 参考起点:开发者可以复制某个 demo 工程,在其基础上修改
board/wl83/板级配置与app_main.c业务逻辑,快速搭建新产品原型; - 编译验证:每个 demo 都有独立的 make 目标(如
ac792n_demo_demo_ble),可独立编译出可烧录固件,用于验证开发环境与硬件平台。
典型使用场景:
| 场景 | 推荐 demo |
|---|---|
| 验证编译环境 / 最小系统启动 | demo_hello |
| 低功耗蓝牙数据透传 | demo_ble |
| 经典蓝牙(音乐/SPP/发射/解码) | demo_edr |
| WiFi STA/AP 联网 | demo_wifi |
| 外部 WiFi 模组扩展联网 | demo_wifi_ext |
| 音频采集/播放/编解码 | demo_audio |
| LVGL UI 显示 / 图层 / 触摸 | demo_ui |
Architecture
demo 示例工程并不是孤立的,它们位于 SDK 的应用层,向下依赖公共组件与平台预编译库。整体架构如下:
flowchart TD
subgraph sg_Demos["sdk/apps/demo — 7 个功能示例"]
Hello["demo_hello"]
Ble["demo_ble"]
Edr["demo_edr"]
Wifi["demo_wifi"]
WifiExt["demo_wifi_ext"]
Audio["demo_audio"]
Ui["demo_ui"]
end
subgraph sg_Common["sdk/apps/common — 公共组件"]
Cfg["config(蓝牙 Profile / 用户配置 / 日志)"]
Lvgl["lvgl_v8(LVGL 图形库)"]
end
subgraph sg_Cpu["sdk/cpu/wl83"]
Liba["liba(预编译 *.a 静态库)"]
Tools["tools(烧录工具)"]
end
Hello --> Cfg
Ble --> Cfg
Edr --> Cfg
Wifi --> Cfg
WifiExt --> Cfg
Audio --> Cfg
Ui --> Cfg
Ui --> Lvgl
Ble --> Liba
Edr --> Liba
Wifi --> Liba
WifiExt --> Liba
Audio --> Liba
Ui --> Liba
Hello --> Liba
架构说明:
- 应用层(demo):每个 demo 工程自包含入口(
app_main.c)、板级配置(board/wl83/)与应用配置(include/app_config.h),是开发者主要修改的对象; - 公共组件层(common):
sdk/apps/common/提供蓝牙 Profile 配置、用户配置、日志(config子目录)、LVGL 图形库(lvgl_v8)等可复用能力,所有 demo 共享; - 平台层(cpu/wl83):
sdk/cpu/wl83/liba/存放预编译的*.a静态库(协议栈/驱动),demo 编译时必须链接这些库;sdk/cpu/wl83/tools/提供烧录工具。
该分层设计的意图是:业务代码与平台实现解耦。demo 工程只写应用逻辑与板级差异,芯片驱动、蓝牙/WiFi 协议栈等以预编译库形式提供,既保护了知识产权,也保证了不同工程编译的一致性。
各 Demo 详解
Demo 清单与功能矩阵
README.md 与 README-en.md 明确记录了 7 个 demo 的路径、演示功能与编译目标。其中英文版 README 的 “Functional Demo Matrix” 一节汇总如下(原文见 README-en.md):
| Demo | 路径 | 演示功能 | make 目标 |
|---|---|---|---|
| demo_hello | sdk/apps/demo/demo_hello/ | 最小工程启动(Hello World 类) | ac792n_demo_demo_hello |
| demo_ble | sdk/apps/demo/demo_ble/ | BLE 低功耗蓝牙数据传输 | ac792n_demo_demo_ble |
| demo_edr | sdk/apps/demo/demo_edr/ | 经典蓝牙 EDR(音乐 / SPP / 发射 / 解码) | ac792n_demo_demo_edr |
| demo_wifi | sdk/apps/demo/demo_wifi/ | WiFi STA / AP 组网 | ac792n_demo_demo_wifi |
| demo_wifi_ext | sdk/apps/demo/demo_wifi_ext/ | 外部 WiFi 模组扩展联网 | ac792n_demo_demo_wifi_ext |
| demo_audio | sdk/apps/demo/demo_audio/ | 音频采集 / 播放 / 编解码 | ac792n_demo_demo_audio |
| demo_ui | sdk/apps/demo/demo_ui/ | LVGL UI 显示 / 图层 / 触摸 | ac792n_demo_demo_ui |
表中 demo_hello 一行依据 README-en.md 的矩阵上下文与 README.md 中 “7 个功能 demo(ble/wifi/wifi_ext/edr/ui/hello/audio)” 的列举整理;编译目标命名遵循
ac792n_demo_<demo名>的统一规则。
Demo 在 SDK 中的位置
README.md 的工程结构章节把 demo 归入应用层(apps),原文结构如下(见 README.md):
├── apps/wifi_bbm/ # 婴儿监护器 / 带屏视频监护方案
└── apps/demo/ # 7 个功能 demo(ble/wifi/wifi_ext/edr/ui/hello/audio)
更完整的层级关系(摘录自 README-en.md):
│ │ ├── wifi_bbm/ # 📌 Baby monitor solution
│ │ └── demo/ # 📌 7 functional demos
│ ├── cpu/wl83/ # CPU platform code + prebuilt libraries (liba) + flashing tools (tools)
README-en.md 对 sdk/apps/demo/ 的定位说明是:“Functional examples: 7 minimal demo projects to reference or modify”(7 个最小示例工程,供参考或修改,见 README-en.md)。这句话点明了 demo 工程的设计意图:最小化、可参考、可修改。
工程目录结构剖析
所有 demo 工程遵循一致的标准目录布局(以 demo_ble 为例,结构经仓库文件列表确认):
sdk/apps/demo/demo_ble/
├── app_main.c # 工程入口(应用主逻辑)
├── bt_ble/
│ └── ble.c # BLE 业务实现
├── include/
│ └── app_config.h # 应用级配置(使能/裁剪功能)
└── board/wl83/
├── board.c # 板级驱动初始化(引脚、外设)
├── board_config.h # 板级配置宏
├── board_demo.h # 板级示例声明/宏
├── chip_cfg.h # 芯片级配置
├── Makefile # 该工程的编译脚本
└── AC792N_DEMO_DEMO_BLE.cbp # Code::Blocks 工程文件
各文件职责
| 文件 | 职责 | 设计意图 |
|---|---|---|
app_main.c | 应用入口,负责系统初始化与业务主循环 | 每个 demo 的差异化业务从这里开始,是开发者修改的第一现场 |
include/app_config.h | 应用配置头文件,宏开关控制功能裁剪 | 通过宏配置实现“同一个 demo 适配多种需求”,避免改代码 |
board/wl83/board.c | 板级初始化:GPIO、时钟、外设(IIC/SPI/UART/USB 等) | 将“硬件差异”收敛到 board 层,业务代码无需感知具体板型 |
board/wl83/board_config.h | 板级配置宏(引脚复用、外设使能) | 换板只需改板级配置,不动业务 |
board/wl83/chip_cfg.h | 芯片级配置(存储、时钟、电源等) | 芯片平台差异的隔离层 |
board/wl83/Makefile | 编译脚本,定义该工程的构建规则与源文件列表 | 每个 demo 独立编译,互不影响 |
AC792N_DEMO_DEMO_*.cbp | Code::Blocks 工程文件 | 便于在 IDE 中打开、编译与调试 |
bt_ble/ble.c(仅 BLE 相关 demo) | 蓝牙业务逻辑,如广播、连接、透传 | 业务模块按功能划分子目录,保持工程整洁 |
设计意图:为什么每个 demo 都自带 board 目录?
因为 board 层是“工程私有”的:不同的 demo 使用不同的外设组合(如 demo_ui 需要显示与触摸引脚、demo_audio 需要 I2S/ADC 引脚、demo_ble 则可能全部复用为 GPIO),把板级配置放在每个工程内部,可以保证:
- 独立可编译:每个 demo 不依赖其他工程的板级文件,单独拷贝即可使用;
- 快速换板:量产方案(wifi_camera 等)与 demo 共用同一套 board 目录模式,开发者从 demo 迁移到方案工程时心智模型一致;
- 最小依赖:demo 只依赖
sdk/apps/common/公共组件与sdk/cpu/wl83/liba/预编译库,不依赖任何兄弟 demo。
核心流程:从示例到固件
以 demo_ble 为例,从获取 SDK 到设备上运行的整体流程如下:
flowchart LR
A["选择 demo(如 demo_ble)"] --> B["按硬件修改 board/wl83 板级配置"]
B --> C["按需求配置 include/app_config.h"]
C --> D["执行 make ac792n_demo_demo_ble"]
D --> E["链接 cpu/wl83/liba 预编译库"]
E --> F["生成可烧录固件"]
F --> G["使用 tools 烧录到 AC792N 开发板"]
G --> H["上电运行:从 app_main.c 入口启动"]
设备端上电后的运行框架(各 demo 均以 app_main.c 为入口,具体调用序列以各 demo 源码为准):
sequenceDiagram
participant B as 开发板
participant M as app_main.c(工程入口)
participant C as 公共组件(common/config)
participant L as 业务模块(ble.c / lvgl 等)
B->>M: 上电复位,进入应用入口
M->>C: 初始化平台与公共配置(时钟/日志/蓝牙 Profile 等)
C-->>M: 平台初始化完成
M->>L: 按 app_config.h 宏开关启动业务模块
L-->>M: 业务模块就绪
L-->>B: 对外呈现功能(BLE 广播透传 / UI 显示 / 音频输出等)
使用示例
示例 1:确认 demo 在工程树中的位置
在开始任何 demo 开发前,先确认 SDK 工程树中 apps 层的划分(摘自 README.md):
├── apps/wifi_bbm/ # 婴儿监护器 / 带屏视频监护方案
└── apps/demo/ # 7 个功能 demo(ble/wifi/wifi_ext/edr/ui/hello/audio)
示例 2:查看英文 README 中的 Demo 功能矩阵
功能矩阵是选择 demo 的最快途径(摘自 README-en.md):
| Demo | Path | Demonstrated Feature | make target |
|---|---|---|---|
| demo_ble | sdk/apps/demo/demo_ble/ | BLE low-energy data transfer | ac792n_demo_demo_ble |
| demo_edr | sdk/apps/demo/demo_edr/ | Classic Bluetooth EDR (music/SPP/emitter/decode) | ac792n_demo_demo_edr |
| demo_wifi | sdk/apps/demo/demo_wifi/ | WiFi STA/AP networking | ac792n_demo_demo_wifi |
| demo_wifi_ext | sdk/apps/demo/demo_wifi_ext/ | External WiFi extended networking | ac792n_demo_demo_wifi_ext |
| demo_audio | sdk/apps/demo/demo_audio/ | Audio capture/playback/codec | ac792n_demo_demo_audio |
| demo_ui | sdk/apps/demo/demo_ui/ | LVGL UI display/layers/touch | ac792n_demo_demo_ui |
示例 3:定位 demo 的源码入口文件
仓库文件列表确认每个 demo 的入口与配置文件的物理位置,例如 BLE demo 的关键文件:
- 入口:
sdk/apps/demo/demo_ble/app_main.c - BLE 业务:
sdk/apps/demo/demo_ble/bt_ble/ble.c - 应用配置:
sdk/apps/demo/demo_ble/include/app_config.h - 板级配置:
sdk/apps/demo/demo_ble/board/wl83/board.c、board_config.h、board_demo.h、chip_cfg.h - 构建文件:
sdk/apps/demo/demo_ble/board/wl83/Makefile、AC792N_DEMO_DEMO_BLE.cbp
各 demo 的
app_main.c与业务模块源码可直接点击上方目录链接在仓库中浏览;本文档侧重工程级组织方式,具体 API 调用细节请结合各 demo 源码与在线文档中心阅读。
配置说明
demo 工程的配置分散在三个层级,形成“应用 → 板级 → 芯片”的配置链,与架构分层一一对应:
| 配置层 | 文件 | 典型配置项(以文件存在性为依据) | 修改时机 |
|---|---|---|---|
| 应用级 | include/app_config.h | 功能宏开关(使能/裁剪业务模块) | 决定该 demo 跑哪些功能 |
| 板级 | board/wl83/board_config.h、board.c | 引脚复用、外设初始化(IIC/SPI/UART/USB 等) | 更换硬件板型时必改 |
| 芯片级 | board/wl83/chip_cfg.h | 存储、时钟、电源等芯片平台参数 | 更换芯片型号/封装时修改 |
说明:以上配置项为按文件职责归纳的典型内容;各 demo 的具体宏定义与默认值请直接阅读对应头文件(
app_config.h/board_config.h/chip_cfg.h),本文档不展开罗列,避免与实际头文件内容产生偏差。
注意事项与边界情况
- demo ≠ 量产方案:demo 是“最小可用”示例,用于验证单项能力。量产级功能(如网络配网、断线重连、OTA、音视频组合应用)请参考
wifi_camera/wifi_soundbox/wifi_bbm方案工程; - 必须链接预编译库:demo 工程编译依赖
sdk/cpu/wl83/liba/下的*.a静态库,仓库仅提供代码与工程,需配合对应平台的库文件方可编译(见 README.md 概述); - 板级差异:同一 demo 在 AC7921A ~ AC7926A 不同型号/封装上运行时,需核对
chip_cfg.h与board_config.h,尤其是存储容量(如0 无内存 / 2/4/8 Mbit Flash / A 1M×16 SDRAM / F 8M×16 DDR1 / G 16M×16 DDR1等后缀规则,见 README.md); - 并发与资源:demo 演示单一能力时资源占用低;将多个 demo 功能合并进一个工程时,需关注蓝牙/WiFi 共存(PTA 分时)、DSP 双核任务划分与 SRAM(384KB)/外扩内存预算;
- 故障排查起点:demo 上电无现象时,按“芯片级配置 → 板级引脚 → 应用宏开关 → 预编译库版本”顺序排查,与 SDK 目录分层一致。
相关链接
- README.md(SDK 总览与工程结构)
- README-en.md(英文总览与 Demo 功能矩阵)
- AC792 SDK 在线文档中心
- 兄弟方案工程:
sdk/apps/wifi_camera/(WiFi 视频方案)、sdk/apps/wifi_soundbox/(WiFi 音箱方案)、sdk/apps/wifi_bbm/(婴儿监护器方案) - 公共组件:
sdk/apps/common/config/(蓝牙 Profile / 用户配置 / 日志)、sdk/apps/common/lvgl_v8/(LVGL 图形库) - 平台依赖:
sdk/cpu/wl83/liba/(预编译库)、sdk/cpu/wl83/tools/(烧录工具)