在星爺電影食神中,唐牛說:「瀨尿牛丸彈性十足,還可用來打乓乒球,好玩又有噱頭!我都忍不住買了一碗!」,我想這正是我手上拿著Raspberry Pi Pico(以下簡稱Pi Pico)的心情,怎麼能不跟一波風潮呢。(ps.天竺鼠車車表示不服)
Pi Pico是一款有Arm Cortex-M0雙核心(133MHz)、264KB SRAM及2MB Flash的一款單晶片(MCU),關於規格介紹的文章已充斥網上了,這裡就不多說明了,可以參考一下官網說明[1]或者陸向陽大大的文章[2]。
為了能快點試試這小傢伙究竟有多好玩,趁著周末無聊,就順手焊了一塊板子方便測試,其中包括了兩個輸出的LED(可數位或類比輸出)、兩個按鍵輸入,一個半可變電阻可調的類比輸入,最後再搭上一塊I2C介面的OLED顯示器,電路接線圖如Fig. 1所示,實體照片如Fig. 2所示。(ps. 不要問我為什麼不用麵包板,因為我喜歡享受焊板子的手感)
Fig. 1 Pi Pico測試用電路板接線圖。(OmniXRI Feb. 2021設計/繪圖)(點擊圖放大) |
Fig. 2 Pi Pico測試用電路板實體照片。(OmniXRI Feb. 2021設計/製作)(點擊圖放大) |
初步看完Raspberry官網的介紹[1.a]後,覺得這塊板子和之前在玩的Arm Cortex-M0/M3或者Arduino有些不同,應該有許多更進階的內容可以玩,一篇應該寫不完,所以這一次先簡單介紹系統安裝及基本GPIO數位及類比輸出入應用,後續會視情況繼續寫系列實作文章。
依據官方說明得知這塊板子有兩種開發模式,MicroPytho[1.b]及C/C++ SDK[1.c],此次先從Windows系列加上MicroPython開發方式進行介紹。至於Liunx及C/C++ SDK方式就留待下次再介紹。或者有興趣的朋友可自行從官網上學習。
*開發工具Thonny安裝及MicroPython環境設置
一般MicroPython的開發工具有很多種,而此次Pi Pico推薦使用Thonny,主要是為了解決一些硬體相容性問題,所以一定要使用3.3.3版以上才能支援[3]。如果自己的電腦上已有舊的版本,務必要先移除後重新下載並安裝新的版本,不然將無法正確和Pi Pico連線。Thonny官網下載畫面如Fig. 3所示。安裝程序很簡單,執行thonny-3.3.3.exe,一直按OK直到結束即可。安裝好先不急著啟動執行Thonny。
Fig. 3 Thonny官網及3.3.3版下載選項。[3] (點擊圖放大) |
接著到Raspberry Pi官網[1],點選"Getting started with MicroPython"頁面,下載UF2檔案。接著按住Pi Pico上BOOTSEL按鍵不放再插入USB供電,插入USB後馬上放開BOOTSEL,此時電腦上就會多出一個巨量儲存裝置(隨身碟)。然後再將剛才下載的*.uf2拖(複製)到新產生的儲存裝置中,Pi Pico就會自動重啟,等待編輯器進行連線編輯。若正確工作則開啟Windows裝置管理員時會看到一個新的虛擬連接埠(COM),埠號會自動配置。最後就可開啟Thonny,但此時Thonny還不能正確工作。流程如Fig. 4所示。
Fig. 4 Pi Pico安裝MicroPython執行環境步驟。(OmniXRI Feb. 2021整理製作)(點擊圖放大) |
接著先檢查Thonny是否是3.3.3版本,再來進入選單"Run"-"Select interpreter...",選擇"MicroPython(Raspberry Pi Pico)"直譯器,按OK即可啟動,如Fig. 5所示。若仍無法正確連線,則按一下快速工具列[Stop]圖標重啟MicroPython。若還不行則關閉Thonny再重新啟動即可。
Fig. 5 Thonny連接Pi Pico基本設定流程。(OmniXRI Feb. 2021整理製作)(點擊圖放大) |
*數位GPIO應用程式
一般拿到新的MCU開發板,第一個程式大多都是讓LED閃爍(Blink),就像學習一種新的程式語言要先print "Hello World!"一樣。所以Pi Pico也不例外。
Pi Pico板子上自帶一顆LED方便測試用,被安排在GPIO25上。這裡的編號方式是承襲樹莓派編號方式,而不是像一般ARM Cortex-M0用PA, PB, PC埠號方式。下面【範例一】就是令板上LED點亮0.5秒、熄滅0.5秒,一直循環,產生LED閃爍效果。其中import machine是用來設定Pi Pico所有相關硬體參數,若板子沒有正確連線或者直譯器沒有選對,則執行程式後會出現"import machine module named not found"的錯誤。
【範例一】
import machine # 導入Pi Pico硬體參數設定類別
import utime # 導入時間相關類別
led_onboard = machine.Pin(25, machine.Pin.OUT) #設定GP25為輸出腳
while True: # 若真則循環
led_onboard.value(1) # 點亮LED
utime.sleep(0.5) # 延時0.5秒
led_onboard.value(0) # 熄滅LED
utime.sleep(0.5) # 延時0.5秒
編寫完程式後,可按[F5]鍵執行程式,或者按功能列上綠色箭頭的快捷鍵亦可。若想重新編輯或停止程式執行,則需要按[Ctrl+F2]或按功能列上紅色Stop鍵停止。程式運行中是不能編輯的。編輯完成後可選擇[File]/[Save Copy]儲存程式,此時會問是要存在這台電腦(This Computer)或裝置(Raspberry Pi Pico)上,可依需求自行決定。另外提醒一下,當USB插除(斷電)再重新插入(供電)後,會發現剛才儲存在裝置中的程式並沒有運行,這是因為預設只會執行main.py這個程式。
接著【範例二】為簡單測試按鍵輸入並對應到LED輸出,PB1按下時LED1亮,反之熄滅。而PB2相反,沒按時LED2亮,反之則熄滅。為簡化程式可以將 import machine 改成 from machine import Pin,則後續程式則可將machine.Pin簡化成Pin。這裡按鍵PB1和PB2在實體電路上並沒有加裝提升(Pull Up 或稱 Pull High)電阻來確保按鍵未按下時輸入信號一定在高電位,而是直接使用晶片內建的參數設定即可。直接使用Pin.value()即可讀取輸入信號目前狀態。
【範例二】
from machine import Pin # 從machine導入Pin參數設定類別
led1 = Pin(16, Pin.OUT) # 設定GP16為LED1輸出腳
led2 = Pin(17, Pin.OUT) # 設定GP17為LED2輸出腳
pb1 = Pin(18, Pin.IN, Pin.PULL_UP) # 設定GP18為PB1輸入腳,且自帶pull high電阻
pb2 = Pin(19, Pin.IN, Pin.PULL_UP) # 設定GP19為PB2輸入腳,且自帶pull high電阻
while True: # 若真則循環
if(pb1.value() == 0): # 若PB1輸入為Low(按下)
led1.value(1) # 點亮LED1
else: # 反之
led1.value(0) # 熄滅LED1
if(pb2.value() == 1): # 若PB2輸入為High(未按)
led2.value(1) # 點亮LED2
else: # 反之
led2.value(0) # 熄滅LED2
*類比GPIO應用程式
在Pi Pico上GP1到GP28除了當作一般數位輸出/輸入外,亦可作為PWM(模擬類比)輸出點,但只有GP26,27,28可以作為類比輸入點(ADC0,ADC1,ADC2)。另外晶片內部有一溫度感測元件作為ADC3類比輸入。Pi Pico上有提供3.3V類比轉換參考電壓ADC_VREF及類比接地信號AGND。在這個測試電路中,使用一個10K歐姆的半可變電阻(SVR)作為類比信號的模擬輸入,而隨意指定一個LED作為PWM(模擬類比)輸出。【範例三】則是讀取ADC0(GP26)的數值,再將其轉成PWM信號輸出至LED2,如此當調整SVR時ADC0讀到電壓大就令LED變得較亮,反之則令LED變暗,相當於是類比調整LED亮度。
【範例三】
from machine import Pin, ADC, PWM # 從machine導入Pin, ADC, PWM硬體參數設定類別
import utime # 導入時間相關類別
pwm = PWM(Pin(17)) # 設定LED2為PWM輸出腳
pwm.freq(1000) # 設定PWM頻率為1000 Hz
adc = ADC(0) # 設定連接到ADC0(GP26),亦可寫成ADC(26)
factor = 3.3 / (65535) # 電壓轉換因子
while True: # 若真則循環
reading = adc.read_u16() # 讀取類比輸入值16bit無號整數
pwm.duty_u16(reading) # 將輸入值轉至PWM工作周期值
vlot = reading * factor # 將輸入值轉成電壓值
print(vlot) # 將輸入電壓值列印至Shell區
utime.sleep(0.1) # 延時0.1秒
*小結
本文簡單介紹了如何建置一個MicorPython的開發環境,並使用Thonny進行範例程式開發,三個範例充份示範了數位及類比的輸出/輸入點如何使用。至於電路中的OLED驅動方式,就留待下回分解,敬請期待。
參考文獻
[1] Getting Started with Raspberry Pi Pico – Raspberry Pi
a. Board Specifications
b. Getting started with MicroPython
c. Getting started with C/C++
https://www.raspberrypi.org/documentation/pico/getting-started/
[2] 陸向陽, "破盤4美元!Raspberry Pi Pico技術與策略解析"
https://makerpro.cc/2021/02/cost-4-dollars-raspberry-pi-pico/
[3] Thonny - Python IDE for beginners
https://thonny.org/
沒有留言:
張貼留言