MicroPythonにはESP8266などのマイコン版の他にLinux版が存在する。これをPCにインストールすると、MicroPythonのコードをESP8266などマイコンの実機ではなくPC上で直接動かすことが出来るうえに、upipでMicroPythonモジュールのインストールが簡単に出来、CPython(標準コマンドのPython)と同じような感覚で使えるようになる。
このMicroPython Linux版をUbuntu18.04にインストールしたので、メモ。
MicroPython Linux版のビルド
必要パッケージのインストール。
$ sudo apt install build-essential libreadline-dev libffi-dev git pkg-config gcc-arm-none-eabi libnewlib-arm-none-eabi
適当な作業ディレクトリに移動してMicroPythonのソースコードをgit cloneする。
$ git clone --recurse-submodules https://github.com/micropython/micropython.git
mpy-crossディレクトリに移動してmake。
$ cd micropython/mpy-cross/
$ make
ディレクトリを移動してLinux用バイナリのビルド&インストール。
$ cd ../ports/unix/
$ make axtls
$ sudo make install
デフォルトでは/usr/local/binにインストールされるので、pathを通しておく。
MicroPython Linux版の使い方
コマンドラインからインタープリタを起動、使ってみる。
$ micropython
MicroPython v1.12-33-g007a704d8 on 2019-12-28; linux version
Use Ctrl-D to exit, Ctrl-E for paste mode
>>> print('Hello world!')
Hello world!
>>>
以下のようなプログラムを作成して、
hello.py
def hello():
print('Hello world from Function!')
if __name__ == "__main__":
hello()
プログラムをコマンドライン引数に指定すれば実行される。
$ micropython hello.py
Hello world from Function!
プログラムの先頭に#!/usr/local/bin/micropythonを記述し、ファイルに実行属性を付けておけばスクリプトとして動作させることも出来る。
upipを用いたモジュールのインストール
micropython -m upip –helpを実行すると、ヘルプメッセージを表示出来る。
例えば、コマンドラインで以下を実行すると、pystoneモジュールをインストール出来る。
$ micropython -m upip install micropython-pystone
MicroPythonのインタープリタからpystoneを実行。
>>> import pystone
>>> pystone.main()
Pystone(1.2) time for 50000 passes = 0.723
This machine benchmarks at 69156.3 pystones/second
>>>
ライブラリの実体は~/.micropython/libにインストールされている。
MicroPythonで実行されているかプログラム中で知る方法
プログラムがMicroPythonで実行されているかどうかをプログラムの中で識別するには、sys.implementation.nameに’micropython’がセットされているかどうかを調べれば良い。
以下のように動作環境に応じてインポートするライブラリを切り替えればCPythonとソースコードを共通化出来る。
import sys
if sys.implementation.name == 'micropython':
import (MicroPython用ライブラリ)
else:
import (CPython用ライブラリ)
(以下、共通のコード)
まとめ
GPIOの操作などハードウエアがらみの部分は当然PCでは動かすことが出来ないが、それ以外の部分のソースコードを分離してデバッグするようにすれば、マイコンにプログラムを転送する手間が省けるのでプログラミングが非常に捗る。sys.implementation.nameのチェックでコードを切り替えればCPythonとソースファイルを共通化出来るので、Pythonコードのデバッグにデバッガ(pdb)を使いたい時などは非常に便利。
コメント