中煤第三建設集團投標網(wǎng)站南寧seo怎么做優(yōu)化團隊
樹莓派Pico W開發(fā)板是樹莓派基金會于2022年6月底推出的一款無線WiFi開發(fā)板,它支持C/C++和MicroPython編程。本文介紹樹莓派Pico W無線WiFi開發(fā)板的使用方法及MicroPython編程示例,包括樹莓派Pico W開發(fā)板板載LED使用及控制編程示例,Pico W開發(fā)板用作WiFi無線HTTP網(wǎng)絡服務器的MicroPython編程示例。
1、樹莓派Pico W無線WiFi開發(fā)板簡介
樹莓派Pico W無線WiFi開發(fā)板是在樹莓派Pico基礎上,添加了無線通訊功能模塊,無線模塊硬件采用了英飛凌CYW43439無線芯片,支持WiFi 4無線網(wǎng)絡,給無線網(wǎng)絡控制和通信相關的嵌入式系統(tǒng)與智能硬件應用開發(fā)提供了極大的方便。
Pico W開發(fā)板主要功能特性有:
?采用樹莓派官方自主設計的RP2040 MCU芯片;
?搭載雙核ARM Cortex M0+處理器,運行頻率高達133MHz(靈活時鐘);
?采用英飛凌CYW43439線芯片,支持WiFi 4無線網(wǎng)絡;
?內(nèi)置264KB的SRAM和2MB片上Flash;
?郵票孔設計,可直接焊接集成到用戶自主設計的PCB底板上;
?USB1.1主機和設備支持;
?支持低功耗睡眠和休眠模式;
?可通過USB接口識別海量存儲器進行拖放式程序下載;
?多達26個多功能GPIO引腳;
?2個SPI,2個I2C,2個UART,3個12位ADC,16個程控PWM通道;
?精確的片上時鐘和定時器;
?溫度傳感器;
?片上加速浮點庫;
?8個可編程I/O(PIO)狀態(tài)機,用于支持自定義外設。
2、下載Pico W開發(fā)板MicroPython固件
可從網(wǎng)址https://datasheets.raspberrypi.com/soft/micropython-firmware-pico-w-290622.uf2直接下載Pico W開發(fā)板UF2格式MicroPython固件文件,也可從網(wǎng)址https://www.raspberrypi.com/documentation/microcontrollers/micropython.html或https://micropython.org/download/rp2-pico-w下載Pico W開發(fā)板最新版本UF2格式MicroPython固件文件。
3、安裝MicroPython固件到Pico W開發(fā)板
找到Pico W開發(fā)板的[BOOTSEL]按鈕,將連接PC機與Pico W的USB-Micro USB電纜線Micro USB接頭插入Pico W開發(fā)板,如圖1所示。按住[BOOTSEL]按鈕并保持,然后將USB-Micro USB電纜線USB接頭插入PC機USB接口,即通過USB接口將Pico W開發(fā)板連接到已開機的電腦,稍后松開Pico W開發(fā)板的[BOOTSEL]按鈕。此時,Pico W開發(fā)板進入USB海量存儲工作模式(USB mass storage device mode),說得通俗一點,此時,Pico W開發(fā)板就相當于是一個U盤,它會顯示一個名為RPI-RP2的盤符和兩個文件。將剛下載好的micropython-firmware-pico-w-290622.uf2固件文件拖拽到(或復制到)RPI-RP2所在盤中,Pico W開發(fā)板MicroPython固件安裝成功,Pico W重新啟動進入虛擬串口終端工作模式。
圖1
4、安裝Thonny IDE
Thonny IDE支持Windows、Mac、Linux操作系統(tǒng),可從Thonny官方網(wǎng)站https://thonny.org下載最新版Thonny IDE,如圖2所示。這里下載Windows版Thonny并安裝到PC機。
圖2
5、使用Thonny IDE設置Pico W開發(fā)板MicroPython編程環(huán)境
運行Thonny,單擊菜單欄的[Tools],選擇[Options…],彈出[Thonny Options]對話框,選擇【W(wǎng)hich interpreter or device should Thonny use for running your code?】下拉列表中的[MicroPython(Raspberry Pi Pico)]選項,如圖3所示。如果沒有發(fā)現(xiàn)[MicroPython(Raspberry Pi Pico)]選項,那么請檢查PC機是否連接了Pico W開發(fā)板。
圖3
選擇【Port】下拉列表,本人筆記本電腦連接Pico W開發(fā)板設備后,其設備名稱是[USB串行設備(COM24)],如圖4所示。
圖4
6、使用Thonny Shell輸入MicroPython命令點亮Pico W開發(fā)板板載LED
與樹莓派Pico開發(fā)板板載LED通過470Ω貼片電阻直接連接到RP2040 MCU芯片的GPIO25(GP25)引腳不同,樹莓派Pico W開發(fā)板板載LED沒有連接到RP2040 MCU芯片引腳,而是連到無線芯片的GPIO引腳。樹莓派Pico W開發(fā)板MicroPython固件針對GPIO引腳的變化、新增WiFi無線連接等功能做了修改。
運行Thonny,在Thonny IDE開發(fā)環(huán)境MicroPython Shell命令行下,控制樹莓派Pico W板載LED的亮/滅基本語句如下:
>>> import machine
>>> onboard_led = machine.Pin("LED", machine.Pin.OUT)
>>> onboard_led.value(1) # Pico W板載LED點亮
>>> onboard_led.value(0) # Pico W板載LED熄滅
>>> onboard_led.on() # Pico W板載LED點亮
>>> onboard_led.off() # Pico W板載LED熄滅
若查看Pico W板載LED對象onboard_led,可直接輸入onboard_led:
>>> onboard_led
此時,Thonny Shell顯示:
Pin(WL_GPIO0, mode=OUT)
以上MicroPython命令操作界面執(zhí)行情況如圖5所示。
圖5
我們也可以執(zhí)行如下命令:
>>> onboard_led = machine.Pin("LED", machine.Pin.OUT, value=1)
該命令將配置Pico W板載lED對象onboard_led,并將該對象與Pico W板載LED關聯(lián)并點亮板載LED。
7、控制Pico W開發(fā)板板載LED閃爍MicroPython程序示例
Pico W板載LED閃爍程序清單如下:
# Filename: pico_w_onboard_led.py
import time
def onboard_led_blink():led = machine.Pin('LED', machine.Pin.OUT)led.on()time.sleep(.5)led.off()time.sleep(.5)
while True:
onboard_led_blink()
在Thonny IDE編輯窗口錄入以上程序,順序點擊[File]→[Save as…]→[Raspberry Pi Pico]將程序以文件名“pico_w_onboard_led.py”存儲到Pico W開發(fā)板,如圖6所示。點擊Thonny中的播放按鈕運行程序,此時可看到Pico W板載LED間斷閃亮。
圖6
8、Pico W開發(fā)板用作WiFi無線HTTP網(wǎng)絡服務器MicroPython編程示例
這里將Pico W開發(fā)板用作WiFi無線HTTP網(wǎng)絡服務器,我們在任意一臺電腦或手機的瀏覽器輸入Pico W開發(fā)板的IP地址打開index.html網(wǎng)頁。當點擊網(wǎng)頁中的[1]/[0]按鈕時即可WiFi無線控制Pico W開發(fā)板板載LED的亮/滅。
下面分別編寫main.py程序文件、index.html網(wǎng)頁文件。
(1)main.py程序文件清單
# Filename: main.py
# Raspberry Pi Pico W
# 導入Pico W MicroPython模塊
import rp2 # 導入rp2模塊,該模塊包含專門用于RP2040的函數(shù)和類
import network # 導入network模塊,用于連接WiFi
import ubinascii # 導入ubinascii模塊,用于將MAC地址轉(zhuǎn)換為十六進制字符串
import machine # 導入machine模塊,用于GPIO控制
import urequests as requests # 導入urequests模塊,用于HTTP請求
import time # 導入time模塊,用于延時
import socket # # 導入socket模塊,用于建立套接字
# 設置國家/地區(qū)代碼以避免發(fā)生可能的錯誤
# CN/US/DE/DK/GB/JP(國家或地區(qū)代碼:中國/美國/德國/丹麥/英國/日本)
rp2.country('CN') # 這里設置Pico W的國家/地區(qū)代碼為中國
wlan = network.WLAN(network.STA_IF) # 創(chuàng)建WLAN連接對象
wlan.active(True) # 激活WLAN接口# 查看Pico W開發(fā)板無線WiFi的MAC地址
# 獲取MAC地址,并將其轉(zhuǎn)換為十六進制字符串
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('Pico W MAC地址=' + mac) # 顯示Pico W開發(fā)板十六進制MAC地址ssid = '所使用的WiFi名稱' # 設置WiFi名稱 (ssid: service set identifier)
psw = '所使用的WiFi密碼' # 設置WiFi密碼wlan.connect(ssid, psw) # 連接到WiFi網(wǎng)絡timeout = 10 # 設置最長等待連接時間為10秒
while timeout > 0:if wlan.status() < 0 or wlan.status() >= 3: # 如果WiFi連接成功或者失敗break # 跳出循環(huán)timeout -= 1print('等待連接!')time.sleep(1) # 延時1秒# 定義Pico W板載LED閃亮函數(shù)
def onboard_led_blink(blink_numbers):onboard_led = machine.Pin('LED', machine.Pin.OUT) # 創(chuàng)建GPIO控制對象for i in range(blink_numbers):onboard_led.value(1) # 點亮LED# onboard_led.on() # 另一種點亮LED的方法time.sleep(0.5) onboard_led.value(0) # 熄滅LED# onboard_led.off() # 另一種熄滅LED的方法time.sleep(0.5)wlan_status = wlan.status() # 獲取當前WiFi連接狀態(tài)
onboard_led_blink(wlan_status) # 根據(jù)WiFi連接狀態(tài)控制LED# 處理連接錯誤
if wlan_status != 3: # 如果WiFi連接失敗raise RuntimeError('WiFi連接失敗!') # 拋出異常
else:print('WiFi已連接...')status = wlan.ifconfig() # 獲取WiFi接口配置信息print('IP地址=' + status[0]) # 輸出IP地址# 定義加載HTML頁面函數(shù)
def get_html(html_name):with open(html_name, 'r') as file: # 打開HTML文件html = file.read() # 讀取HTML內(nèi)容return html# 打開HTTP Web服務器套接字socket
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] # 獲取IP地址和端口號
s = socket.socket() # 創(chuàng)建socket對象
s.bind(addr) # 綁定socket到IP地址和端口號
# 開始監(jiān)聽端口號,最多只允許1個客戶端連接
s.listen(1)print('正在監(jiān)聽', addr)onboard_led = machine.Pin('LED', machine.Pin.OUT)# 進入循環(huán),監(jiān)聽連接
while True:try:# 接受客戶端連接,獲取連接和地址cl, addr = s.accept()print('客戶機連接來自', addr)# 接收客戶端請求消息r = cl.recv(1024)r = str(r)# 在請求消息中查找是否有開/關LED的命令onboard_led_on = r.find('?onboard_led=1')onboard_led_off = r.find('?onboard_led=0')print('LED=', onboard_led_on)print('LED=', onboard_led_off)# 若找到'?onboard_led=1',則開LEDif onboard_led_on > -1:print('開LED')onboard_led.value(1)# 若找到'?onboard_led=0',則關LEDif onboard_led_off > -1:print('關LED')onboard_led.value(0)# 獲取HTML文件內(nèi)容response = get_html('index.html')# 發(fā)送HTTP響應頭cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')# 發(fā)送HTML文件內(nèi)容cl.send(response)# 關閉客戶端套接字cl.close()# 若發(fā)生OSError錯誤,則關閉客戶端套接字并輸出相關信息except OSError as e:cl.close()print('關閉連接')
在main.py程序中,ssid = '所使用的WiFi名稱’要用具體的WiFi名稱替換,psw = '所使用的WiFi密碼’要用相應的密碼替換。由于本程序代碼已給出了詳細注釋,這里不再作進一步解釋。
(2)index.html網(wǎng)頁文件清單
<!DOCTYPE html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>樹莓派Pico W開發(fā)板</title></head><body><h3>樹莓派Pico W</h3><p>控制板載LED亮滅</p><a href=\"?onboard_led=1\"><button>1</button></a> <a href=\"?onboard_led=0\"><button>0</button></a></body>
</html>
復制粘貼上面的main.py程序和index.html文件內(nèi)容,并用相同的文件名分別存到Pico W開發(fā)板,如圖7所示。
圖7
運行Pico W開發(fā)板中的main.py程序后,在Thonny Shell窗口顯示情況如圖8所示。
圖8
從圖8可知,這里的Pico W開發(fā)板用作WiFi無線HTTP網(wǎng)絡服務器的IP地址為192.168.1.12?,F(xiàn)用一臺筆記本電腦打開瀏覽器,在瀏覽器地址欄輸入IP地址192.168.1.12,將顯示index.html網(wǎng)頁。在網(wǎng)頁中,當點擊[1]按鈕(標紅色框的按鈕)時(圖9所示),Pico W開發(fā)板板載LED被點亮(圖10)。點擊[0]按鈕時,Pico W開發(fā)板板載LED熄滅。
圖9
圖10
打開手機瀏覽器,在地址欄輸入IP地址192.168.1.12,同樣可以實現(xiàn)WiFi無線控制Pico W板載LED的亮滅。
若Pico W開發(fā)板無法正常連接WiFi,可按下面幾條進行處理:
(1)查看使用的SSID和密碼是否正確;
(2)如果使用學校或工作場所的WLAN,未經(jīng)授權(quán)的設備可能無法訪問WiFi;
(3)如果Pico W開發(fā)板WiFi連接一次不成功,可嘗試再次連接WiFi。
最后,我們還可以拔下Pico W開發(fā)板USB-Micro USB電纜線連接到電腦端的USB插頭,斷開Pico W開發(fā)板與電腦之間的連接。將Pico W開發(fā)板USB-Micro USB電纜線接電腦端的USB插頭轉(zhuǎn)接到一個5V USB直流電源(如使用Samsung 5V手機USB充電器電源)。此時,Pico W開發(fā)板將作為HTTP網(wǎng)絡服務器獨立運行。