MicroPythonについて学びます。
Author: Karl Söderby、Last revision: 2024/02/05
MicroPythonは、人気のPython®プログラミング言語の一実装で、マイクロコントローラーをターゲットとしています(なので"Micro")。
Pythonは世界中で最も人気のある言語のひとつになりました。その最も重要な特徴の一つが学習が容易なことです。テキストベースのコードを全く、若しくは、ほとんど書いたことがないが、大きい成果を上げたい初心者向けにふさわしい言語です。
Nano ESP32/MicroPythonピンアウト
MicroPythonでのピンの使い方は、ボードに記載されているピン番号とはかなり異なります。以下のピンアウトでは、MicroPythonで使うときに使う番号を緑で示しています。
なぜピンに違いがあるのでしょうか? MicroPythonの実装は、ESP32-S3のピン番号に従います。これにより、ESP32-S3を基にした全ての他のボードと互換性を確保しています。
このため、2種類のピンを知る必要があります。
- ボードに記載されているNano ESP32のピン
- コードで使うMicroPythonのピン
MicroPython環境
MicroPythonは、標準のPython APIに加え、ハードウェア固有の一連のモジュールも含まれています。ボードにMicroPythonをインストールしたら、ボードに送信したPythonコマンドは直接実行されます。
これは、ボードに送信する前にコードをコンパイルする、標準のArduino(C++)のプログラミング方法と全く異なります。MicroPythonの方法は、プログラムを即座に変更することができます。
MicroPythonを使うときは、スケッチは書かず、スクリプトを書きます。スクリプトは、MicroPython準拠のエディタを使って書き、ボードに保存できます。スクリプトを送信するには、PCにボードを接続する必要があります。
MicroPythonはファイルシステムを実装しているので、USBドライブにアクセスするのと同じように、ボードにアクセスすることができます。
MicroPythonエディタ
MicroPythonエディタは、ボードと通信するための機能を内蔵した、特別なコードエディタです。
いくつかのエディタが利用できますが、このコースでは、Arduino Lab for MicroPythonを使います。
ボードを接続する
NANO ESP32と対話・プログラムしたいときはいつも、ボードと接続する必要があります。このためには、ボードにMicroPythonがインストールされている必要があります。インストール方法は、MicroPythonインストールガイドを参照してください。
ボードを接続するには、エディタの"Connect"ボタンをクリックします。
スクリプトとは何か?
MicroPythonスクリプトは、ボード上で実行できるコード片です。スクリプトは、もっとも単純な数式、1+1
(2です)や、紅茶を入れるロボットアームを制御するものなどがあります。
MicroPythonエディタでは、実行したいコードを書き、“Run"ボタンをクリックするだけです。
コードに間違いがあれば、エラーが発生します。エラーがなければ、スクリプト内の命令を上から下に実行します。スクリプトを停止するには、“Run"ボタンの右にある"Stop"ボタンをクリックします。
ループ
Arduinoの経験が十分あれば、ループの概念になれていると思います。わからなければ、こちらを参照してください。ループは、MicroPythonでは必須ではありません。一度だけ実行するプログラムも、無限ループするプログラムも書くことができます。
継続してプログラムをループさせるには、スクリプト内でwhileループを使う必要があります。
while(True):
# code placed here will execute over and over again
# in a similar fashion to the void loop() function
MainとBootファイル
MicroPython環境で考慮する必要のある重要なファイルが2つあります。
boot.py
: ボードが開始したときに実行されるスクリプト(言い換えればブート)main.py
:boot.py
のすぐ後に実行されるスクリプト
ボードがブートした直後はいつも実行されるので、main.py
をメインスクリプトと考えることができます。MicroPythonエディタ内では、ファイルを開いて直接編集することができます。保存すると、ボードに保存され、命令が更新されます。ファイルにアクセスするには、“Files"ボタンをクリックします。
Arduino IDE/C++でArduinoボードのプログラムになれていれば、少し異なる手法です。Arduino IDEの場合は、変更するたびに、コンパイルしてアップロードする必要があるからです。
ファイルを保存する
MicroPythonにはファイルシステムがあるので、コードをボードに直接保存することができます。ファイルを自由に編集できますが、自動保存されません。“Save"ボタンをクリックすると、そのファイルに以前保存されていたすべてを上書きします。
例えば、main.py
を保存すると、ボードを切断し、別の日に利用することができ、そのファイルは同じ場所にあります。PCのファイルと同じように動作します。
REPL
REPLは、端末とも呼ばれる、エディタ内のコマンドラインインターフェイスです。命令やメッセージを入力すると、Arduinoのインタープリタが評価し、結果を返します。
REPL/端末は、右上の"Terminal"ボタンをクリックすると利用できます。
例えば1+1
と書くと、REPLは、2
を返します。この計算はArduinoで実行され、結果が返されます。
スクリプトを実行するときに、またこのトピックに戻ってくるので心配しないでください。REPLでは、print()
関数を使い、さまざまなものを表示することができます。ボードで何が起こっているのかを知るための素晴らしい手段です。例えば、以下のように書くことができます。
print(1+1)
print("Computation performed, yay!")
モジュール
MicroPythonを進めていくと、モジュールという重要な用語がでてきます。
モジュールはスクリプトに取り込むことができるコードファイルで、追加機能を提供します。例えば、time
モジュールは、どのような間隔で実行するかを制御したり、machine
モジュールは、ハードウェア固有機能を提供したりします。モジュールを使うには、以下のように、import
するだけです。
# import the "time" module
import time
# import the "pin" function from the "machine" module
from machine import Pin
モジュールをインポートすると、以下のように、スクリプト内で使うことができます。
import time
# freeze the program for one second
time.sleep(1)
外部モジュール
全てのモジュールがMicroPythonに内蔵されているわけではありません。限られたメモリ量しかないためです。
例えば、特定のセンサー用のモジュールを使うには、外部のモジュールをインストールする必要があります。外部モジュールのインストール方法はいくつかありますが、以下では安全で明快な手段を説明します。
外部モジュールをインストールする
外部モジュールをインストールするために、mip
と呼ばれるパッケージマネージャーを使います。ボードをWi-Fi®に接続しモジュールをボードに直接ダウンロードすることで、モジュールをインストールします。外部モジュールのインストールは、以下の2ステップで行います。
- Wi-Fi接続を確立する
mip
を使い、指定したURLからモジュールをダウンロードする
Wi-Fiに接続するには、以下のスクリプトをboot.py
ファイルにアップロードします。ブート直後に、ボードを確実にインターネットに接続するために、boot.py
を選びました。
Wi-Fiに接続
WIFI_NETWORK
とWIFI_PASSWORD
は、各自のWi-Fiネットワークとパスワードに置き換える必要があります。"""
This script connects to Wi-Fi
"""
import network
WIFI_NETWORK='YOUR_NETWORK_NAME'
WIFI_PASSWORD='YOUR_NETWORK_PASSWORD'
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_NETWORK, WIFI_PASSWORD)
print()
print("Connected to ",WIFI_NETWORK)
“run"をクリックすると、Connected to <your Wi-Fi>
が、REPLに表示されます。
外部モジュールをインストールする
次に、指定したURLから外部モジュールをインストールするスクリプトを実行します。以下のスクリプトをmain.py
にアップロードします。
'''
This script installs external modules using mip
'''
import mip
mip.install("https://raw.githubusercontent.com/tinypico/tinypico-micropython/master/lis3dh%20library/lis3dh.py")
“run"をクリックすると、以下が、REPLに表示されます。
この場合、GitHub(raw file)に格納されているファイルのURLを指定しています。スクリプトは、lis3dh
モジュールをインストールします。これは、このコースで後から使います。
Files
をクリックし、lib
フォルダを確認することで、モジュールが正しくインストールされたかを確認することができます。フォルダ内に、lis3dh.py
というファイルがあります。
このコースの後半で、外部モジュールのインストールを求められたら、指定されたスクリプトをmain.py
にペーストし、“Run"をクリックしてください。
モジュールを削除する
モジュールをアンインストールしたければ、“Files"タブを使い、エディタ内でファイルを削除できます。多くのモジュールをインストールして、メモリ領域が不足したときに削除してください。
削除したいファイルを選択し、“Delete"アイコンをクリックしてください。ファイルを削除するか確認されます。
トラブルシューティング
- Invalid URL: 誤ったURLを指定した場合は、以下のようなエラーが表示されます。
Package not found: https://micropython.org/pi/v2/package/6/<url>/latest.json
これが起きたときは、URLが正しいか確認してください。
- OSError: -202: インストールスクリプトを実行中に以下のエラーがおこる場合があります。
Traceback (most recent call last):
File "<stdin>", line 24, in <module>
File "mip/__init__.py", line 1, in install
File "mip/__init__.py", line 1, in _install_package
File "mip/__init__.py", line 1, in _install_json
File "urequests.py", line 180, in get
File "urequests.py", line 76, in request
OSError: -202
確認項目は、
- ネットワークパスワードを正しく入力したか
- すでにWi-Fiに接続していないか
エラーが継続する場合は、“Reset"ボタンをクリックして、ボードをソフトリセットし、スクリプトを再実行します。
まとめ
この章では、MicroPythonの主要なコンポーネントについて少し学びました。
次の章: Python集中コース
オリジナルのページ
https://docs.arduino.cc/micropython/micropython-course/course/introduction-python/
最終更新日
April 14, 2024