■概要
作成した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が実行されるモード?にする。
■手順
ボードにLEDと抵抗を配線をする。
以下のように配線する。
- ESP32ボードの32番ピン - LEDのアノード
- LEDのカソード - 抵抗 47Ωの片方
- 抵抗47Ωのもう片方 - ESP32ボードのGNDピン
次に、事前準備として、ampyをインストールしておく。
ampyは、Adafruit社が開発したツールで、シリアル回線経由でPCとボードとの間でファイル転送ができる。(参考 : ampy: MicroPythonマイコンとPCとのファイル転送ツール)
- ターミナルで、以下のコマンドで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とのファイル転送ツール)を参考にした。
先ほどインストールしたampyを使ってダウンロードする。
こちらのサイト(URL : ampy: MicroPythonマイコンとPCとのファイル転送ツール)を参考にした。
- PCとボードをUSBで接続する。
- ターミナルでmain.pyを保存した場所に移動する。
(scriptsフォルダに保存している場合)
「cd scripts」 - 接続されたポートをチェックする
「ls -l /dev/tty.usb*」
/dev/tty.usbserial-xxxx (xは数字?)が接続ポート。 - ボード(のFlash)に保存されているファイルを表示する。
「ampy --port=/dev/tty.usbserial-xxxx ls」
(※ デフォルトでは、boot.py だけが表示された。) - 作成したmain.pyをボードにダウンロード(保存)する。
「ampy --port=/dev/tty.usbserial-xxxx put main.py」 - main.pyがボードに保存されたかどうかを確認する。
「ampy --port=/dev/tty.usbserial-xxxx ls」
boot.pyに加えて、main.pyが追加されていれば成功!
ダウンロードしただけでは、ボードはREPLで動いている。
そのため、最後に、ソフトウェアリセットして、REPLで動くモードから、Scriptで動くモードにして、main.pyを実行させる。
LEDがチカチカするはず!
- ターミナルでREPLの画面を出す。
「screen /dev/tty.usbserial-xxxx 115200」( ※ 115200bps )
(※REPLが動いているので、Enterを押すと「>>>」が表示されるはず。) - ボードをソフトウェアリセットする。
screenで接続している時に、「Ctrl+D」でソフトウェアリセットできる。
ソフトウェアリセットされて、REPLでなく、ただのシリアル通信として繋がり、
「LED ON」「LED OFF」が表示されつづけ、LEDが点滅していれば成功!
ちなみに。。。
ampyでもリセットできるっぽい。
「ampy --port=/dev/tty.usbserial-xxxx reset」
これでも、ソフトウェアリセットがかかって、Scriptが実行されるはず。
終わり!
0 件のコメント:
コメントを投稿