2019/03/09

ESP32上でMicroPythonを使う

 組込み用にMicroPythonを使うので、ESP起動時に自分の書いたpythonスクリプトが走ってほしい。ファイルシステムがどうなっているのか??
os モジュールが提供されているようで、osモジュール内にlistdir関数があるのでそれを実行してみる。。すると、boot.pyなるファイルが存在する。これが多分起動時に呼ばれると思われる。

>>> import os
>>> dir(os)['__class__', '__name__', 'remove', 'VfsFat', 'chdir', 'dupterm', 'dupterm_notify', 'getcwd', 'ilistdir', 'listdir', 'mkdir', 'mount', 'rename', 'rmdir', 'stat', 'statvfs', 'umount', 'uname', 'urandom']
>>> os.listdir()
['boot.py']

boot.pyを読んでみる。catコマンドとかあるのかもしれないが、、調べるのがまどろっこしいので、、ファイルオープンしてreadしてみる。

>>> with open('boot.py') as b:
...     print(b.read())
...
...
...
# This file is executed on every boot (including wake-boot from deepsleep)
#import esp
#esp.osdebug(None)
#import webrepl
#webrepl.start()

webreplが走っている。これはREPLがwebサーバとして提供されているということと思えるが。。シリアルコンソール以外に、web版のREPLも提供しているということか? と思ったら、、落ち着いてよく考えると、#はpythonのコメントなので、boot.pyは実質何もしていないということか。

microbitの場合、microfsというツールが提供されており、microfsツールを使うことでMicroPythonが管理するファイルシステムにプログラム等を転送できるようである。

https://microbit-micropython.readthedocs.io/ja/latest/tutorials/storage.html

で、、main.pyなるファイルを置いておけば、MicroPython起動時にmain.pyが読み込まれて実行されるらしい。micropython  main.py で逆引きしたら、、以下のようにESP8266でもmain.pyを内蔵ファイルシステムに置いておけば走りますということであった。

https://docs.micropython.org/en/latest/esp8266/tutorial/filesystem.html#start-up-scripts

だから、、開発スタイルとしては、、REPLでチビチビテストしながら部品を作って、部品は内蔵ファイルシステムにmoduleとして配置する。自作モジュールが揃ってそれらを組み立ててテストしてOKなら、最後の起動関数をmain.pyに書き込めば、電源ONで希望する動きをするはず。

まずはお決まりのLチカをやってみる。上記スクリプトでIO12のポートがH->Lと変化する。LEDを接続すれば光る。

from machine import Pin

p12 = Pin(12, Pin.OUT)

p12.on()

p12.off()

以下のスクリプトはwhileループでLHLH...を繰り返す。これをオシロで測ればループの速度も分かる。(on/offさせるのがIOレジスタを直接操作しておらずメソッドなのでオーバーヘッドは大きいが)
while True:
    p12.on()
    p12.off()
オシロで計測すると、1サイクル76usecで13.6KHz。マイコンコアの速度が240MHzだったのでスクリプトでの実行という点でオーバーヘッドが大きい。。

直接IOのレジスタを叩く手法

Accessing hardware directly

http://docs.micropython.org/en/latest/reference/speed_python.html#accessing-hardware-directly

No comments:

Post a Comment