3_樹莓派機載計算機的硬件資源樣例教程——無名創(chuàng)新

樹莓派機載計算機的硬件資源使用樣例教程
樣例程序所在目錄、Visual Studio Code程序導入與程序運行
執(zhí)行樹莓派硬件資源使用demo的前提是,用戶已經使用NoMachine或者VNC Viewer遠程登陸系統(tǒng)桌面,也可以直接通過樹莓派4B上的Micro HDMI接口擴展連接顯示屏,可以根據實際顯示屏接口自行購買Micro HDMI轉HDMI/VGA轉換線。當局域網網絡不穩(wěn)定時,有線連接的方式會極大的提升開發(fā)效率,同時此方式也需要配備一組無線鍵盤、鼠標用于操作ubuntu系統(tǒng)。

進入系統(tǒng)桌面后,鼠標右鍵cindy的主文件夾,其中用戶只有操作的文件放在rpi_python_opencv、catkin_ws、autostart三個文件夾下,

其中rpi_python_opencv用于存放樹莓派硬件資源使用的樣例程序、基于Python開發(fā)的OPENCV機器視覺基礎與進階樣例

打開ubuntu桌面的visual studio code軟件,點擊左上角文件,選中rpi_python_opencv文件下后,點擊確定后導入所有文件。


visual studio code會進入以下界面,用戶直接在VS code軟件中,編寫python程序,對于已安裝的第三方庫會自動補全相關變量或函數。

1、GPIO口驅動RGB燈
在VS code下方命令窗口中(也可以CTRL+ALT+T在用cd命令進入該目錄下),依次輸入如下命令既可以觀察gpio控制板載RGB的效果,其中RGB燈為共陰方式,高電平亮低電平滅。
cindy@cindy-desktop:~/rpi_python_opencv$ ls -l
總用量 44
drwxrwxr-x 2 cindy cindy ?4096 1月 ? 9 02:39 1樹莓派資源樣例
drwxrwxr-x 4 cindy cindy ?4096 1月 ?13 18:31 2機器視覺基礎例程
drwxrwxr-x 4 cindy cindy ?4096 1月 ?15 04:31 3機器視覺進階例程
-rw-rw-r-- 1 cindy cindy 15080 2月 ?11 21:33 main.py
-rw-rw-r-- 1 cindy cindy 14531 1月 ? 8 22:53 main.pybackup
cindy@cindy-desktop:~/rpi_python_opencv$ cd 1樹莓派資源樣例/
cindy@cindy-desktop:~/rpi_python_opencv/1樹莓派資源樣例$ ls -l
總用量 56
-rw-rw-r-- 1 cindy cindy ?1250 2月 ?24 21:21 1_gpio_rgb.py
-rw-rw-r-- 1 cindy cindy ?2081 1月 ? 8 17:43 2_hardwave_pwm.py
-rw-rw-r-- 1 cindy cindy ? 951 1月 ? 8 17:10 3_uart_send.py
-rw-rw-r-- 1 cindy cindy ? 945 1月 ? 8 18:01 4_uart_receive_and_send.py
-rw-rw-r-- 1 cindy cindy ?2480 1月 ? 9 02:04 5_i2c_mpu6050.py
-rw-rw-r-- 1 cindy cindy ? 839 1月 ? 9 02:28 6_i2c_oled_1306_image.py
-rw-rw-r-- 1 cindy cindy ?2342 1月 ? 9 14:24 7_i2c_oled_1306_draw.py
-rw-r--r-- 1 cindy cindy 24629 1月 ? 9 05:25 happycat_oled_64.ppm
最后運行1_gpio_rgb.py,程序運行的效果是RGB燈三色依次閃爍,并屏幕打印提示端口和運行狀態(tài)。
python3 1_gpio_rgb.py
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xk98cOF3-1645889851215)(/image-20220224213340462.png)]
執(zhí)行CTAL+C
終止程序運行
2、硬件PWM的使用

預留出來的可用PWM口有四路,四個PWM口是GPIO12、GPIO13、GPIO18、GPIO19依次對應PWM0、PWM1、PWM2、PWM3,其中PWM0、PWM1兩路PWM口與串口4的TXD、RXD復用,當初始化GPIO18、GPIO19為PWM口后,再需要將GPIO18、GPIO19用作串口時,必須重新啟動樹莓派系統(tǒng)。程序中通過pwm0_1_enable變量來控制PWM0、PWM1是否使用。
運行2_hardwave_pwm.py,程序運行的效果是輸出頻率為1000hz的PWM波,占空比從0100%,然后從100%0,用戶可以將PWM口接示波器、外接RGB燈或者萬用表測平均電壓的方式來觀察PWM輸出效果。
python3 2_hardwave_pwm.py
3、串口發(fā)送
擴展板引出了全部用戶可用的5組串口,5組串口已經在樹莓派系統(tǒng)啟動配置文件中使能開啟,用戶可以直接使用,避免了傳統(tǒng)ubuntu系統(tǒng)通過外接usb轉ttl模塊擴展串口資源的方式,降低了接線復查程度。用戶可以在命令窗口中執(zhí)行ls -l /dev/ttyAMA*
命令來查看可用的串口設備。

同時用戶可以執(zhí)行cutecom
調用cutecom串口調試工具對串口進行相關操作

在提供的示例中,默認操作的是UART4,用戶也可以調整串口參數,更改成其它串口或者波特率等。

運行3_uart_send.py,程序運行的效果是輸出串口打印“Hello,World”,用戶可以外接usb轉ttl模塊,通過串口調試助手觀察發(fā)送的數據。
python3 3_uart_send.py


4、串口接收并發(fā)送
本例程利用串口inWaiting()函數查詢串口緩沖區(qū)數據長度,利用read()方法讀取緩沖區(qū)數據,最后將接收到的數據通過write()方法發(fā)送出來,實現接收數據并轉發(fā)回顯的效果。
python3 4_uart_receive_and_send.py


5、I2C讀取MPU6050數據
本例程利用I2C1口,掛載MPU6050設備,通過SMBus第三方庫讀取MPU6050數據,ubuntu系統(tǒng)啟動文件中,已經對I2C硬件資源配置進行了使能,用戶可以像單片機I2C編程一樣直接使用I2C資源。同時當采用C/C++編程時可以采用wiringpi庫對I2C資源進行編程。
樹莓派系統(tǒng)查看I2C外設可以利用i2c-tools工具包執(zhí)行如下指令實現。
sudo i2cdetect -y 1

可以看到I2C外設中存在地址未0x0e、0x68、0x76三組I2C設備,查詢數據手冊可知0x68即為MPU6050的地址,另外兩組為IST8310磁力計、SPL06氣壓計的地址。查詢I2C外設寄存器數據可以通過命令行:sudo i2cdump -y 1 0x68

寄存器寫操作可以通過執(zhí)行命令
sudo i2cset -y 1 0x68 0x6B 0x00
sudo i2cset -y 1 0x68 0x19 0x00
sudo i2cset -y 1 0x68 0x1A 0x02
sudo i2cset -y 1 0x68 0x1B 0x08
sudo i2cset -y 1 0x68 0x1C 0x10
最后執(zhí)行
sudo i2cdump -y 1 0x68
對比前后對應寄存器地址數據是否變化

同時用戶可以查看單個寄存器地址中的數據,例如讀取傳感器ID信息who am i寄存器信息,執(zhí)行命令如下:
sudo i2cget -y 1 0x68 0x75

以上操作是利用i2c_tools工具包對I2C外設進行操作,提供的demo是讀取MPU6050溫度、加速度、陀螺儀數據,并通過串口打印顯示出來,執(zhí)行本例程需要確保I2C端口存在MPU6050外設,否則回導致I2C設備硬件讀取出錯。執(zhí)行程序命令如下:
python3 5_i2c_mpu6050.py

6、I2C掛載SSD1306顯示屏顯示圖像
本例程利用I2C1口,掛載SSD1306顯示屏,利用Adafruit_SSD1306庫函數實現圖形顯示,執(zhí)行命令如下:
python3 6_i2c_oled_1306_image.py

7、I2C掛載SSD1306顯示屏顯示字符
本例程利用I2C1口,掛載SSD1306顯示屏,首先利用PIL庫生成ImageDraw方法,運用此方法在自定義圖像中添加字符、數字等內容,最后用Adafruit_SSD1306圖形顯示函數刷新顯示出來。本例程調用了python3中subprocess 模塊,查看系統(tǒng)IP、運存、內存等信息,這部分內容初學者不需要了解。本例程執(zhí)行命令如下:
python3 7_i2c_oled_1306_draw.py
方法,運用此方法在自定義圖像中添加字符、數字等內容,最后用Adafruit_SSD1306圖形顯示函數刷新顯示出來。本例程調用了python3中subprocess 模塊,查看系統(tǒng)IP、運存、內存等信息,這部分內容初學者不需要了解。本例程執(zhí)行命令如下:
python3 7_i2c_oled_1306_draw.py