2021年4月29日木曜日

MicroPython ESP32 Memo 〜Run Python Script〜

 ■概要

作成したMicroPythonファームウェアに、Python Scriptファイル(.pyファイル)をダウンロード、実行する。
やる内容は、main.pyファイルを作成し、ボードにダウンロード、main.pyを実行するまで。
main.pyには、LEDを点滅するコードを書く。

シリアルプロンプトによるREPL(Read Evaluate Print Loop)でのプログラム?はいろんなところに載っているので、書かなくてもいいかな。
ただ、作成したPython Script(.pyファイル)を実行するやり方はあんまり書かれてない気がするので、メモに残しておく。

■環境

  • PC : Mac OS Catalina
  • Board : ESP32-WROOM-32D 開発ボード ESP32-DevKitC-32

■前提知識

ESP32は、ESP8266と大体同じ使い方ができるらしいので。。。

デバイスが 1Mbyte 以上のストレージを持っているなら、ファイルシステムを含むように(最初の起動時に)設定されます。このファイルシステムは FAT フォーマットを使用し、MicroPython ファームウェアの後にフラッシュに保存されます。
ESP32にも同じことが言える。
ESP32-WROOM-32D 開発ボード ESP32-DevKitC-32の仕様は以下の通り。
  • Product Description
    • ESP32 general-purpose development board, embeds ESP32- WROOM-32D, 4 MB flash, with pin header
  • Flash Size
    • 4MB
  • Antenna Type
    • Internal PCB on- board antenna
  • Temperature
    • –40 °C ~ +85 °C
  • Dimensions (mm)
    • 54.4×27.9
Flash Sizeは4MBなので、ファイルシステムが構築される。

で、このファイルシステムの中に、実行するPython Script(.pyファイル)をおけば、実行することができる。ただ、どんな名前でも良いわけではない。
MicroPythonは、起動時、最初にboot.pyを実行する。
boot.pyの実行が終了すると、次にmain.pyを実行する。(なければ実行されない)
というようになっているので、boot.py or main.pyを作成すれば、とりあえず動かすことができる。

ただ、デフォルトでは、REPLがされるっぽいので、ソフトリセットをすることで、Python Scriptを実行するモードにしなければならない。

以上を踏まえて、
  • main.pyを作成する。
  • main.pyをボードにダウンロードする。
  • Python Scriptが実行されるモード?にする。
の手順を行えば、作成したPython Scriptが起動後実行されるようになる。

■手順

ボードにLEDと抵抗を配線をする。
以下のように配線する。
  • ESP32ボードの32番ピン - LEDのアノード
  • LEDのカソード - 抵抗 47Ωの片方
  • 抵抗47Ωのもう片方 - ESP32ボードのGNDピン

次に、事前準備として、ampyをインストールしておく。
ampyは、Adafruit社が開発したツールで、シリアル回線経由でPCとボードとの間でファイル転送ができる。(参考 : ampy: MicroPythonマイコンとPCとのファイル転送ツール
  1. ターミナルで、以下のコマンドでampyをインストールする。
    「sudo pip install adafruit-ampy」

次に、Python Scriptファイル main.pyファイルを作成する。
main.pyはこんな感じ。

from machine import Pin
import time

p32 = Pin(32, Pin.OUT)

while True:
    print("LED ON")
    p32.on()                 # set pin to "on" (high) level
    time.sleep(1)
    print("LED OFF")
    p32.off()                # set pin to "off" (low) level
    time.sleep(1)

次に、作成したmain.pyをボードにダウンロードする。
先ほどインストールしたampyを使ってダウンロードする。
こちらのサイト(URL : ampy: MicroPythonマイコンとPCとのファイル転送ツール)を参考にした。
  1. PCとボードをUSBで接続する。
  2. ターミナルでmain.pyを保存した場所に移動する。
    (scriptsフォルダに保存している場合)
    「cd scripts」
  3. 接続されたポートをチェックする
    「ls -l /dev/tty.usb*」
    /dev/tty.usbserial-xxxx (xは数字?)が接続ポート。
  4. ボード(のFlash)に保存されているファイルを表示する。
    「ampy --port=/dev/tty.usbserial-xxxx ls」
    (※ デフォルトでは、boot.py だけが表示された。)
  5. 作成したmain.pyをボードにダウンロード(保存)する。
    「ampy --port=/dev/tty.usbserial-xxxx put main.py」
  6. main.pyがボードに保存されたかどうかを確認する。
    「ampy --port=/dev/tty.usbserial-xxxx ls」
    boot.pyに加えて、main.pyが追加されていれば成功!
ダウンロードしただけでは、ボードはREPLで動いている。
そのため、最後に、ソフトウェアリセットして、REPLで動くモードから、Scriptで動くモードにして、main.pyを実行させる。
LEDがチカチカするはず!
  1. ターミナルでREPLの画面を出す。
    「screen /dev/tty.usbserial-xxxx 115200」( ※ 115200bps )
    (※REPLが動いているので、Enterを押すと「>>>」が表示されるはず。)
  2. ボードをソフトウェアリセットする。
    screenで接続している時に、「Ctrl+D」でソフトウェアリセットできる。
    ソフトウェアリセットされて、REPLでなく、ただのシリアル通信として繋がり、
    「LED ON」「LED OFF」が表示されつづけ、LEDが点滅していれば成功!
ちなみに。。。
ampyでもリセットできるっぽい。
「ampy --port=/dev/tty.usbserial-xxxx reset」
これでも、ソフトウェアリセットがかかって、Scriptが実行されるはず。

終わり!

0 件のコメント:

コメントを投稿