用料
- BW21-CBV-Kit x 1
- Android / 苹果 手机 x1
- L9110S 电机控制器 x1
- TT 电机 x2
示例
说明
在这个例子中,我们将使用 BW21-CBV-Kit 作为 BLE 外围设备,并使用伺服电机控制器与 V7RC 移动应用程序进行通信。此外,视频将通过 RTSP(实时流协议)从板载摄像头传感器(JXF37P)流式传输到 V7RC 移动应用程序。V7RC 是一个遥控器 APP,提供两种控制 UI:一种是 2 通道用于遥控车,另一种是 4 通道用于坦克和推土机。
流程
-
设置 RTSP 流
打开例子,“Files” -> “Examples” -> “AmebaBLE” -> “BLEV7RC_CAR_VIDEO”:
由于视频接收端是移动设备,在突出显示的代码片段中,我们将不使用默认视频设置,而是将视频分辨率设置为 VIDEO_D1 (720x480),以限制视频接收延迟。
在突出显示的代码片段中,“ssid”填写您的 WiFi 名称,“pass”填写 WiFi 密码。
由于视频流接收端是手机,我们建议使用 5G 网络,因为它具有更低的延迟、更高的容量和更大的带宽,可以提供更好的视频流质量。
编译代码并上传到 BW21-CBV-Kit。按下 Reset 按钮后,等待开发板连接到 Wi-Fi 网络。
开发板的 IP 地址和 RTSP 的网络端口号将显示在 Serial Monitor 中。
您可以从下面提供的链接下载 V7RC APP。
APP 安装完成后,请确保手机与 BW21-CBV-Kit 主板连接到同一个网络,以便进行串流。打开 V7RC APP,选择“控制中心”:
- 在 NETWORK 部分下,选择“WIFI”。
- 在 CAMERA 部分下,选择“RTSP”。
- 由于使用 RTSP 作为流媒体协议,因此在 CAMERA 部分下方的文本框中输入“ rtsp:// {IPaddress}:{port}”作为 V7RC 中的网络 URL,将 {IPaddress} 替换为您的 BW21-CBV-Kit 开发板的 IP 地址。
- 将 {port} 替换为 Serial Monitor 中显示的 RTSP 端口。默认的 RTSP 端口号为 554。如果同时有两个 RTSP 流,则第二个端口号默认为 555。
- 最后,单击“保存”按钮并返回主页:
返回 V7RC 主页,您可以在 APP 顶部查看 Wi-Fi 连接状态。点击视频按钮(橙色)可实时监控视频流。
摄像机的视频流将显示在 V7RC APP 中。同时,在您的串行监视器中,将显示消息“rtp started (UDP)”:
-
建立 BLE 连接
打开 V7RC APP,选择“控制中心”:
在网络部分下,选择“BLE”:
点击 DEVICE,选择 AMEBA_BLE_DEV,点击“LINK”按钮连接到你的 BW21-CBV-Kit 板:
打开 Arduino Serial Monitor,你应该可以看到 BW21-CBV-Kit 板子成功连接到手机的日志:
回到 V7RC 主页,可以监控下图中移动两个控制器按钮时打印的日志数据,数据接收成功表示 BLE 连接已经建立:
-
设置舵机
建立 BLE 连接后,我们将使用两组伺服电机来控制小车的移动。两个伺服电机将首先使用预定义的 MotoA_1A、MotoA_1B、MotoA_1B 和 MotoA_1B 引脚连接到 L9110S 伺服控制器。
- 1A 引脚连接到 GPIO 引脚,用于控制电机方向。
- 1B 引脚连接到 PWM 引脚,用于控制电机速度。
#define MotoA_1A 16 // Control MotorA moving Forward(HIGH)/Backward(LOW)
#define MotoA_1B 7 // Control MotorA’s from speed 0~255, or stop (LOW)
#define MotoB_1A 17 // Control MotorB moving Forward(HIGH)/Backward(LOW)
#define MotoB_1B 8 // Control MotorB’s speed from 0~255, or stop (LOW)
在此示例中,我们将使用 AMB82 MINI 作为演示。详细的连接引脚图如下。建立连接后,用户可以通过 V7RC App BLE 远程控制伺服电机。
参考代码
ParseCMDString(String cmd)
是一个自定义函数,将以字符串“cmd”作为输入并对其进行处理。目前,V7RC App 有 6 个可用命令,分别是:“SS2”、“SS4”、“SRT”、“SR2”和“SRV”。
- 下面的设置已经过测试,可实现更好的 V7RC RTSP 流式传输质量:
VideoSetting config(VIDEO_HD, CAM_FPS, VIDEO_H264, 0); // 1280x720
VideoSetting config(VIDEO_D1, CAM_FPS, VIDEO_H264, 0); // 720x480