Raspberry Pi Pico W_使用 Pico W 連結至網際網路 (板載LED設定)|奧斯丁國際有限公司 OURSTEAM Internationl
icon教學資源
2022/09/23

Raspberry Pi Pico W_使用 Pico W 連結至網際網路 (板載LED設定)


使用 C/C++ 或 MicroPython 線上取得 Raspberry Pi Pico W
 
  目錄:
  第一章 關於樹莓派 Pico W
  第二章 使用 C SDK 連接至網際網路
         2.1. 安裝 SDK 和範例
         2.2. 建構 SDK 範例
         2.3. 創建自己的專案
               2.3.1 了解更多資訊與專案
         2.4. 該選擇哪種硬體運作?
  第三章 使用 MicroPython 連結至網際網路
         3.1. 為 Pico W 取得 MicroPython
         3.2. 於 Pico W 上安裝 MicroPython
         3.3. 使用 USB 連接 樹莓派
               3.3.1. 使用整合開發環境(IDE)
               3.3.2. 透過串列埠遠端存取
         3.4. The on-board LED (板載LED)
         3.5. 安裝模組
         3.6. 連結至無線網路
               3.6.1. 連接狀態代碼
               3.6.2. 設置國家/地區
               3.6.3. 省電模式
         3.7. MAC 位址(電腦網路卡號碼)
         3.8. 發出 HTTP 請求
               3.8.1. 搭配 sockets 的 HTTP 
               3.8.2. 搭配 urequests 的 HTTP
               3.8.3. 確保牢固的連接
         3.9. 建立 HTTP 伺服器
​               3.9.1. 靜態頁面的簡單伺服器
               3.9.2. 透過網路伺服器控制 LED 燈
               3.9.3. 非同步網路伺服器
         3.10. Iperf(指令式網路頻寬測試)運作
         3.11. 該選擇哪種硬體運作?
  附錄 A:從源頭構建 MicroPython
  附錄 B:文檔發布歷史
 

第一章 關於樹莓派 Pico W

Raspberry Pi Pico W 以 Raspberry Pi RP2040 微控制器芯片為基礎的微控制器板。


圖一:The Raspberry Pi Pico W Rev3 板

Raspberry Pi Pico W 式款低成本且高靈活應用的 RP2040 開發平台,此外還有2.4GHz 無線接口和以下主要功能:
  • 內建 2MB 外部閃存的 RP2040 微控制器晶片
  • 2.4GHz 無線 (802.11n) 介開發板載
  • 用於電源、數據與對閃存重新編程的微型 USB 接口
  • 帶有 0.1 英寸通孔針的 40 針 21mm×51mm 'DIP' 型 1mm 厚的邊緣齒型 PCB
  • 外露 26 個多功能 3.3V 通用 I/O (GPIO)
  • 有 23 個僅適用於數字與另外 3 個支援 ADC 的 GPIO 
  • 可作為模組進行表面貼裝
除了添加無線網絡,Raspberry Pi Pico W 與 Raspberry Pi Pico 非常相似,如同所有以 P2040 為基礎的開發板,皆有共享相同的開發環境。如果您以前沒有使用過以 P2040為基礎的開發板,可以閱讀 Raspberry Pi Pico 入門 。如果您打算使用 C SDK,又或者如果您正在考慮使用 MicroPython,可參閱 Raspberry Pi Pico Python SDK

enlightened注意
Raspberry Pi Pico W 的完整詳細信息可在 Raspberry Pi Pico W Datasheet 中找到。
 

第二章 使用 C SDK 連接至網際網路

新增 C/C++ SDK 樹莓派 Pico W 的無線支援


enlightened注意
如果您以前沒有使用過以 P2040 為基礎的開發板,您可以閱讀 Getting started withRaspberry Pi Pico,而有關 SDK 的更多詳細資訊以及 API 級文檔可以在 Raspberry Pi Pico C/C++ SDK 手冊中找到。


 
2.1. 安裝 SDK 和範例

如何用 SDK 開始的完整指令,請看 Getting started with Raspberry Pi Pico 此手冊。



enlightened警告
如果您尚未在 pico-sdk checkout 中初始化 tinyusb 子模組,則 USB CDC 串行和其他 USB 函數和範例代碼將不起作用,因為 SDK 不包含 USB 功能。同樣,如果您沒有在 checkout 時初始化 cyw43-driverlwip 子模組,那麼與網絡相關的功能將不會啟用。


 
2.2. 建構 SDK 範例

構建 SDK 範例和其他無線代碼會需要您指定網絡 SSID 和密碼,如下所示:
 

 
 
enlightened注意
命令行標誌 -DWIFI_SSID="Your Network" -DWIFI_PASSWORD="Your Password" 將由 pico-examples 使用來設置,並呼叫 cyw43_arch_wifi_connect_xxx() 來連接至您的無線網路。

為樹莓派 Pico W 建立一個可掃描附近無線網路的基本示範,你可以這麼做:



與其他目標一起,我們現在構建了一個名為 picow_scan_test_background.uf2 的二進製文件,可以將其拖到
RP2040 USB 大容量存儲設備中。

該二進製文件將使用 Raspberry Pi Pico W 的無線芯片掃描無線網絡。

首次將軟件加載到以 P2040 為基礎的開發板中,最快方法是將其安裝為 USB 大容量儲存裝置。這樣做可以讓您將文件拖到板上以對閃存進行編程。繼續使用微型 USB 電纜,將 Raspberry Pi Pico W 連接到您的 Raspberry Pi,確保按住 BOOTSEL 按鈕,強制它進入 USB 大容量存儲裝置中。

如果您正在運行 Raspberry Pi 桌面,Raspberry Pi Pico 應自動掛載為 USB 大容量存儲
設備。從這裡,您可以將 UF2 文件拖放到大容量存儲設備上。 RP2040 將重新啟動,卸載
本身作為大容量存儲設備,並開始運行閃存代碼。

默認情況下,代碼將通過串行 UART 報告其結果


enlightened重要
使用板配置文件在每個板的基礎上配置默認 UART 引腳。默認的樹莓派Pico W UART TX 引腳(Pico W 外)是引腳 GP0,UART RX 引腳(Pico W 內)是引腳 GP1。

要查看文本,您需要在 Raspberry Pi 主機上啟用 UART 串​​行通訊。為此,請運行 raspiconfig:



當詢問您:Would you like a login shell to be accessible over serial?(您是否希望透過以下方式訪問登錄 shell
串行?)時,到 Interfacing Options → Serial 選擇 "No";當詢問:Would you like the serial port hardware to be enabled? (您想啟用串行端口硬體嗎?)選擇 "Yes",請參照圖二。




圖二:於樹莓派上使用 raspi-config 來啟用一個串行UART 。

若要離開 raspi-config,需選擇 "Yes" 並重新啟動您的 Raspberry Pi 以啟用串行端口。
接著,您應該使用以下圖表將 Raspberry Pi 和 Raspberry Pi Pico 連接在一起:


請看圖三


圖三:樹莓派 Pi 4 和樹莓派帶有 UART0 的 Pi Pico 連接在一起。

一旦兩塊板連接在一起後,如果尚未安裝 minicom,則應安裝:

 

接著打開串行端口:



您應該會看到我們的無線掃描結果打印到控制台,請看圖四


enlightened小訣竅
要退出 minicom,請使用 CTRL-A 後跟 X。



圖四:在控制台中的無線掃描結果
 
2.3. 創建自己的專案

繼續創建一個目錄來存放您的測試項目,該目錄位於 pico-sdk 目錄旁邊,


然後在目錄下創建一個 test.c 文件,



1. 將 A Network 替換為您的無線網絡的 SSID 名稱。
2. 將A Password 替換為您的無線網絡密碼。
連同一個 CMakeLists.txt 文件,



然後將 pico_sdk_import.cmake 文件從 pico-sdk 安裝中的 external 文件夾複製到測試項目文件夾



以及 lwIP 所需的 lwipopts.h 文件。



現在應該有一些看起來像下方這樣的呈現,



並且可以像我們之前在上一節中的範例一樣構建它。



然後,如果您的 Raspberry Pi Pico W 已經插入,請從您的點腦上拔除。然後按住 BOOTSEL 按鈕,同時將其重新插入電腦。接著將 test.uf2 二進製文件拖放到 RPI-RP2 大容量存儲卷,它將安裝在您的桌面上。

打開串口:



現在,您應該會看到一條消息,表明 Pico W 已連接到您的無線網絡。




 
 2.3.1 了解更多資訊與專案

有關 C SDK 的更多訊息,請參閱 Raspberry Pi Pico C/C++ SDK 手冊。雖然有關 lwIP 的資訊
可以在項目網站上找到。範例代碼可以作為 pico-examples Github 存儲庫的一部分找到。

 


2.4. 該選擇哪種硬體運作?
C SDK 中沒辦法直接呼叫它的方法來讓軟件發現它是否有在Raspberry Pi Pico 或 Pico W 上運行。但是,可以間接被發現底層硬體的類型。如果載板藉由 USB 或 VSYS 供電,那麼 3v3_EN 不會從外部拉低,搭配低電平 GPIO25,Raspberry
Pi Pico W ADC3 將維持在 0V 左右,為大約 1/3 的 Raspberry Pi Pico VSYS

創建一個 test.c 文件,



在以下 CMakeLists.txt 文件旁,



在項目目錄中為 Raspberry Pi Pico W 提供了這個,



這是給原始的 Raspberry Pi Pico 板,

 



 


第三章 使用 MicroPython 連結至網際網路
 
新增 MicroPython 樹莓派 Pico W 的無線支援。預構建的二進製文件可以從 文件 網站中的 MicroPython 區來下載,應該提供大多數帶有預集成到二進製文件中的 micropythonlib 案例。

enlightened注意
如果您以前沒有使用過以 P2040為基礎的開發板,您可以從閱讀 Raspberry Pi Pico Python SDK 手冊開始。


 
3.1. 為 Pico W 取得 MicroPython
 
預建二進制:最新 MicroPython 韌體的預構建二進製文件可從 文件 網站中的 MicroPython 區來下載。

獲取 MicroPython 的最快方法是從 文件 網站下載預構建的發布二進製文件。如果你不能或不想使用預構建的版本——例如,如果你想為 MicroPython 開發一個 C 模組 —— 你可以按照 附錄 A > 中的說明獲取 MicroPython 的源代碼,您可以使用它來構建自己的 MicroPython 韌體二進製文件。



3.2. 於 Pico W 上安裝 MicroPython

Raspberry Pi Pico W 具有 BOOTSEL 模式,用於通過 USB 端口對韌體進行編程。當電路板加電時,按住 BOOTSEL 按鈕,它會進入一個特殊模式,它會顯示為一個 USB 大容量存儲設備。先確保您的 Raspberry Pi Pico W 未插入任何電源:如果已插入,請斷開 micro USB 電線,並斷開可能為電路板供電的任何其他電線,例如通過 VSYS 或 VBUS 引腳。現在按住 BOOTSEL 按鈕,然後插入 micro USB 電線(希望它的另一端可插入您的電腦)。

接著應該會彈出一個名為 RPI-RP2 的磁碟。繼續將 MicroPython firmware.uf2 文件拖到這個磁碟上。這個將 MicroPython 韌體編程到 Raspberry Pi Pico W 上的閃存中。

將 UF2 文件編程到閃存中需要幾秒鐘。完成後板子會自動重啟, RPI-RP2 磁碟會消失,並啟動到 MicroPython中。

當 MicroPython 第一次啟動時,它會停下來等待您的連接並告訴它要做什麼。您可以加載一個 .py 文件從您的電腦到板上,但與它交互的更直接的方法是通過所謂的 readevaluate-print 循環或 REPL。

有兩種方法可以連接到這個 REPL;這樣您就可以通過 USB 或 Raspberry Pi Pico GPIO 上的 UART 串​​行端口來與板上的 MicroPython 韌體進行通訊。


enlightened注意
於默認情況下,RP2040 的 MicroPython 端口不會通過 UART 端口外露 REPL,請參閱 Raspberry Pi Pico Python SDK 有關如何配置 MicroPython 以允許您通過 UART 連接到 REPL 的更多詳細訊息。



3.3. 使用 USB 連接 樹莓派

MicroPython 韌體配備了一個虛擬 USB 串行端口,可通過 micro USB 連結至 Raspberry Pi Pico W 上的連接器。您的電腦需要注意此串行端口並將其列為字符設備,大多數情況下可能是 /dev/ttyACM0


enlightened小訣竅
您可以運行 ls /dev/tty* 來列出您的串行端口。 可能有不少,但 MicroPython 的 USB 串口會啟動使用 /dev/ttyACM。 如有疑問,請拔下微型 USB 連接器並查看哪裡有誤。 如果你沒有看到任何事情,可以再嘗試重新啟動您的樹莓派。

你可以安裝 minicom 來訪問串口:



然後像這樣打開它:



-D /dev/ttyACM0 minicom 指向 MicroPython 的 USB 串行端口,而 -o 標誌本質上意味著“就這樣做”。無需擔心波特率,因為這是一個虛擬串行端口。

在您打開 minicom 的終端中按確認鍵(Enter)幾次。應該會看到這個:



這是一個提示。 MicroPython 希望你輸入一些東西,然後告訴它要做什麼。

如果您在 minicom 終端聚焦時按鍵盤上的 CTRL-D,您應該會看到類似以下的消息:



這個組合鍵告訴 MicroPython 重新啟動。 您可以隨時執行此操作。 當重新啟動時,MicroPython 將打印輸出一條消息,準確說明它正在運行的韌體版本以及構建時間。 您的版本號將是與此處顯示的不同。


enlightened注意
如果您使用的是 Apple Mac,只要您使用的是最新版本的 macOS,例如 Catalina,驅動程序應該已經加載。 否則,請參閱製造商網站了解 FTDI 芯片驅動程式。 然後你應該使用終端程序以連接到 Serial-over-USB (USB CDC)。 串行端口將顯示為 /dev/tty.usbmodem 並帶有一個數字附加到最後。

如果您還沒有安裝終端程序,您可以使用
Homebrew 安裝 minicom:
     $ brew install minicom

並連接到板如下。

     $ minicom -b 115200 -o -D /dev/tty.usbmodem0000000000001


也可以使用其他終端應用程序,如
 CoolTermSerial



3.3.1. 使用整合開發環境(IDE)

MicroPython 端口到 Raspberry Pi Pico W 和其他以 RP2040 為基礎的開發板,可用於常用開發環境。Thonny 是推薦的編輯。 Thonny 軟件包可用於 Linux、MS Windows 和 macOS。
安裝後,使用 Thonny 開發環境在所有三個平台上都是相同的。 最新版本可以從 https://thonny.org/ 下載 Thonny。

有關如何使用 Thonny 編輯器的完整詳細信息,請參閱在 Raspberry Pi Pico Python SDK 手冊 中 使用開發環境 的部分。


3.3.2. 透過串列埠遠端存取

建議您使用 mpremote 工具通過串口使用設備。



有了這個,您可以直接在 Raspberry Pi Pico W 上從本機電腦運行腳本。



enlightened注意
 
有關 mpremote 的更多信息,請參閱 文檔 。
 
3.4. The on-board LED (板載LED)

與最初的 Raspberry Pi Pico 不同,Pico W 上的板載 LED 沒有連接到 RP2040 上的引腳,而是連接到
無線芯片上的 GPIO 引腳。 MicroPython 進行了相應的修改。 這意味著您現在可以執行以下操作:




甚至:



來改變當前狀態。 但是,如果您現在查看 led 物件:



您還可以執行以下操作:



這將配置 LED 物件,將其與板載 LED 連接並打開 LED。


enlightened注意
Raspberry Pi Pico W 的完整詳細訊息可在 Raspberry Pi Pico W 數據表 中找到。 WL_GPIO1 連接到 RT6154A 上的 PS/SYNC 引腳允許選擇不同的操作模式,而 WL_GPIO2 可用於監控 USB VBUS



3.5. 安裝模組

您可以使用 upip 工具來安裝默認 MicroPython 安裝中不存在的模組。





3.6. 連結至無線網路
我們正在使用 network 庫與無線硬件通訊:



雖然上述代碼更正確,但您應該還是要等待代碼連接成功或連接失敗,然後處理任何連接可能發生的錯誤。



您也可以斷開連接,然後連接到不同的無線網絡。



有關 network.WLAN 庫的更多訊息,請參閱 庫文檔

 


3.6.1. 連接狀態代碼

wlan.status() 調用返回的值在 CYW43 無線驅動程式中定義,並直接傳送到用戶代碼中。





3.6.2. 設置國家/地區

默認情況下,未設置無線網絡的國家/地區設置。 這意味著驅動程式將使用全球默認值安全設置,這可能意味著某些頻道不可用。



這可能會導致某些無線網絡出現問題。 如果您發現您的 Raspberry Pi Pico W 無法連接到您的無線網絡,您可能想嘗試設置國家代碼,例如





3.6.3. 省電模式

於默認情況下,無線芯片在閒置時將激活省電模式,這可能會導致其回應速度較慢。 如果您正在運行服務器或需要更多回應,您可以通過切換電源模式來更改它。




 
3.7. MAC 位址(電腦網路卡號碼)

MAC 存儲在無線芯片 OTP 中



enlightened注意
我們必須先設置無線激活(加載韌體)才能獲取 MAC 地址



 3.8. 發出 HTTP 請求

您可以使用原始套接字對 HTTP 請求採用低級方法,也可以使用 urequests 庫採用高級方法。

3.8.1. 搭配 sockets 的 HTTP





3.8.2. 搭配 urequests 的 HTTP

使用 urequests 庫進行 HTTP 連接要簡單得多。



添加了對重定向(redirects)的支援。


 
 
enlightened注意
HTTPS 有效,但您應該注意 SSL 驗證當前已停止使用了。

urequests 庫提供有限的 JSON 支持。



有關 urequest 的更多訊息,請參閱 庫文檔

enlightened重要
使用 urequests 庫發出請求後,您必須使用 response.close() 關閉返回回應物件。 如果不這樣做,則不會對物件進行垃圾收集,並且如果請求是在循環內發出的,很快就會坍崩。



3.8.3. 確保牢固的連接
這個部分範例說明了使用 urequests 連接到網絡的更健全的方法。



在這裡,我們處理了失去無線網絡的連接,然後將尋求重新連接的可能性。



 3.9. 建立 HTTP 伺服器

您可以構建同步或非同步的 Web 服務器

 
3.9.1. 靜態頁面的簡單伺服器

您可以使用 socket 庫來構建一個簡單的 Web 服務器。



enlightened注意
這個例子是同步的,為了更健全的請求處理,你應該使用服務器來處理非同步請求。



3.9.2. 透過網路伺服器控制 LED 燈

更進一步,我們可以使用一個允許我們控制 LED 的 RESTful Web 服務器。


圖五:樹莓派 Pico W 有 GP15 LED。


將 LED 連接到 GP15,我們可以使用 HTTP GET 打開和關閉 LED。 我們的柳覽器可以透過 http://192.168.1.X/light/on 打開 LED,http://192.168.1.X/light/off 關閉 LED;其中 192.168.1.X 是我們 Pico W的IP 地址,連接網路後會在控制台打印。



運行代碼,我們可以在瀏覽器中看到回應。


圖六:於我們看到的網路瀏覽器中,當連接到我們的 Pico W 網絡服務器



3.9.3. 非同步網路伺服器

我們可以使用 uasyncio 模組來實施相同的服務器,但在這種情況下它將處理 HTTP 非同步請求,而不是攔阻。

 
3.10. Iperf(指令式網路頻寬測試)運作

你可以使用 upip 工具安裝 iperf



並啟動一個 iperf3 客戶端。

enlightened注意
iperf 服務器應該在另一台點腦上運行。






3.11. 該選擇哪種硬體運作?
用 MircoPython 編寫的軟件沒有直接的方法從硬體看出來它是否在 Raspberry Pi Pico 或 Pico W 運行。 但是,您可以通過查看網路功能是否正常來間接判斷是否包含在您的特定 MicroPython 固件中:



或者,您可以檢查 MicroPython 韌體版本,來檢查它是否為 Raspberry Pi Pico 編譯或使用 sys 模組的 Pico W。



因此 if 'Pico W' in sys.implementation._machine 可用於檢測您的韌體是否為 Pico W 編譯。


 
 
附錄 A:從源頭構建 MicroPython

在繼續從源代碼為 Raspberry Pi Pico W 構建 MicroPython UF2 之前,您應該安裝常態依賴項來構建 MicroPython。有關完整詳細訊息,請參閱 Raspberry Pi Pico Python SDK 手冊的第 1.3 節。

之後,您應該複製 micropython micropython-lib 存儲庫。



enlightened注意
將 micropython-lib 與您的 MicroPython checkout 並排放置,將意味著它會自動拉入您的 MicroPython 構建和 micropython-lib 中的庫將被“預添加”到您的 Pico W 設備上默認可用的模組列表中。

然後構建 MicroPython:



如果一切順利,將會有一個名為 build-PICO_W 的新目錄(即相對於頂層 micropython 目錄的 ports/rp2/build-PICO_W),其中包含新的韌體二進製文件。 將 firmware.uf2 拖放到 Raspberry Pi Pico W 處於 BOOTSEL 模式時彈出的 RPI-RP2 驅動器。


 

附錄 B:文檔發布歷史


表格一:文檔發布歷史

最新版本可以在  https://datasheets.raspberrypi.com/picow/connecting-to-the-internet-with-picow.pdf 中找到。




※參考資料:connecting-to-the-internet-with-pico-w
 
logo
iconiconiconiconicon
icon  電話:04-2375-3535
icon  傳真:04-2256-9949
icon  統編:90386785
icon  E-mail:service@oursteam.com.tw
icon  LINE ID:@oursteam
Inspire every child to create