iT邦幫忙

2024 iThome 鐵人賽

DAY 11
1
Python

使用 WiFiBoy Python 玩學機來學物聯網應用 系列 第 11

11. 玩學機開機第一件事會做什麼?

  • 分享至 

  • xImage
  •  

MicroPyhon 開機自動執行的程式

MicroPython 開機過程:

  1. 硬體初始化:

當 MicroPython 啟動時,首先會進行硬體初始化。包括啟動 CPU、初始化記憶體、設置內部時鐘頻率等基本操作。

  1. 執行引導程式 (Bootloader):

部分 MicroPython 硬體平台(如 ESP32)有一個引導程式,它負責選擇將要啟動的韌體或進行系統更新。如果存在多個韌體,Bootloader 會選擇其中一個來加載。

  1. 韌體加載與執行:

在硬體初始化和引導程式完成後,MicroPython 的核心韌體會被載入到記憶體中,並開始執行。這韌體包括了 Python 直譯器、標準函式庫、以及其它底層支援程式。

  1. 初始化系統模組:

當韌體開始執行後,系統會初始化一些關鍵模組,如文件系統、定時器、串口通信模組等。這些模組在後續的 Python 腳本中會被使用。

  1. 執行 boot.py:

如果文件系統中存在 boot.py 腳本,系統會自動執行它。這個腳本通常用來進行一些初步的系統設置。

  • 系統初始化設定: 例如設定 Pin 腳、電源管理、設定系統時間。
  • 網路連線設定: 設定 WiFi、藍芽等通訊連線,設定固定 IP 等。
  • 通訊介面硬體啟動: 設定 I2C、SPI、UART 等。
  • 設定記錄檔(LOG): 設定除錯訊息的輸出方式。

例如我們會在 boot.py 中設定無線網路連線的設定:

import network

def connect_to_wifi(ssid, password):
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('Connecting to network...')
        wlan.connect(ssid, password)
        while not wlan.isconnected():
            pass
    print('Network config:', wlan.ifconfig())

connect_to_wifi('your_SSID', 'your_PASSWORD')
  1. 執行 main.py:

boot.py 執行完成後,如果文件系統中存在 main.py,MicroPython 會自動執行它。這是使用者定義的主程序,用來執行應用邏輯。如果沒有 main.py,系統會進入 REPL(Read-Eval-Print Loop),等待用戶輸入命令。

  1. 進入 REPL:

如果 main.py 結束執行,或在啟動過程中未找到 main.py,系統會進入 REPL 模式。這是一個交互式的 Python 解釋器,用戶可以在其中輸入和執行 Python 代碼。

總結:

boot.py 設定影響整個系統地執行環境而 main.py 設定個別設備功能,讓使用者可自行定義。但要小心的事情是,如果這兩個程式編寫錯誤,就可能會造成系統無法連接與使用。

如何救回你的玩學機的 MicroPython 系統

當你因為 boot.py 或 main.py 程式設定錯誤,造成電腦主機無法透過通訊界面連接玩學機,你有幾個方法可以救回它:

  1. 手動刪除 boot.py 和 main.py:
  • 如果可以進入 REPL,可以使用以下命令手動刪除或重新命名這些文件:
import os
os.remove('boot.py')  # 刪除 boot.py
os.remove('main.py')  # 刪除 main.py

這樣做可以避免錯誤的腳本在下次重啟時再次執行,從而恢復對系統的控制。

  1. 重新燒錄韌體:

如果無法進入安全模式或手動刪除文件,你可以嘗試重新燒錄 MicroPython 韌體。這樣做會覆蓋現有的檔案系統,進而刪除 boot.py 和 main.py。

參考資料

  1. MicroPython reset and boot modes

上一篇
10. 遊戲製作實例 Simon Says
下一篇
12. LED 燈環擴充模組應用
系列文
使用 WiFiBoy Python 玩學機來學物聯網應用 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言