MicroPythonの紹介

MicroPythonについて学びます。


Author: Karl Söderby、Last revision: 2024/02/05


MicroPythonは、人気のPython®プログラミング言語の一実装で、マイクロコントローラーをターゲットとしています(なので"Micro")。

Pythonは世界中で最も人気のある言語のひとつになりました。その最も重要な特徴の一つが学習が容易なことです。テキストベースのコードを全く、若しくは、ほとんど書いたことがないが、大きい成果を上げたい初心者向けにふさわしい言語です。

Nano ESP32/MicroPythonピンアウト

MicroPythonでのピンの使い方は、ボードに記載されているピン番号とはかなり異なります。以下のピンアウトでは、MicroPythonで使うときに使う番号を緑で示しています。

Arduino Nano ESP32でのMicroPythonピンアウト

Arduino Nano ESP32での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を使います。

labsエディタのスクリーンショット

labsエディタのスクリーンショット

i
次の章は、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のファイルと同じように動作します。

i
"Save"には注意してください。上書きしたら元に戻す手段はありません。

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ステップで行います。

  1. Wi-Fi接続を確立する
  2. mipを使い、指定したURLからモジュールをダウンロードする

Wi-Fiに接続するには、以下のスクリプトをboot.pyファイルにアップロードします。ブート直後に、ボードを確実にインターネットに接続するために、boot.pyを選びました。

Wi-Fiに接続

boot.py内のWi-Fiスクリプト

boot.py内のWi-Fiスクリプト

i
WIFI_NETWORKWIFI_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にアップロードします。

main.py内のモジュールインストールスクリプト

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"アイコンをクリックしてください。ファイルを削除するか確認されます。

ファイル・モジュールの削除

ファイル・モジュールの削除

トラブルシューティング

  1. Invalid URL: 誤ったURLを指定した場合は、以下のようなエラーが表示されます。
Package not found: https://micropython.org/pi/v2/package/6/<url>/latest.json

これが起きたときは、URLが正しいか確認してください。

  1. 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

inserted by FC2 system