速存,詳細羅列香橙派AIpro外設介面樣例大全(附原始碼)

华为云开发者联盟發表於2024-03-07

本文分享自華為雲社群《香橙派AIpro外設介面樣例大全(附原始碼)》,作者:昇騰CANN。

Orange Pi AI Pro 開發板是香橙派聯合華為精心打造的高效能 AI 開發板,其搭載了昇騰 AI 處理器,可提供 8TOPS INT8 的計算能力,記憶體提供了 8GB 和 16GB兩種版本。可以實現影像、影片等多種資料分析與推理計算,可廣泛用於教育、機器人、無人機等場景。

豐富的介面更是賦予了Orange Pi AIpro強大的可擴充性。包括兩個HDMI輸出、GPIO介面、Type-C電源介面、支援SATA/NVMe SSD 2280的M.2插槽、TF插槽、千兆網口、兩個USB3.0、一個USB Type-C 3.0、一個Micro USB、兩個MIPI攝像頭、一個MIPI屏等,預留電池介面。

圖片1.png

小編整理了外設介面使用示例,並提供了樣例原始碼,供大家體驗和學習。

  • 透過MIPI介面播放音訊
  • USB介面錄製和播放音訊
  • 透過MIPI介面獲取Camera影像
  • 透過USB介面獲取Camera影像
  • 透過HDMI介面顯示影像
  • 透過MIPI介面顯示影像

1 透過MIPI介面播放音訊

首先將耳機插入開發板的5mm耳機介面中。

圖片2.png

然後進入音訊測試程式所在的目錄中。
(base) HwHiAiUser@orangepiaipro:~$ sudo -i 
(base) root@orangepiaipro:~# cd /opt/opi_test/audio 
(base) root@orangepiaipro:/opt/opi_test/audio# ls 
capture.sh play.sh qzgy_48k_16_mono_30s.pcm sample_audio sample_audio_2ch
使用以下命令就可以播放測試音訊到耳機了。
(base) root@orangepiaipro:/opt/opi_test/audio# ./sample_audio_2ch play 2 qzgy_48k_16_mono_30s.pcm

獲取樣例原始碼請訪問:https://gitee.com/ascend/EdgeAndRobotics/tree/master/Peripherals/Audio/MIPIAudio

本樣例呼叫AscendCL的媒體資料處理介面實現音訊的播放,最終在程式執行時播放*.pcm音訊檔案的內容,主要介面呼叫流程如下:

圖片3.png

詳細介面介紹請移步文末訪問昇騰社群文件中心。

2 透過USB介面錄製和播放音訊

首先需要準備一個帶錄音功能的USB介面的耳機。

圖片4.png

然後將USB介面的耳機插入開發的USB介面中。

圖片5.png

使用arecord -l命令檢視下錄音裝置的編號,如下面的輸出所示,其中card0中的0表示錄音裝置編號為0。

(base) HwHiAiUser@orangepiaipro:~$ arecord -l 
**** List of CAPTURE Hardware Devices **** 
card 0: Audio [AB13X USB Audio], device 0: USB Audio [USB Audio] 
 Subdevices: 1/1 
 Subdevice #0: subdevice #0

進入USB音訊測試程式碼路徑中。

(base) HwHiAiUser@orangepiaipro:~$ sudo -i 
(base) root@orangepiaipro:~# cd /opt/opi_test/USBAudio 
(base) root@orangepiaipro:/opt/opi_test/USBAudio# ls 
Readme.md main main.c
使用下面的命令可以使用USB音訊裝置錄製一段音訊。其中0表示錄音裝置編號,需根據實際情況填寫。
(base) root@orangepiaipro:/opt/opi_test/USBAudio# ./main plughw:0
錄製結束後,在終端介面輸入over即可退出錄製。
(base) root@orangepiaipro:/opt/opi_test/USBAudio# ./main plughw:0 
Start record! 
over #輸入 over 結束錄製音訊 
(base) root@orangepiaipro:/opt/opi_test/USBAudio#
錄音成功後,在USBAudio樣例目錄下會生成音訊檔案pcm。
(base) root@orangepiaipro:/opt/opi_test/USBAudio# ls *.pcm 
audio.pcm
確保使用aplay -l命令能看到USB的播音裝置。
(base) root@orangepiaipro:/opt/opi_test/USBAudio# aplay -l 
**** List of PLAYBACK Hardware Devices **** 
card 0: Audio [AB13X USB Audio], device 0: USB Audio [USB Audio] 
 Subdevices: 0/1 
 Subdevice #0: subdevice #0 
在Linux系統桌面中,使用下面命令可以將錄製的音訊播放到USB耳機。
(base) root@orangepiaipro:/opt/opi_test/USBAudio# ffplay -ar 44100 -ac 2 -f s16le audio.pcm

圖片6.png

獲取樣例原始碼請訪問:

https://gitee.com/ascend/EdgeAndRobotics/tree/master/Peripherals/Audio/USBAudio

3 透過MIPI介面獲取Camera影像

目前MIPI攝像頭測試只能用樣例程式拍一張圖片,步驟如下所示:

首先需要準備一個樹莓派IMX219攝像頭。

圖片7.png

然後將攝像頭連線到開發板的MIPI攝像頭介面中。測試一個攝像頭拍照時,請使用CAMERA0介面。

圖片8.png

登入Linux系統桌面,開啟一個終端,再進入測試程式所在路徑。

(base) HwHiAiUser@orangepiaipro:~$ sudo -i 
(base) root@orangepiaipro:~# cd /opt/opi_test/camera 
(base) root@orangepiaipro:/opt/opi_test/camera# ls 
sample_hdmi test_one.sh test_two.sh update_dt.sh vi_l1_sample
執行下面的命令就會使用CAMERA0拍攝一張照片。
(base) root@orangepiaipro:/opt/opi_test/camera# ./vi_l1_sample 1 1 1
拍攝好的圖片如下所示:
(base) root@orangepiaipro:/opt/opi_test/camera# ls *.yuv 
vi_pipe0_chn0_w1920_h1080.yuv

在Linux桌面中使用ffplay命令可以檢視下拍攝的圖片。

(base) root@orangepiaipro:/opt/opi_test/camera# ffplay -pix_fmt yuv420p -video_size 
1920*1080 ./vi_pipe0_chn0_w1920_h1080.yuv 

圖片9.png

獲取樣例原始碼請訪問:https://gitee.com/ascend/EdgeAndRobotics/tree/master/Peripherals/Camera/MIPICamera

本樣例呼叫AscendCL的媒體資料處理介面獲取和處理Camera影像,最終在程式執行時處理為YUV或RAW格式的影像,詳細介面介紹請移步文末訪問昇騰社群文件中心。

4 透過USB介面獲取Camera影像

首先將USB攝像頭插入到開發板的USB3.0 HOST介面中。

圖片10.png

圖片11.png

然後透過v4l2-ctl命令就可以看到USB攝像頭的裝置節點資訊為/dev/video0。

(base) HwHiAiUser@orangepiaipro:~$ sudo apt-get update  
(base) HwHiAiUser@orangepiaipro:~$ sudo apt-get install -y v4l-utils  
(base) HwHiAiUser@orangepiaipro:~$ sudo v4l2-ctl --list-devices  
Q8 HD Webcam: Q8 HD Webcam (usb-xhci-hcd.3.auto-1):  
 /dev/video0  
 /dev/video1 #這個是用來採集metadata的,先忽略 
 /dev/media0

注意:v4l2中的l是小寫字母l,不是數字1。另外video的序號不一定都是video0,請以實際看到的為準。

下面使用內建的USBCamera樣例程式碼測試 USB 攝像頭。

首先進入USBCamera樣例程式碼的路徑。

(base) HwHiAiUser@orangepiaipro:~$ sudo -i 
(base) root@orangepiaipro:~# cd /opt/opi_test/USBCamera 
(base) root@orangepiaipro:/opt/opi_test/USBCamera# ls 
main main.cpp readme.md

執行下面的命令就可以使用USB攝像頭拍一張照片:

(base) root@orangepiaipro:/opt/opi_test/USBCamera# ./main /dev/video0

執行成功後,在USBCamera 樣例目錄下會生成一個yuyv422格式、1280*720解析度的out.yuv檔案。

(base) root@orangepiaipro:/opt/opi_test/USBCamera# ls 
main main.cpp out.yuv readme.md

在Linux桌面中使用下面的命令可以檢視out.yuv檔案的內容。

(base) root@orangepiaipro:/opt/opi_test/USBCamera# ffplay -pix_fmt yuyv422 -video_size 1280*720 out.yuv

圖片12.png

獲取樣例原始碼請訪問:https://gitee.com/ascend/EdgeAndRobotics/tree/master/Peripherals/Camera/USBCamera

5 透過HDMI介面顯示影像

首先連線HDMI0介面到HDMI顯示器。

圖片13.png

然後切換到root使用者,並進入HDMI0測試程式所在路徑。
(base) HwHiAiUser@orangepiaipro:~$ sudo -i 
(base) root@orangepiaipro:~# cd /opt/opi_test/hdmi0_pic 
(base) root@orangepiaipro:/opt/opi_test/hdmi0_pic# ls 
sample_hdmi test.sh update_dt.sh ut_1920x1080_nv12.yuv

執行update_dt.sh指令碼更新dt.img(關閉drm的配置,開啟vdp的配置)

update_dt.sh指令碼執行完後會自動重啟Linux系統。

(base) root@orangepiaipro:/opt/opi_test/hdmi0_pic# ./update_dt.sh
重啟後再次進入HDMI0測試程式所在路徑,然後執行sh指令碼就會播放一張圖片到HDMI 顯示器(預設顯示 10 秒),並且同時會播放一段音訊到HDMI顯示器,如果HDMI顯示器支援播放音訊的話,還能聽到聲音。
(base) root@orangepiaipro:/opt/opi_test/hdmi0_pic# ./test.sh
HDMI顯示的圖片如下所示:

圖片14.png

測試HDMI1輸出一張圖片的方法和HDMI0一樣,只是測試程式的路徑為:

/opt/opi_test/hdmi1_pic

獲取樣例原始碼請訪問:https://gitee.com/ascend/EdgeAndRobotics/tree/master/Peripherals/Display/HDMIDisplay,本樣例呼叫AscendCL的媒體資料處理介面使能HDMI介面,從而在顯示器上顯示yuv420 NV12格式、1920*1080解析度的圖片。詳細介面介紹請移步文末訪問昇騰社群文件中心。

6 透過MIPI介面顯示影像

準備樹莓派5寸MIPI LCD螢幕、15pin MIPI 排線。

圖片15.png

圖片16.png

將15pin MIPI排線按照下圖所示的方式連線到樹莓派5寸螢幕上(注意絕緣面的朝向)。

圖片17.png

將LCD螢幕連線到開發板的MIPI LCD介面上。

圖片18.png

使用MIPI LCD螢幕顯示Linux系統桌面的功能還在開發中。目前MIPI LCD螢幕只能用樣例程式顯示一張圖片。

進入測試程式所在的路徑。
(base) HwHiAiUser@orangepiaipro:~$ sudo -i 
(base) root@orangepiaipro:~# cd /opt/opi_test/lcd 
(base) root@orangepiaipro:/opt/opi_test/lcd# ls 
raspberry_demo test.sh update_dt.sh ut_800x480_nv12.yu

執行update_dt.sh指令碼更新dt.img(關閉drm的配置,開啟vdp的配置)。

update_dt.sh指令碼執行完後會自動重啟Linux系統。

(base) root@orangepiaipro:/opt/opi_test/lcd# ./update_dt.sh
重啟後再次進入LCD測試程式所在的路徑,然後執行sh指令碼就會播放一張圖片到LCD螢幕。
(base) root@orangepiaipro:/opt/opi_test/lcd# ./test.sh

獲取樣例原始碼請訪問:https://gitee.com/ascend/EdgeAndRobotics/tree/master/Peripherals/Display/MIPIDisplay,本樣例呼叫AscendCL的媒體資料處理介面接收MIPI介面資料,並在顯示器上顯示yuv420SP格式、800*400解析度的圖片。詳細介面介紹請移步文末訪問昇騰社群文件中心。

7 更多學習資源

[1]昇騰文件中心:https://www.hiascend.com/zh/document

[2]香橙派AIpro學習資源一站式導航:https://www.hiascend.com/forum/thread-0285140173361311056-1-1.html

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章