
樹莓派Pico搭載RP2040微控制器,是一款功能全面且經濟高效的嵌入式開發平臺。本文將詳細介紹如何使用MicroPython 1.24.1將輕量級通用圖形庫(LVGL)9.1版本交叉編譯到樹莓派Pico上,使開發人員能夠在像RP2040 Pico這樣資源受限的設備上創建復雜的基于Python的圖形用戶界面(GUI)。
您將學習如何交叉編譯LVGL并將其與MicroPython集成,以及如何將UF2固件部署到Pico開發板。此外,我們還將提供一個Python代碼示例,演示如何使用XPT2046觸摸控制器(通常與SPI顯示驅動如ILI9341配合使用)初始化GUI并啟用電阻式觸摸功能。
MicroPython+LVGL
PICO板的官方micro-python發行版不包含LVGL,因此,我們應該從頭開始交叉編譯micro-python,包含LVGL綁定,并構建一個單獨的UF2固件文件來刷寫PICO板。
如果您使用的是Windows系統,請使用Vmware Workstation(免費)或WSL(我更推薦使用VMware)安裝Ubuntu20或Ubuntu22。然后在Linux命令提示符中運行以下命令來安裝必要的軟件包:
sudo apt update
sudo apt install build-essential git python3 cmake gcc-arm-none-eabi libnewlib-arm-none-eabi
然后執行以下命令克隆GitHub庫“lv_micropython”的一個分支:
git clone –branch update/micropython_v1.24.1 https://github.com/lvgl/lv_micropython.git
然后依次執行以下命令來構建“firmware.uf2”:
cd lv_micropython
git submodule update –init –recursive lib/lv_bindings
make -C ports/rp2 BOARD=RPI_PICO submodules
make -j -C mpy-cross
make -j -C ports/rp2 BOARD=RPI_PICO USER_C_MODULES=../../lib/lv_bindings/bindings.cmake
最后一條命令將輸出類似于圖1的結果。編譯后的文件位于“build-RPI_PICO”文件夾中(圖2)。如果您計劃使用樹莓派Pico以外的開發板,需在構建時傳入板名參數。例如:“Raspberry Pi Pico W: BOARD=RPI_PICO_W”。

圖1:編譯/構建過程中的命令行輸出

圖2:編譯后的文件(firmware.elf、firmware.uf2等)
給樹莓派Pico刷機
將樹莓派Pico啟動到BOOT模式(它會打開一個類似于U盤的文件夾)。下載Flash Nuke2并將其放入該文件夾。它會清除閃存中的殘留數據,并為新固件做好準備。由于閃存已清空,板子將再次以BOOT模式啟動。將“firmware.uf2”文件復制并粘貼到該文件夾(由上一步生成),然后等待開發板完成刷寫。至此完成!您現在已安裝了最新版本的micro-python(1.24.1)和LVGL-9.1。
樹莓派Pico
樹莓派Pico是一款基于RP2040芯片的低成本、高性能微控制器開發板,由樹莓派基金會設計。它配備雙核Arm Cortex-M0+處理器,運行頻率為133MHz(超頻后速度更快),擁有264KB SRAM和2MB板載閃存。與傳統的樹莓派開發板(Zero、3、4、5等)不同,Pico不運行操作系統,而是執行用C、C++或MicroPython編寫的裸機代碼或固件。
樹莓派Pico的主要參數包括:
26個多功能GPIO引腳,包括3個ADC輸入引腳
用于高級硬件控制的I2C、SPI、UART、PWM和PIO(可編程I/O)
低功耗,使其適用于電池供電應用。
支持USB1.1,使其能夠作為USB設備或主機使用。
通過USB接口進行拖放式編程,輕松更新固件
RP2040芯片包含PIO(可編程I/O)狀態機,允許開發人員創建自定義外設,例如VGA輸出、自定義協議或額外的PWM通道。這種靈活性使Pico成為各種應用的強大選擇,涵蓋機器人、物聯網項目、嵌入式系統及教育領域。圖3顯示了官方PICO板的引腳布局。

圖3:官方PICO板的引腳布局
Python GUI應用
我推薦使用Thonny IDE進行RP Pico的Python開發。請按照圖4修改解釋器設置。在您的電腦上,Pico的虛擬COM端口號可能不同,我的電腦上是COM5。

圖4:Pico板的Thonny解釋器設置
下載Python源文件4,并使用Thonny打開它們。然后在樹莓派中將它們“另存為”,文件名與原文件相同。您會收到類似于圖5的提示,此時應選擇“樹莓派Pico”。要注意,在BOOT模式下復制粘貼文件是無效的。BOOT模式僅用于燒錄MCU。

圖5:Thonny詢問“另存為”位置
對“main.py”文件執行相同的操作。選擇此文件名是強制要求的,因為Pico在啟動后只會查找并執行此文件名。圖6顯示了“main.py”的內容。

圖6:“main.py”文件的內容
SPI總線上有兩個SPI設備,但每個設備都在一個特定的頻率范圍內工作;因此,我們應該按如下方式配置兩個SPI實例:
spi = SPI(0, baudrate=20_000_000, sck=Pin(18), mosi=Pin(19), miso=Pin(16))tspi = SPI(0, baudrate=2_000_000, sck=Pin(18), mosi=Pin(19), miso=Pin(16))
第一個頻率為20MHz的SPI驅動ILI9341顯示屏,第二個頻率為2MHz的SPI驅動XP2046觸摸IC。每個SPI設備都通過CS(片選)線進行選擇。圖7顯示了一個簡單的GUI。按下按鈕后,按鈕文本將變為“I pressed”。此示例包含了代碼的所有基本部分(驅動LCD和觸摸、捕獲觸摸事件、LCD分辨率等),您可以根據需要進行修改和擴展。這可能是目前網上唯一一個可運行且簡單易懂的RP Pico開發板Python示例。

圖7:帶有觸摸功能的LVGL 9.1 GUI示例
責編:Ricardo
