最近因為買了兩本 MicroPython 的書, 掀起了內心冷卻已久的 maker 熱, 也想起了我之前買的三片 Pico, 上回焊好針腳後就丟一邊, 這回打鐵趁熱把 MicroPython 灌進去吧! 以下測試除了參考官網資料外, 主要是按照神人筆記 "天花板隨記" 部落格的說明.
本系列前面的相關文章參考 :
將 MicroPython 韌體燒錄到 Pico 的方式有兩種 :
- 使用 UF2 檔安裝 :
須先下載 MicroPython 的 UF2 檔, 放入 RPI-RP2 虛擬磁碟機即完成燒錄. - 使用 Thonny 安裝 :
利用 Thonny 直譯器選單裡的安裝與更新功能進行燒錄.
參考 Raspberry Pi Pico 的說明文件 :
1. 上傳 UF2 檔燒錄 MicroPython 韌體 :
UF2 是微軟所制訂的一種二進制檔案格式, 可用來為 Flash 記憶體進行快速燒錄, 參考 :
# UF2文件格式
首先到 MicroPython 官網下載 Pico 的 UF2 檔 :
點選 Releases 下最近的穩定版本, 不要下載 Nightly Builds 下的最新版 :
然後按住 Pico 上的 BOOTSEL 鈕不放, 將 Pico 連接到 PC 的 USB 槽後再放開 :
不用管這兩個檔案, 直接將所下載的 MicroPython UF2 檔案複製到此 RPI-RP2 磁碟機即可, 貼上 UF2 就會馬上進行燒錄, 很快就完成了, 這時 Pico 板會重啟, RPI-RP2 磁碟機會會被卸除, 這時開啟裝置管理員可知 Pico 已連接到 COM 埠 :
Pico 板載的 LED 接在 GPIO25, 下面就用迴圈來測試 LED 閃爍 :
MicroPython v1.17 on 2021-09-02; Raspberry Pi Pico with RP2040
Type "help()" for more information.
>>> from machine import Pin
>>> import time
>>> LED=Pin(25, Pin.OUT)
>>> while True:
... LED.value(0)
... time.sleep(1)
... LED.value(1)
... time.sleep(0.5)
...
...
由於 Pico 沒有 Reset 按鈕, 終止此無限迴圈的辦法是關掉 Putty, 移除 USB 接線接回後再重新連線. 或是把 RUN 接腳 (Pin 30) 接地亦可, 參考 :
Source : Adafruit
也可以使用 Thonny 編輯器的 Shell 介面來執行 MicroPython 程式, 點選 "執行/選擇直譯器" :
切到 "直譯器" 頁籤, 上面選擇 "MicroPython (Raspberry Pi Pico)", 底下選擇所連接的 COM 埠或 "自動偵測連接埠", 確認後底下應該會出現 MicroPython 命令列 :
輸入如下指令 :
MicroPython v1.17 on 2021-09-02; Raspberry Pi Pico with RP2040
Type "help()" for more information.
>>> from machine import Pin
>>> import time
>>> LED=Pin(25, Pin.OUT)
>>> while True:
LED.toggle()
time.sleep(1)
就可以看到板載 LED 閃爍了 :
此處改用 Pin 物件的 toggle() 方法來使 LED 狀態 High/Low 切換, 雖然指令較精簡, 但缺點是 ON/OFF 時間相同, 無法個別調整.
2. 使用 Thonny 燒錄 MicroPython 韌體 :
Python 專用編輯器 Thonny 也可以直接燒錄 MicroPython 韌體 (須網路保持連線, 因 Thonny 要從官網下載 UF2 韌體檔), 以下就用 Thonny 來燒錄另外兩片空白的 Pico 吧!
首先開啟 Thonny, 按住 Pico 的 BOOTSEL 鈕不放, 將 Pico 用 USB 連接 PC 後再放開 BOOTSEL 鈕, 跟上面一樣檔案總管會出現名稱為 RPI-RP2 的磁碟機, 但不用管它, 接下來點選 Thonny 的 "執行/選擇直譯器" :
上面的選單選擇 "MicroPython (Raspberry Pi Pico)" :
下面選擇 "自動偵測連接埠", 然後按右下角的 "" :
這時 Thonny 會自動找尋最新的 MicroPython 版本, 但在跳出的視窗中按 "安裝" 卻出現 "certificate verify failed: certificate has expired (_ssl.c:1091)" 的錯誤訊息 :
完整的錯誤訊息如下 :
Downloading 563200 bytes from https://micropython.org/resources/firmware/rp2-pico-20210902-v1.17.uf2
Traceback (most recent call last):
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\urllib\request.py", line 1350, in do_open
encode_chunked=req.has_header('Transfer-encoding'))
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\http\client.py", line 1277, in request
self._send_request(method, url, body, headers, encode_chunked)
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\http\client.py", line 1323, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\http\client.py", line 1272, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\http\client.py", line 1032, in _send_output
self.send(msg)
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\http\client.py", line 972, in send
self.connect()
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\http\client.py", line 1447, in connect
server_hostname=server_hostname)
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\ssl.py", line 423, in wrap_socket
session=session
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\ssl.py", line 870, in _create
self.do_handshake()
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\ssl.py", line 1139, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1091)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\site-packages\thonny\plugins\micropython\uf2dialog.py", line 271, in _perform_work
self._download_to_the_device(download_url, size, target_dir)
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\site-packages\thonny\plugins\micropython\uf2dialog.py", line 333, in _download_to_the_device
with urlopen(req, timeout=5) as fsrc:
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\urllib\request.py", line 222, in urlopen
return opener.open(url, data, timeout)
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\urllib\request.py", line 525, in open
response = self._open(req, data)
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\urllib\request.py", line 543, in _open
'_open', req)
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\urllib\request.py", line 503, in _call_chain
result = func(*args)
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\urllib\request.py", line 1393, in https_open
context=self._context, check_hostname=self._check_hostname)
File "C:\Users\User\AppData\Local\Programs\Thonny\lib\urllib\request.py", line 1352, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1091)>
看起來是 SSL 認證問題, 我檢查目前使用的 Thonny 版本是 3.3.10 :
但官網已到 3.3.13 版, 我以為是版本太舊的關係, 就先移除 Thonny, 然後下載最新的 3.3.13 來安裝, 但結果還是一樣, 所以跟 Thonny 版本無關. 後來找到下面文章才找到解決辦法 :
原來只要去下載安裝 lets-encrypt-r3.der 憑證即可 :
點擊下載的憑證檔按確定與下一步即可完成安裝 :
然後回到 Thonny 再次安裝韌體即可順利進行了 :
OK! 完成了.
沒有留言 :
張貼留言