why witout Thonny?
最近閒來在ESP32上用MicroPython搗鼓些小玩具,見很多教學推薦使用Thonny。欣然往之,竟是個這,實在不能認同。Thonny esp32-MicroPython開發的入門最佳實踐?no!
使用 esptool.py
將 MicroPython 刷入 ESP32 開發板涉及幾個步驟。
如果你還沒有安裝 esptool.py
,你可以使用 pip
來安裝它:
pip install esptool
MicroPython - Python for microcontrollers
前往 MicroPython 的官方網站,找到 ESP32 的韌體,然後下載合適的 .bin
檔案。確保選擇與你的 ESP32 開發板相容的版本。
使用適當的 USB 傳輸線將 ESP32 開發板連線到你的計算機。
在終端或命令提示字元中,使用以下命令查詢 ESP32 的串列埠:
ls /dev/tty.*
記下 ESP32 的串列埠名,例如 /dev/ttyUSB0
為了確保 MicroPython 正確地安裝在 ESP32 上,首先擦除開發板上的現有韌體:
esptool.py --port <YOUR_PORT> erase_flash
將 <YOUR_PORT>
替換為你在第4步中找到的串列埠名。
使用以下命令將 MicroPython 韌體刷入 ESP32:
esptool.py --chip esp32 --port <YOUR_PORT> write_flash -z 0x1000 <PATH_TO_YOUR_MICROPYTHON_BIN_FILE>
替換 <YOUR_PORT>
為你的串列埠名,並將 <PATH_TO_YOUR_MICROPYTHON_BIN_FILE>
替換為你下載的 .bin
檔案的路徑。
完成刷入操作後,斷開並重新連線 ESP32 的電源,或使用開發板上的復位按鈕進行復位。
現在,ESP32 上應該已經執行了 MicroPython,你可以使用串列埠工具screen
連線到 ESP32,並開始執行 MicroPython 命令。
將寫好的 Python 程式刷入 ESP32 來執行並不是直接將 Python 程式碼燒寫到 ESP32 的 flash 中的常規做法。相反,你首先將 MicroPython 燒寫到 ESP32,然後將你的 Python 指令碼上傳到 ESP32 上的檔案系統,並在那裡執行它。以下是如何做到這一點的步驟:
ampy
ampy
是 Adafruit 提供的一個工具,用於在與 MicroPython 相容的裝置上管理檔案。你可以使用 pip
安裝它:
pip install adafruit-ampy
使用 ampy
將你的 Python 指令碼放入 ESP32 的檔案系統中。例如,假設你的指令碼名為 main.py
:
ampy --port <YOUR_PORT> put main.py
將 <YOUR_PORT>
替換為 ESP32 的串列埠名(如 /dev/ttyUSB0
)。
連線到 ESP32 的 REPL(Read-Evaluate-Print Loop):
在 Linux 或 macOS 上,你可以使用 screen
:
screen <YOUR_PORT> 115200
- `screen`基本使用
當你使用 `screen` 連線到一個串列埠或其他裝置後,你可以按照以下步驟斷開連線:
1. 按 `Ctrl` + `A` 鍵。這是 `screen` 的命令鍵。
2. 緊接著按 `k` 鍵。這將會提示你是否確定要殺死這個 `screen` 對談。
3. 最後,按 `y` 鍵確認。
這樣就會結束 `screen` 對談並斷開連線。
另外,你也可以按 `Ctrl` + `A` 然後按 `d` 鍵來"分離"一個 `screen` 對談,這樣你可以在後臺保留對談並返回到終端。要重新連線到這個對談,可以使用 `screen -r` 命令。
一旦連線,你應該能夠看到 MicroPython 的提示符 `>>>`。要執行你剛剛上傳的指令碼,只需輸入:
```Python
import main
注意:如果你的指令碼名為 main.py
,ESP32 會在啟動時自動執行它。如果你想要在裝置啟動時自動執行其他名稱的指令碼,你需要重新命名該指令碼為 main.py
。
範例 main.py 使板子自帶的燈呼吸閃爍
from machine import Pin, PWM
import time
# 使用 ESP32 的板載 LED。大多數 ESP32 開發板的板載 LED 連線到 GPIO2。
LED_PIN = 2
# 建立一個 PWM 物件
led = PWM(Pin(LED_PIN), freq=1000)
def breathe():
while True:
# 逐漸增加亮度
for duty in range(0, 1024, 10):
led.duty(duty)
time.sleep(0.05)
# 逐漸減少亮度
for duty in range(1023, -1, -10):
led.duty(duty)
time.sleep(0.05)
breathe()
使用ampy管理檔案系統中的檔案
ampy
是由 Adafruit 開發的一個工具,用於在與 MicroPython 相容的板上管理檔案。下面是如何使用 ampy
進行檔案管理的常見命令:
要列出板上的所有檔案,你可以使用 ls
命令:
ampy --port <YOUR_PORT> ls
要將檔案上傳到板上,使用 put
命令:
ampy --port <YOUR_PORT> put <LOCAL_FILE>
例如,要上傳名為 main.py
的檔案,使用:
ampy --port <YOUR_PORT> put main.py
要從板上讀取檔案並將其內容列印到終端,使用 get
命令:
ampy --port <YOUR_PORT> get <REMOTE_FILE>
如果你還想將其儲存到本地檔案,可以:
ampy --port <YOUR_PORT> get <REMOTE_FILE> <LOCAL_FILE>
要刪除板上的檔案,使用 rm
命令:
ampy --port <YOUR_PORT> rm <REMOTE_FILE>
要在板上建立目錄,使用 mkdir
命令:
ampy --port <YOUR_PORT> mkdir <DIRECTORY_NAME>
你可以使用 run
命令來執行板上的 MicroPython 指令碼並看到其輸出:
ampy --port <YOUR_PORT> run <SCRIPT_NAME>
在使用 ampy
之前,確保已經斷開了其他對板子的連線(例如 screen
, picocom
, 等),否則 ampy
可能無法與板子通訊。
<YOUR_PORT>
是你的裝置連線的串列埠。例如 /dev/ttyUSB0
或 COM3
。
ampy
為管理 MicroPython 板上的檔案提供了簡單而直接的方法。如果你經常使用相同的串列埠,你也可以考慮在 .bashrc
或 .bash_profile
中設定 AMPY_PORT
環境變數,這樣你就不必每次都指定 --port
引數了。
在 ESP32 上執行 MicroPython 時,boot.py
和 main.py
是兩個特殊的檔案,它們在啟動過程中自動執行。它們之間的主要關係和區別如下:
boot.py: 當 ESP32 上的 MicroPython 被啟動時,首先執行的是 boot.py
。它的主要目的是進行初始化操作,例如設定無線網路連線、設定一些硬體引數或其他任何需要在程式執行之前進行的設定。
main.py: 在 boot.py
執行完畢後,main.py
將被執行。這是你的主應用程式或指令碼,通常用於執行你的專案的主要功能或程式碼。
boot.py: 由於它是首先執行的,boot.py
主要用於設定那些只需要設定一次的東西,如 Wi-Fi 設定或其他系統級初始化。在某些情況下,為了安全起見,你可能想在這裡設定例外處理,以確保無論 main.py
中發生什麼,都不會影響到系統的正常啟動。
main.py: 這是你的主程式程式碼,可能包括處理迴圈、事件響應或任何你的專案需要的功能。
通過screen
互動,通過ampy
管理檔案系統。enjoy it