B-U585I-IOT02A RGBD成像和嵌入式网络服务器演示

概述


1 将UM1379相机模块插入相机子板连接器的B-U585I-IOT02A探索板。


来自STMicroelectronics的B-U585I-IOT02A探索板搭载了各种传感器、连接选项和其他功能,以突出显示嵌入STM32U5 MCU中的增强功能。除了标准的LED和按钮开关之外,该探索板还包括以下功能:

  • 外部存储器
    • 512-Mbit Quad-SPI闪存
    • 64-Mbit Octo-SPI PSRAM
    • 256-Kbit I2C EEPROM
  • MEMS传感器
    • 两个数字传声器
    • 相对湿度和温度传感器
    • 3轴磁力计
    • 3D加速度计和3D陀螺仪
    • 压力传感器
    • 飞行时间和手势识别传感器
    • 环境光源传感器
  • RF模块
    • 802.11 b/g/n兼容MXCHIP的Wi-Fi®模块
    • STMicroelectronics的蓝牙®低功耗
  • 板连接器
    • USB Type-C®
    • ARDUINO® Uno V3扩展连接器
    • 相机模块扩展连接器
    • 两个STMod+扩展连接器
    • Pmod™扩展连接器
  • STSAFE-A110安全和身份验证解决方案
  • 带USB重新枚举功能的板上STLINK-V3E调试器/编程器:大容量存储、虚拟COM端口和调试端口

开发人员利用其中的几个功能(即相机模块连接器、ToF传感器和USB Type-C连接器)创建了一个演示应用,该应用将B-U585I-IOT02A用作简单的RGBD(RGB + Depth)成像器件。为了实现这一目标,开发人员将B-U585I-IOT02A与MB1379相机模块(与B-CAMS-OMV套件捆绑)进行了配对,如上述图1所示。在这个展现了超低功耗器件可实现的卓越性能的示例中,STM32U5 MCU从该模块采集RGB图像并连同相同场景的ToF测距数据实时传输到连接的PC中。这是通过托管一个通过USB Type-C端口访问的嵌入式网络服务器来实现的,该端口被配置为虚拟网络适配器。这不仅提供了通用的框架来提供和格式化成像数据,还支持用户轻松创建用户界面,如下图2所示。

02_00
2 使用HTML、CSS和JavaScript为B-U585I-IOT02A演示应用创建的用户界面。

关键组件

该演示应用相当复杂,它采用了几个外部硬件、先进的MCU外设和嵌入式软件组件来实现上述结果。本部分简要介绍了其中最值得注意的元素,供那些对实施类似功能感兴趣的用户参考。如果你希望详细讨论某个主题,请回复本帖,告诉我们!

Azure RTOS ThreadX

截至2021年,微软®Azure® RTOS嵌入式软件组件已直接集成到所有新的STM32系列(如STM32U5系列)的STM32Cube MCU套装中。也就是说,Azure RTOS ThreadX现在取代了FreeRTOS,成为STM32应用的RTOS首选。其他Azure RTOS组件(包括NetX Duo、USBX、FileX和LevelX)也在ST中间件解决方案中占据重要地位,取代了LwIP、mbedTLS、ST USB和FatFS软件栈。该演示应用充分利用了这些组件及其与STM32Cube生态系统的紧密集成,包括它们与STM32CubeMX的高度可配置性。

嵌入式网络服务器

该应用的核心是使用了Azure RTOS NetX Duo网络堆栈的网络HTTP插件创建的嵌入式网络服务器。开发人员利用该服务器创建了两个服务器实例。一个实例(在端口81上)专门用于持续将相机模块的JPEG图像发送到客户端。这样做可以创建MJPEG视频流。第二个服务器实例(在默认端口80上)用于处理所有其他客户端请求,例如提供来自ToF传感器的最新测距数据、启用/禁用视频流,并切换探索板上红色LED的状态。这两个服务器实例是所有操作实现并发运行的必要条件。相应的代码可以在app_netxduo.c 文件中找到。

网络服务器文件存储在MCU的内部闪存上的嵌入式文件系统中。该文件系统使用Azure RTOS FileX创建。请注意,在一般情况下,在闪存中创建文件系统时,由于NAND/NOR存储器可用的擦除操作次数有限,需要实施磨损均衡方案。为此,Azure RTOS提供了专用的LevelX组件。然而,该应用中不需要进行磨损均衡,因为网络文件只是从文件系统中读取,而不是写入或修改。因此,该应用中未使用Azure RTOS LevelX组件。

网络连接性

为了与探索板建立网络连接,开发人员使用了USB通信器件类(CDC)将USB Type-C端口配置为虚拟网络适配器。更具体地说,开发人员使用了以太网控制模型子类(ECM)来通过USB进行以太网数据包传输。CDC-ECM器件类受到Azure RTOS USBX协议栈的支持,该协议栈与Azure RTOS NetX和NetX Duo网络堆栈配合工作,以支持访问嵌入式网络服务器。借助STM32CubeMX代码配置器,用户可以轻松地向项目添加USBX组件并为USB器件框架选择CDC-ECM器件类。如需查看具体内容,请打开项目的GitHub存储库中的STM32CubeMX配置文件(b-u585i-iot02a_camera_demo.ioc)。

请注意,Linux和MacOS都原生支持USB CDC-ECM类。然而,如果你希望使用Windows PC与该探索板进行网络连接,则需要使用第三方CDC-ECM驱动程序。

相机视频流

将相机模块与B-U585I-IOT02A探索板搭配使用一文中展示的用法类似,STM32U5上的DCMI外设用于与相机模块进行接口连接并捕获其提供的图像。然而,对于该演示应用而言,图像传感器(MB1379相机模块上的OV5640)被配置为提供JPEG格式的图像。与RGB565格式相比,这些图像的尺寸要小得多,这意味着:1)可以在不超过内部SRAM的边界的情况下使用双重缓冲方案,2)图像可以及时地发送给网络客户端。双重缓冲策略支持DMA外设在网络服务器并行发送前一个图像时,将新图像存储在内存中。

VL53L5CX深度图数据流

使用VL53L5CX ToF传感器使用入门一文中概述的流程,将VL53L5CX多区域测距飞行时间(ToF)传感器的驱动程序添加到项目中。然后使用API配置传感器以连续捕获8 x 8分辨率的测距数据,并在网络客户端请求时读取这些数据。

测距数据流使用定期运行的JavaScript函数创建,该函数会请求最新的数据值并将其用于更新图2和图8中显示的色彩编码深度图。该深度图使用HTML画布元素进行渲染,并使用两个文本框输入设置一些可视化参数。“Frequency”参数支持用户设置深度图像的帧率,“Max Distance”参数则支持用户设置可以由颜色刻度表示的最大距离。如需查看生成这些结果的JavaScript代码,请查看项目的GitHub存储库中的index.html文件

亲自运行

当你获得了硬件并安装了开发工具之后,就可以自己运行该演示应用并开始进行扩展了。配置要求如下:

步骤

  1. 项目的GitHub存储库下载源代码。

  2. 在项目目录中双击.project 文件(参见图3)。STM32CubeIDE应该会启动并要求你选择一个目录作为工作区。选择所需的目录,然后点击Launch 。项目应该能成功导入到工作区中。

03_00
3 通过双击.project文件在STM32CubeIDE中打开演示项目。

  1. 在Project Explorer中选择项目,然后选择Project > Build Project 。项目应该能在没有错误的情况下成功构建,如图4所示。


4 使用STM32CubeIDE构建演示项目。

  1. 将MB1379相机模块按照图1所示连接到B-U585I-IOT02A探索板。使用STLK Micro-B USB连接器(CN8)将探索板连接到PC。请注意,JP4跳线应处于默认的“5V_USB_STLK”位置。

  2. 在STM32CubeIDE中,选择Run > Run 。由于是第一次运行应用,因此系统将显示Edit Configuration 窗口。点击OK ,其他设置保持不变。等待下载完成。

  3. 启动STM32CubeProgrammer应用。在探索板依然与PC相连的情况下,点击Connect 按钮以连接到探索板。

  4. 点击 + 标签,并选择Open File 。导航到项目目录并选择web content/web_server.bin文件。

  5. 如图5所示,点击Download 按钮旁边的下拉箭头。将Address 值更改为0x08100000。地址更改完成后,点击Download 按钮。你应该看到只有内存扇区[128 255]已被擦除,如图6所示。


5 在将网络服务器二进制文件下载到MCU之前更改内存地址。


6 应该只有存储器扇区[128 255]被更改。

  1. 文件下载完成后,点击Disconnect 按钮断开连接。

  2. 打开一个终端应用(如Tera Term),然后打开STLink虚拟串口。将波特率更改为115200,并更改换行符行为以产生预期的结果(例如,在Tera Term中选择Setup > Terminal… 并将Receive 选项更改为“AUTO”)。

  3. 按下探索板上的黑色复位按钮,并将其通过USB Type-C连接器(CN1)连接到运行Linux或MacOS的PC上。如需使用运行Windows的PC,你需要安装第三方CDC-ECM驱动程序或使用虚拟机。你应该会看到类似于图7中所示的终端输出。注意下一步的IP地址。

07_00
7 建立网络连接后的终端输出。

  1. 最后,在连接到CN1的PC上打开网络浏览器。在地址栏中输入<ip_address>/index.html,其中ip_address是终端输出中提供的IP地址。例如,我使用的地址是10.42.0.86/index.html。随后,系统应该会显示演示用户界面,如图8所示。点击Start Stream 按钮开始流式传输视频。


8 运行中的演示应用。