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-A110c安全和身份驗證解決方案
  • 具有 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 所示。

u5_demo_final
圖 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 化參數。「Frequency」參數支援使用者設定深度影像的幀率,而「Max Distance」參數則支援使用者設定可以由顏色刻度表示的最大距離。如需查看產生這些結果的 JavaScript 程式碼,請參考專案的 GitHub 儲存庫中的 index.html 檔案

正式運作

當你獲得了硬體並安裝了開發工具之後,就可以自己運行該演示應用並開始進行擴展了。 配置要求如下:

步驟

  1. 從專案的 GitHub 儲存庫下載原始程式碼。

  2. 在專案目錄中雙擊.project 檔案(請參閱圖 3)。 STM32CubeIDE 應該會啟動並要求你選擇一個目錄作為工作區。 選擇所需的目錄,然後點選 Launch 。 專案應該能成功導入到工作區。

openProject

圖 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 虛擬 COM 連接埠。將波特率更改為115200,並更改換行符行為以產生預期的結果(例如,在 Tera Term 中選擇 Setup > Terminal… 並將 Receive 選項更改為「AUTO」)。

  3. 按下探索板上的黑色重設按鈕,並將其透過 USB Type-C 連接器(CN1)連接到執行 Linux 或 MacOS 的 PC 上。如需使用運行 Windows 的 PC,你需要安裝第三方 CDC-ECM 驅動程式或使用虛擬機器。你應該會看到類似圖 7 所示的終端輸出。 注意下一步的 IP 位址。

getIPAddress

圖 7 : 建立網路連線後的終端輸出

  1. 最後,在連接到 CN1 的 PC 上開啟網頁瀏覽器。在網址列中輸入 <ip_address>/index.html ,其中 ip_address 是終端輸出中提供的 IP 位址。 例如,我使用的地址是 10.42.0.86/index.html。 隨後,系統應該會顯示演示使用者介面,如圖 8 所示。 點擊 Start Stream 按鈕開始串流影片。

圖 8 : 運行中的演示應用。