ESP32-MicroPython 開發環境

orangeQWJ發表於2023-10-13

Linux/Mac 下使用MicroPython開發ESP32

刷入韌體

使用 esptool.py 將 MicroPython 刷入 ESP32 開發板涉及幾個步驟。

1. 安裝 esptool

如果你還沒有安裝 esptool.py,你可以使用 pip 來安裝它:

pip install esptool

2. 下載 MicroPython 韌體

MicroPython - Python for microcontrollers

前往 MicroPython 的官方網站,找到 ESP32 的韌體,然後下載合適的 .bin 檔案。確保選擇與你的 ESP32 開發板相容的版本。

3. 連線你的 ESP32

使用適當的 USB 資料線將 ESP32 開發板連線到你的計算機。

4. 查詢 ESP32 的串列埠

在終端或命令提示符中,使用以下命令查詢 ESP32 的串列埠:

ls /dev/tty.*

記下 ESP32 的串列埠名,例如 /dev/ttyUSB0

5. 擦除現有韌體

為了確保 MicroPython 正確地安裝在 ESP32 上,首先擦除開發板上的現有韌體:

esptool.py --port <YOUR_PORT> erase_flash

<YOUR_PORT> 替換為你在第4步中找到的串列埠名。

6. 刷入 MicroPython 韌體

使用以下命令將 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 檔案的路徑。

7. 重啟 ESP32

完成刷入操作後,斷開並重新連線 ESP32 的電源,或使用開發板上的復位按鈕進行復位。

現在,ESP32 上應該已經執行了 MicroPython,你可以使用串列埠工具screen連線到 ESP32,並開始執行 MicroPython 命令。

上傳MicroPython指令碼

將寫好的 Python 程式刷入 ESP32 來執行並不是直接將 Python 程式碼燒寫到 ESP32 的 flash 中的常規做法。相反,你首先將 MicroPython 燒寫到 ESP32,然後將你的 Python 指令碼上傳到 ESP32 上的檔案系統,並在那裡執行它。以下是如何做到這一點的步驟:

1. 安裝 ampy

ampy 是 Adafruit 提供的一個工具,用於在與 MicroPython 相容的裝置上管理檔案。你可以使用 pip 安裝它:

pip install adafruit-ampy

2. 上傳你的 Python 指令碼

使用 ampy 將你的 Python 指令碼放入 ESP32 的檔案系統中。例如,假設你的指令碼名為 main.py

ampy --port <YOUR_PORT> put main.py

<YOUR_PORT> 替換為 ESP32 的串列埠名(如 /dev/ttyUSB0 )。

3. 執行你的指令碼

連線到 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 的提示符 >>>。要執行你剛剛上傳的指令碼,只需輸入:

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管理檔案系統中的檔案

ampy 是由 Adafruit 開發的一個工具,用於在與 MicroPython 相容的板上管理檔案。下面是如何使用 ampy 進行檔案管理的常見命令:

1. 列出板上的所有檔案

要列出板上的所有檔案,你可以使用 ls 命令:

ampy --port <YOUR_PORT> ls

2. 上傳檔案到板上

要將檔案上傳到板上,使用 put 命令:

ampy --port <YOUR_PORT> put <LOCAL_FILE>

例如,要上傳名為 main.py 的檔案,使用:

ampy --port <YOUR_PORT> put main.py

3. 從板上讀取檔案

要從板上讀取檔案並將其內容列印到終端,使用 get 命令:

ampy --port <YOUR_PORT> get <REMOTE_FILE>

如果你還想將其儲存到本地檔案,可以:

ampy --port <YOUR_PORT> get <REMOTE_FILE> <LOCAL_FILE>

4. 刪除板上的檔案

要刪除板上的檔案,使用 rm 命令:

ampy --port <YOUR_PORT> rm <REMOTE_FILE>

5. 建立目錄

要在板上建立目錄,使用 mkdir 命令:

ampy --port <YOUR_PORT> mkdir <DIRECTORY_NAME>

6. 執行指令碼並檢視輸出

你可以使用 run 命令來執行板上的 MicroPython 指令碼並看到其輸出:

ampy --port <YOUR_PORT> run <SCRIPT_NAME>

注意事項

  • 在使用 ampy 之前,確保已經斷開了其他對板子的連線(例如 screen,),否則 ampy 可能無法與板子通訊。

  • <YOUR_PORT> 是你的裝置連線的串列埠。例如 /dev/ttyUSB0

ampy 為管理 MicroPython 板上的檔案提供了簡單而直接的方法。如果你經常使用相同的串列埠,你也可以考慮在 .bashrc.bash_profile 中設定 AMPY_PORT 環境變數,這樣你就不必每次都指定 --port 引數了。

特殊檔案 boot.py main.py

在 ESP32 上執行 MicroPython 時,boot.pymain.py 是兩個特殊的檔案,它們在啟動過程中自動執行。它們之間的主要關係和區別如下:

1. 執行順序:

  • boot.py: 當 ESP32 上的 MicroPython 被啟動時,首先執行的是 boot.py。它的主要目的是進行初始化操作,例如設定無線網路連線、配置一些硬體引數或其他任何需要在程式執行之前進行的設定。

  • main.py: 在 boot.py 執行完畢後,main.py 將被執行。這是你的主應用程式或指令碼,通常用於執行你的專案的主要功能或程式碼。

2. 用途:

  • boot.py: 由於它是首先執行的,boot.py 主要用於設定那些只需要配置一次的東西,如 Wi-Fi 設定或其他系統級初始化。在某些情況下,為了安全起見,你可能想在這裡設定異常處理,以確保無論 main.py 中發生什麼,都不會影響到系統的正常啟動。

  • main.py: 這是你的主程式程式碼,可能包括處理迴圈、事件響應或任何你的專案需要的功能。

相關文章