6. WiFi_BBM 工程说明

6.1. 工程简介

WiFi_BBM 实现了婴儿监视器应用,提供稳定的无线视频传输、双向语音对讲、多设备绑定等功能。该工程适用于家庭育儿监控、远程看护等场景。

主要功能包括:

  • 多设备绑定配对

    • 支持发送端(TX)与接收端(RX)的一对多绑定。

    • 支持发送端(TX)与手机APP进行连接。

    • RX 设备可远程控制 TX 设备的图传、录像、回放等功能。

  • 实时无线图传

    • 分辨率支持 1280X720,帧率可达 25fps

    • 稳定的视频流传输,画面流畅。

    • RX 设备支持一对多连接,可自由切换不同 TX 设备的视频画面。

    • 可进行显示模式切换: - 全屏显示:独立查看 TX 设备的实时视频。 - 多设备分屏显示(画中画):同时查看多个 TX 设备的视频画面。

  • 双向语音对讲

    • 低延迟语音通信,实现远程互动。

  • SD 卡录像

    • RX 设备可远程控制 TX 设备进行录像。

    • RX 设备可在本地保存接收到的实时视频流。

  • SD 卡文件预览与视频回放

    • RX 设备可本地预览和回放存储的录像文件。

    • RX 设备可远程访问 TX 设备的录像,并进行回放。

6.2. 示例工程

具体的示例工程代码详见 apps/wifi_bbm

6.3. 操作说明

6.3.1. 发送端(TX)与接收端(RX)连接操作说明

  • 代码烧入

    • 在编译固件前,需要修改 wifi_bbm/include/app_config.h 文件中的 CONFIG_BBM_RX / CONFIG_BBM_TX 宏定义,以分别编译 RX(接收端)和 TX(发送端)固件。编译完成后,将对应固件烧录至相应设备。

  • 设备启动

    • 固件烧入设备后,RX 设备的默认开机启动的 UI 页面默认是实时流页面,以便设备配对后每次开机能快速显示视频图像。然而,首次开机时由于没有设备配对,屏幕将显示黑屏。此时,需要通过按键或触摸操作 UI 返回 `Home` 页面

    📌 ** Home 界面:**

  • 配对流程

      1. Home 页面选择 配对 选项,进入配对页面。

      1. 配对页面可选择配对通道 0-5,每个 RX 设备最多支持连接 6 个 TX 设备

      1. 选择配对通道后,按照 UI 提示进行操作,进入配对模式。

      1. RX 进入配对模式后,按住 TX 设备的 K5 按键 进行配对。

      1. 配对成功后,RX 设备 UI 会提示 配对成功,此时可操作返回至实时流界面,即可查看 TX 设备的摄像头图像。

      📌 ** 配对界面:**

6.3.2. 发送端(TX)与手机APP连接操作说明

  • 模式切换

    • TX设备有两种连接模式:

      • 1.TX设备与RX设备连接

      • 2.TX设备与手机APP连接

    • 这两种模式只能 二选一 。若需要与手机APP连接,请按下TX设备的 K4按键,将WiFi模式切换为 AP模式。再次按下可切换回 Raw模式

  • 设备连接

    • 在AP模式下,手机连接到TX设备的WiFi后,打开 DVRunning2 APP 即可查看实时流画面。

6.4. 代码流程讲解

6.4.1. 初始化流程讲解

设备启动时,会先执行 wifi_bbm/wifi/wifi_app_task.c 文件中的 wifi_raw_init 函数。该函数主要完成以下初始化工作:

  • 配置基本的网络参数 IP 地址、 MAC 地址、 WIFI_RAW 配置参数等。

  • 根据宏定义初始化不同的服务: - RX 设备:初始化 ctp_client 服务。 - TX 设备:初始化 ctp_server 服务、初始化 http 服务等。

设备间通过 CTP 命令 进行通信控制。 初始化完成后,设备会执行对应的应用程序(app):

  • RX 设备 对应的 app:baby_monitor.c

  • TX 设备 对应的 app:bbm_video_rec.c

6.4.2. 配对流程讲解

6.4.2.1. 开机初始化

  • 设备首次烧入代码后,RX 设备的 MAC 地址 由随机数生成,并写入 Flash 保存,后续启动时都会使用该 MAC 地址。

  • RX 设备的 IP 地址固定为 192.168.1.1

  • TX 设备的 MAC 地址和 IP 地址RX 设备 在配对时分配,配对成功后会写入 Flash 保存,后续启动时都会使用该地址。

Note

重新烧入代码可能会导致 Flash 擦除,需要重新配对。

6.4.2.2. 配对流程

  • RX 设备 进入配对模式时,会执行 bbm_pair.c 文件中的 bbm_pairing_task

  • TX 设备 进入配对模式时,会执行 wifi_app_task.c 文件中的 multicast_recv_task

配对过程由 RX 设备主动发送组播包 开始:

  1. 组播包的内容由 protocols/pairing_data_model.h 文件中的宏定义确认,采用 JSON 格式

  2. RX 设备发送配对请求包,包内包含: - RX 设备的 MAC 地址/IP 地址 - 要求 TX 设备设置的 MAC 地址/IP 地址

  3. TX 设备收到配对请求包 后,解析并配置网络,然后回发 配对响应包,内容包括: - TX 设备成功设置的 MAC 地址/IP 地址

  4. RX 设备收到配对响应包后进行校验,确认是否与请求包匹配: - 校验成功,RX 设备回发 ACK 包。 - TX 设备收到 ACK 包后,将 MAC 地址和 IP 地址写入 Flash,后续开机时读取使用。

至此,配对流程结束。

Note

本配对方案仅供参考,用户可根据需求自定义通信协议进行配对。

6.4.3. 通讯流程讲解

配对成功后,设备间即可进行正常通讯。

6.4.3.1. 心跳机制

  • TX 设备 在初始化时会创建 bbm_tx_online_task 线程,定期发送设备在线包(心跳包)

  • RX 设备 在初始化时会创建 bbm_rx_online_task 线程,用于接收 TX 设备的心跳包

  • RX 设备接收到 TX 设备的心跳包后,会 注册 CTP 客户端,并与 TX 设备的 CTP 服务器建立连接 ,双方通过 CTP 命令 进行通信和控制。

6.4.3.2. CTP 命令交互

  • RX 设备 通过 ctp_cli_send 接口发送 CTP 命令

  • 发送命令可参考 bbm_ctp_****.c 等文件。

  • TX 设备 接收到 CTP 命令后,会执行 bbm_ctp_cmd.c 文件中对应命令的回调函数。

  • 需要自定义命令时,可在 bbm_ctp_cmd.c 中定义。

6.4.3.3. 回调处理

  • TX 设备执行完命令后,会回发一个 CTP 包,包内容一般包含TX设备执行操作的返回结果。(TX 设备也可主动发送 CTP 包)。

  • RX 设备接收到 CTP 包后,会在已注册的 CTP 客户端回调函数 里,根据包类型执行相应操作: - 具体实现见 bbm_ctp_client.c 文件中的 bbm_ctp_recv_callback 函数。

6.4.4. 通讯流程示例

以下以 实时流开启流程 为例进行讲解。

6.4.4.1. 实时流启动接口

实时流的启动接口位于 bbm_ctp_rt_stream.c 文件中的 bbm_ctp_rt_start 函数。

  • 构建 CTP 命令: 1. 生成 topiccontent 内容,格式为 JSON。 2. topic 内容为 OPEN_RT_STREAM (即开启实时流命令)。 3. content 内容包含:

    • 分辨率

    • 帧率

    • 码流

    • 摄像头 ID 等参数。

📌 RX设备开启实时流函数:

6.4.4.2. TX 设备的处理流程

  • RX 设备发送 CTP 命令后,TX 设备接收并解析: 1. 解析 OPEN_RT_STREAM 命令,找到对应的回调函数。 2. 该命令在 bbm_ctp_cmd.c 文件中对应的回调函数是 cmd_put_open_rt_stream

📌 TX设备注册的CTP命令表:

  • 调用视频流开启函数: 1. 解析 content 参数,并调用 start_app。 2. start_app 调用 bbm_video_rec.c 文件中的 video_start 函数,根据解析的信息 开启相应的视频流。 3.最后根据 start_app 返回值回发一个 CTP 包给RX设备,RX设备收到后执行相应回调函数。

📌 TX设备开启实时流命令回调:

— 该流程示例展示了 RX 设备如何通过 CTP 命令远程控制 TX 设备开启实时流

6.4.5. WIFI模式切换流程讲解

wifi_app_task.c 文件中,提供了以下四个函数:

  • wifi_raw_init() / wifi_raw_exit() 用于初始化和退出 wifi_raw 模式。

  • wifi_init() / wifi_exit() 用于初始化和退出 wifi_ap 模式。

在调用初始化函数(init)进入下一个模式之前,必须先调用当前模式的退出函数(exit)以退出当前模式。

模式切换的代码实现可参考 bbm_video_rec.c 文件中的 switch_wifi_mode() 函数。

📌 TX设备模式切换:

6.5. WIFI_RAW 参数调整讲解

RX设备与TX设备连接时,采用 WIFI 裸包 的形式进行通讯,即不走标准 WiFi 协议。 用户可以根据实际情况调整 WiFi 参数和外接 PA(功率放大器)来优化传输距离。

6.5.1. PA 开启流程

  1. WIFI 驱动层开启 PAwifi_conf.c 文件中,将 WIFI_PA_ENABLE 常量设置为 1

  2. 启用 PA 增益参数app_config.h 中,定义 BBM_WIFI_PA_ENABLE 宏,以区分是否使用 PA 的增益参数。

  3. 修改 PA 引脚映射 根据实际情况,在板级文件 board_develop.c 中调整 PA 的 引脚映射

📌 板级初始化函数:

6.5.2. WiFi RAW 参数初始化

  • wifi_raw_init (位于 wifi_app_task.c 文件): - 负责 WiFi RAW 的通用配置初始化。 - 主要包括:

    • 软件/硬件包过滤

    • 包头信息

    • WiFi 模拟增益

    • ……

📌 WIFI RAW参数配置:

  • wifi_raw_ethernetif.c 文件: - 进行 wifi_raw netif 的初始化。 - 主要配置项:

    • 传输速率

    • 通讯信道

    • 重传次数

    • ……

📌 netif初始化配置:

6.5.3. 可调参数

用户可根据实际情况调整以下参数:

  • WiFi 传输速率、重传次数、通讯信道

    • 位置:wifi_raw_ethernetif.c 文件,见上图

  • 数字增益/模拟增益 - 数字增益:board_develop.c 文件中的 wifi_calibration_param

    📌 PA参数表:

    • 模拟增益调整:wifi_app_task.c 中的 wifi_set_pwr 函数

      📌 模拟增益:

    • 考虑到当两台带PA设备距离过近时,过高的模拟增益可能导致 AGC 的过载,进而引起近距离通讯卡顿,因此建议根据接收到的 RSSI(接收信号强度)动态调整模拟增益,以确保通信稳定性。

      📌 根据RSSI值调整模拟增益:

Note

SDK中的默认WIFI参数仅供参考,不一定最优,用户可根据实际情况进行调整。 其他参数用户可根据需要自行调整。