マイクロパイソン

マイクロパイソン
開発者ダミアン・P・ジョージ
初回リリース2014年5月3日 (2014年5月3日
安定版リリース
1.27.0  ウィキデータで編集する / 2025年12月9日 (2025年12月9日
リポジトリ
書かれたC
プラットフォームARM Cortex-MSTM32ESP8266ESP32、16ビットPICUnixMicrosoft WindowsZephyrJavaScriptRP2040
ライセンスMITライセンス[ 1 ]
Webサイトマイクロパイソン.org

MicroPythonは、 Python 3とほぼ互換性のあるC言語で書かれたプログラミング言語ソフトウェア実装であり、マイクロコントローラ上で実行するように最適化されています。[ 2 ] [ 3 ]

MicroPythonは、バイトコードを生成するPythonコンパイラと、そのバイトコードのランタイムインタープリタで構成されています。ユーザーには対話型プロンプト(REPL)が表示され、サポートされているコマンドを即座に実行できます。MicroPythonには、Pythonのコアライブラリがいくつか含まれており、プログラマが低レベルのハードウェアにアクセスできるようにするモジュールも含まれています。[ 4 ]

MicroPython には、コードをフルスピードで実行できる インライン アセンブラがありますが、異なるマイクロコントローラ間で移植することはできません。

このプロジェクトのソースコードはMITライセンスの下でGitHubで公開されている。[ 5 ]

歴史

2020年に発売され、MicroPythonを内蔵したカシオFX-9860GIII電卓

MicroPythonは、 2013年にKickstarterキャンペーンの成功を受けて、オーストラリアのプログラマー、ダミアン・ジョージ氏によって開発されました。[ 6 ]最初のKickstarterキャンペーンでは、STM32F4搭載開発ボード「pyboard」が付属したMicroPythonがリリースされました。その後、MicroPythonはARMベースの様々なアーキテクチャをサポートするように開発が進められてきました。[ 7 ] メインラインでサポートされているポートは、ARM Cortex-M(多くのSTM32 [ 8 ] ボード、RP2040ボード、TI CC3200/WiPy、Teensyボード、Nordic nRFシリーズ、SAMD21およびSAMD51)、ESP8266ESP32[ 9 ] 16ビットPIC、Unix、Windows、Zephyr、JavaScriptです。[ 10 ] また、メインラインでサポートされていない様々なシステムやハードウェアプラットフォーム向けのフォークも多数存在します。[ 11 ]

2016年には、 Pythonソフトウェア財団のBBCとのMicro Bitパートナーシップへの貢献の一環として、BBC Micro Bit用のMicroPythonのバージョンが作成されました。 [ 12 ]

2017年7月、MicroPythonは分岐し、教育と使いやすさを重視したMicroPythonのバージョンであるCircuitPythonが開発されました。MicroPythonとCircuitPythonはサポートするハードウェアが若干異なります(例えば、CircuitPythonはAtmel SAM D21とD51ボードをサポートしていますが、ESP8266はサポートしていません)。バージョン4.0の時点で、CircuitPythonはMicroPythonバージョン1.9.4をベースにしています。[ 13 ]

2017年に、MicrosemiはRISC-V(RV32およびRV64)アーキテクチャ用のMicroPythonポートを作成しました。 [ 14 ]

2019年4月には、レゴマインドストームEV3用のMicroPythonのバージョンが作成されました。[ 15 ]

2021年1月には、RP2040(ARM Cortex-M0+、Raspberry Pi Picoなど)用のMicroPythonポートが作成されました。[ 16 ]

特徴

Pythonを実行する能力

MicroPythonはPythonを実行する機能を備えており、ユーザーはシンプルでわかりやすいプログラムを作成できます。[ 17 ] MicroPythonは多くの標準的なPythonライブラリをサポートしており、Pythonで最もよく使用されるライブラリの80%以上の機能をサポートしています。[ 17 ] MicroPythonは、マイクロコントローラとPythonの間にある一般的なパフォーマンスギャップをサポートするために特別に設計されました。[ 18 ] Pythonコードはハードウェアに直接アクセスして対話することができ、オペレーティングシステム上で実行される通常のPythonアプリケーションでは利用できないハードウェアの可能性が広がります。[ 19 ]

コードの移植性

MicroPythonはハードウェア抽象化レイヤー(HAL)技術を活用しているため、開発されたコードは、同じファミリーまたはプラットフォーム内の異なるマイクロコントローラ間、およびMicroPythonをサポートしダウンロード可能なデバイス間で移植可能です。プログラムは多くの場合、高性能マイクロコントローラ上で開発・テストされ、最終アプリケーションは低性能マイクロコントローラ上で使用されて配布されます。[ 20 ]

モジュール

MicroPythonは、新しいコードを記述した後、凍結モジュールを作成し、それを開発中のファームウェアの一部としてライブラリとして使用できる機能を提供します。この機能は、既にエラーがなくテスト済みの同じコードをMicroPython環境に繰り返しダウンロードすることを回避するのに役立ちます。このタイプのモジュールは、マイクロコントローラのモジュールディレクトリに保存され、コンパイルされてマイクロコントローラにアップロードされます。そこでライブラリはPythonのimportコマンドを使用して繰り返し利用できるようになります。[ 20 ]

読み取り-評価-印刷ループ

REPL( read -eval-print loop)を使用すると、開発者は個々のコード行を入力し、ターミナル上ですぐに実行することができます。[ 21 ] LinuxベースおよびmacOSシステムには、シリアルUSB接続を使用してMicroPythonデバイスのREPLに直接接続できるターミナルエミュレータがあります。REPLは、コードの各部分を実行し、結果を視覚的に確認できるため、アプリケーションの一部を即座にテストするのに役立ちます。コードのさまざまな部分をREPLにロードすると、追加のREPL機能を使用してそのコードの機能を試すことができます。[ 17 ]

役立つREPLコマンド(シリアルコンソールに接続後): [ 21 ]

  • CTRL+ C: キーボード割り込み
  • CTRL+ D: リロード
  • help(): ヘルプメッセージ
  • help("modules"): 組み込みモジュールを一覧表示します
  • importboard↵ Enterdir(board): プログラムのコードで使用できるマイクロコントローラボード上のすべてのピンをリ​​ストします

制限事項

MicroPythonはPython言語バージョン3.4と3.5の大部分を完全に実装していますが、3.5以降に導入されたすべての言語機能を実装しているわけではありません。[ 22 ]ただし、3.6の新しい構文や、3.8(代入式)や3.9などのそれ以降のバージョンの新機能は実装しています。標準ライブラリのサブセットが含まれています。[ 23 ]

MicroPythonは、他の一般的なプラットフォームと比較して、マイクロコントローラ市場でのハードウェアサポートが限られています。例えば、Arduinoでは、言語をサポートするマイクロコントローラの選択肢が少ないです。[ 18 ] MicroPythonには、他のプラットフォームとは異なり、統合開発環境(IDE)や専用のエディタは含まれていません。[ 18 ]

構文と意味論

MicroPythonの構文は、その明確で分かりやすいスタイルとパワーのためにPythonから採用されています。[ 24 ]他のほとんどのプログラミング言語とは異なり、読みやすさを優先するために句読点が少なく、構文上の工夫も少なくなっています。[ 17 ]

コードブロック

MicroPythonはPythonのコードブロックスタイルを採用しており、特定の関数、条件、またはループに固有のコードはインデントされます。[ 17 ]これは、ブロックを区切るためにシンボルやキーワードを使用する他の多くの言語とは異なります。[ 17 ] これは、視覚的な構造が意味的な構造を反映するため、MicroPythonコードの可読性を高めます。この重要な機能はシンプルですが、インデントを誤って使用すると、コードが誤った条件で実行されたり、インタープリタから全体的なエラーが発生したりする可能性があるため、重要です。[ 17 ]

コロン(:)は条件文の終了を示すために使われる重要な記号です。[ 17 ]インデントのサイズはタブ1つまたはスペース4つに相当します。

オペレーション

MicroPythonは、プリミティブ演算と論理演算を使用してさまざまな数学演算を実行する機能を備えています。[ 19 ]

サポートされている操作[ 19 ]
タイプオペレーター名前
算術+追加変数 + 1
-減算変数 - 1
*乗算変数 * 4
/分割変数 / 4
%モジュロ除算変数 % 4
比較==等しい式1 == 式2
!=等しくない式1 != 式2
<未満式1 < 式2
>より大きい式1 > 式2
<=以下式1 <= 式2
>=より大きいか等しい式1 >= 式2
論理的ビット単位および変数1と変数2
|ビット単位の論理和変数1 | 変数2
^ビットごとの排他的論理和変数1 ^ 変数2
ビット補数~変数1
そして論理的で変数1と変数2
または論理和変数1または変数2

図書館

MicroPythonは、Pythonのライブラリに類似した、無駄のない効率的なPython実装です。[ 25 ]標準Pythonライブラリの中には、MicroPythonに同等のライブラリがあり、両者を区別するために名前が変更されています。MicroPythonライブラリは、メモリを節約するためにあまり人気のない機能が削除または変更されているため、サイズが小さくなっています。[ 19 ]

MicroPythonの3種類のライブラリ: [ 19 ]

  • 標準のPythonライブラリ(組み込みライブラリ)から派生
  • 特定のMicroPythonライブラリ
  • ハードウェア機能を支援する特定のライブラリ

MicroPythonは高度にカスタマイズおよび構成可能ですが、ボード(マイクロコントローラ)ごとに言語が異なり、利用可能なライブラリも異なる場合があります。モジュール内またはモジュール全体の一部の関数やクラスが利用できなくなったり、変更されたりする場合があります。[ 19 ]

MicroPythonの標準Pythonライブラリ[ 4 ]
ライブラリ名説明
配列配列の操作
cmath複素数の数学関数を提供します
GCガベージコレクター
数学浮動小数点数の基本的な数学演算を提供します
システムシステムレベルの関数。インタープリタが使用する変数へのアクセスを提供します。
ビナシバイナリASCII間の変換関数
コレクションさまざまなオブジェクトを保持するコレクションおよびコンテナ型に対する操作
エラー番号エラーコードへのアクセスを提供します
ハッシュライブラリバイナリハッシュアルゴリズムの操作
ヒープヒープキューアルゴリズムを実装するための操作
io入出力ストリーム を処理するための操作
JSONJSONドキュメントとPythonオブジェクト 間の変換を処理します
osファイルシステムアクセスと基本的なオペレーティングシステム機能 のための関数
正規表現マッチング操作を実装する
選択複数のストリーム上のイベントを処理するための関数
ソケットソケット(ネットワーク)に接続し、ソケットインターフェースへのアクセスを提供する
構造体プリミティブデータ型をパックおよびアンパックしてPythonオブジェクトへの変換を実行します。
時間時間間隔の測定や遅延の実装など、時間と日付の機能を提供します。
zlibバイナリデータを解凍する操作
MicroPython固有のライブラリ[ 4 ]
ライブラリ名説明
フレームバッファディスプレイに送信する ビットマップ画像を作成するために使用できるフレームバッファを提供します。
機械ハードウェアブロックへのアクセスと対話を支援する機能
マイクロパイソンMicroPython内部へのアクセスと制御
ネットワークネットワークドライバのインストールを支援し、ネットワークを介したやり取りを可能にします
ctypesバイナリデータ構造にアクセスする

カスタム MicroPython ライブラリ

開発者が新しいアプリケーションの開発を開始する際、標準のMicroPythonライブラリとドライバでは、演算や計算が不十分で要件を満たせない場合があります。Pythonと同様に、既存のライブラリやファームウェアの機能を拡張するカスタムライブラリを使用して、MicroPythonの機能を拡張することが可能です。[ 20 ]

MicroPythonでは、.pyで終わるファイルは他のライブラリエイリアスよりも優先されるため、ユーザーは既存のライブラリの使用と実装を拡張できます。[ 19 ]

サポートハードウェア

MicroPythonの実装と人気が高まるにつれ、より多くのボードがMicroPythonを実行できるようになりました。多くの開発者が、様々なマイクロコントローラにダウンロード可能なプロセッサ固有のバージョンを開発しています。[ 19 ] MicroPythonをマイクロコントローラにインストールする方法は、十分に文書化されており、ユーザーフレンドリーです。[ 20 ] MicroPythonは、マイクロコントローラのハードウェアとアプリケーション間のやり取りを簡素化し、リソースが限られた環境でも、高い応答性で幅広い機能にアクセスできるようにします。[ 17 ]

MicroPythonを実行するために使用される2種類のボード:[ 19 ]

  • 製造時に MicroPython がロードされているため、MicroPython のみが実行可能です。
  • MicroPython をボードにインストールできるファームウェアを搭載したボード。

コードの実行

MicroPythonボードにプログラムを移動するには、ファイルを作成し、それをマイクロコントローラにコピーして実行します。ハードウェアをコンピュータなどのデバイスに接続すると、ボードのフラッシュドライブがデバイス上に表示され、ファイルをフラッシュドライブに移動できるようになります。boot.pyとmain.pyという2つのPythonファイルが既に存在しますが、通常は変更しません。マイクロコントローラの起動時にプログラムを実行したい場合はmain.pyを変更します。そうでない場合は、REPLコンソールを使用してプログラムを実行します。[ 19 ]

パイボード

pyboardは、MicroPythonのソフトウェア機能を完全にサポートする公式のMicroPythonマイクロコントローラボードです。pyboardのハードウェア機能には以下が含まれます。[ 4 ]

起動プロセス

/flashpyboardには、ボードのフラッシュメモリ内に保存されるという名前のファイルシステムを持つ内部ドライブが搭載されています。また、 microSDカードをスロットに挿入して からアクセスできます/sd。起動時に、pyboardは または のいずれかから起動するファイルシステムを選択する必要があります/flash。その際、/sd現在のディレクトリは または に設定されます/flash/sdデフォルトでは、SDカードが挿入されている場合は/sdが使用され、そうでない場合は/flashが使用されます。必要に応じて、 と呼ばれる空のファイルを作成してボードのフラッシュメモリに保存することで、起動プロセスでのSDカードの使用を回避できます/flash/SKIPSD。このファイルは、起動プロセスでSDカードをスキップします。[ 4 ]

ブートモード

pyboardが正常に電源投入されるかリセットボタンが押されると、pyboardは標準モードで起動します。つまり、boot.pyファイルが実行され、USBが設定され、最後にpythonプログラムが実行されます。[ 4 ]

ボードの起動プロセス中にユーザースイッチを押したままリセットボタンを押すことで、標準の起動シーケンスをオーバーライドすることができます。pyboardのLEDはモード間を点滅し、ユーザーが希望するモードに達したらユーザースイッチを離すと、ボードは指定されたモードで起動します。[ 4 ]

ブートモードは以下のとおりである: [ 4 ]

  • 標準ブート: 緑色の LED のみ (boot.py を実行してから Python プログラムを実行)
  • セーフブート: オレンジ色の LED のみ (起動中にスクリプトは実行されません)
  • ファイルシステムのリセット: 緑とオレンジの LED が同時に点灯 (フラッシュドライブを工場出荷時の状態にリセットし、セーフモードで起動) – ファイルシステムが破損している場合の修正として使用します

エラー

  • 赤と緑の LED が交互に点滅する場合は、Python スクリプトにエラーがあるため、REPL を使用してデバッグする必要があります。
  • 4つのLEDすべてが点灯と消灯を繰り返す場合は、回復不可能なハード障害が発生しており、ハードリセットが必要です。[ 4 ]

プログラミング例

出典: [ 19 ]

Hello Worldプログラム:

# シリアルコンソールに印刷印刷( "Hello, World!" )

インポート + LED の点灯:

pybをインポートする# LEDをオンにするpyb . LED ( 1 ) .オン()

ファイルの読み取り + ループ:

インポートOS# ファイルを開いて読み込むopen ( "/readme.txt" )をfとして実行します:印刷( f . read ())

バイトコード

MicroPythonには、MicroPythonバイトコード(ファイル拡張子は.mpy )を生成するクロスコンパイラが含まれています。Pythonコードは、マイクロコントローラ上で直接バイトコードにコンパイルすることも、他の場所でプリコンパイルすることもできます。

MicroPython ファームウェアはコンパイラなしでビルドでき、事前にコンパイルされたmpyプログラムを実行できる仮想マシンだけが残ります。

実装と用途

MicroPythonは、標準ソフトウェアによって特定のマイクロコントローラのフラッシュメモリにロードされたファームウェアを介して利用され、シリアルインターフェースをエミュレートするコンピュータにロードされた端末アプリケーションを使用して通信します。[ 20 ]

MicroPythonの主な用途は、3つのカテゴリーに大別できます。[ 20 ]

  • 教育目的: MicroPython の read-eval-print ループ (REPL) を使用してマイクロコントローラと対話することで、より複雑なプログラミング言語よりも簡単な方法で、データ処理とボードとの通信の概念を視覚的に説明できます。
  • デバイスおよびセンサー設計の開発とテスト:MicroPythonは、マイクロコントローラで使用されるインターフェースの、検証済みでバグのない、徹底的にテストされたリファレンス実装を提供します。これにより、周辺機器の通信設定と制御を実装するという、開発者にとって一般的な課題を解決します。MicroPythonはデバイスレジスタへの直接かつインタラクティブなアクセスを提供するため、機能検証、ハードウェア部品やデバイスの開発、およびデバイス制御とデータ取得のためのアルゴリズムのテストが容易になります。
  • 複雑なアプリケーション設計のための監視および設定ツール:特定のアプリケーションでは、高性能マイクロコントローラー上で特定のアプリケーションを実行する必要があります。MicroPythonは、状態監視とシステムパラメータの設定を支援します。

MicroPythonの実装は、標準ライブラリとサポートライブラリの可用性、マイクロコントローラのフラッシュメモリとRAMのサイズによって異なる場合があります。[ 20 ]

参照

参考文献

  1. ^ George, Damien P. (2014年5月4日). 「micropython/LICENSE at master · micropython/micropython」 . GitHub . 2017年2月11日閲覧
  2. ^ Venkataramanan, Madhumita (2013年12月6日). 「Micro Python: Arduinoよりも強力、Raspberry Piよりもシンプル」 . Wired . 2016年12月15日閲覧
  3. ^ Yegulalp, Serdar (2014年7月5日). 「Micro Pythonの小さな回路:Pythonの亜種がマイクロコントローラをターゲットに」 InfoWorld . 2016年12月15日閲覧
  4. ^ a b c d e f g h i「MicroPython - マイクロコントローラ向けPython」 . micropython.org . 2017年8月12日閲覧
  5. ^ 「MicroPython on GitHub」 . GitHub . 2022年2月7日.
  6. ^ 「Micro Python: マイクロコントローラ向けPython」 Kickstarter 2016年2月26日。 2016年12月15日閲覧
  7. ^ Beningo, Jacob (2016年7月11日). 「プロトタイプから製品版へ:MicroPythonの裏側」 EDN Network . 2016年12月15日閲覧
  8. ^ 「Nucleo STM32、STM32F411CE、STM32F401CC上のMicroPython:ファームウェアのフラッシュと基本ツール」 Mischianti . 2023年8月.
  9. ^ 「MicroPython with esp8266 and esp32: flashing firmware and programming with basic tools」 . Mischianti . 2023年6月7日.
  10. ^ George, Damien P. "micropython/ports at master · micropython/micropython" . GitHub . 2019年10月22日閲覧
  11. ^ Sokolovsky, Paul. 「Awesome MicroPython」 . GitHub . 2019年10月22日閲覧
  12. ^ Williams, Alun (2015年7月7日). 「BBC Micro-Bit ユーザーインターフェースを実際に使ってみる」 . ElectronicsWeekly.com . 2015年7月8日閲覧
  13. ^ Shawcroft, Scott (2019年5月22日). 「CircuitPython 4.0.1 リリース!」 . Adafruit ブログ. Adafruit Industries . 2019年6月11日閲覧
  14. ^ 「RISC-Vポスタープレビュー — 第7回RISC-Vワークショップ」(PDF) 2017年11月28日. 2018年12月17日閲覧
  15. ^ 「LEGO、ev3devとPybricksをベースにしたEV3向けMicroPythonをリリース」 www.ev3dev.org . 20204月21日閲覧。
  16. ^ 「Raspberry Silicon のご紹介:Raspberry Pi Pico が4ドルで販売開始」 www.raspberrypi.org 2021年1月21日. 2021年1月21日閲覧
  17. ^ a b c d e f g h i Alsabbagh, Marwan (2019). MicroPython Cookbook . バーミンガム、イギリス: Packt Publishing .
  18. ^ a b c Bruno, P. (2021年11月25日). 「MicroPython入門」 . All3DP . 2022年5月9日閲覧
  19. ^ a b c d e f g h i j k Bell, Charles (2017). MicroPython for the Internet of Things . Berkeley, USA: Apress .
  20. ^ a b c d e f g Gaspar, G.; Kuba, P.; Flochova, J.; Dudak, J.; Florkova, Z. (2020).インダストリー4.0実装のためのMicroPythonプラットフォームに基づくIoTアプリケーションの開発. 2020 第19回国際メカトロニクス会議 – Mechatronika (ME). pp.  1– 7.
  21. ^ a b Rembor, K. 「REPL」 . CircuitPythonへようこそ! . Adafruit Learning System . 2022年5月9日閲覧
  22. ^ 「MicroPython と CPython の違い — MicroPython の最新ドキュメント」 . docs.micropython.org .
  23. ^ 「MicroPython - マイクロコントローラ用の Python」 . micropython.org .
  24. ^ Wang, L.; Li, Y.; Zhang, H.; Han, Q.; Chen, L. (2021). MicroPythonバイトコード用の効率的な制御フローベースの難読化ツール. 2021 第7回システムおよびソフトウェア信頼性国際シンポジウム (ISSSR). pp.  54– 63.
  25. ^ Khamphroo, M.; Kwankeo, N.; Kaemarungsi, K.; Fukawa, K. (2017).コンピュータコーディング学習のためのMicroPythonベースの教育用モバイルロボット. 2017第8回組み込みシステム向け情報通信技術国際会議 (IC-ICTES). pp.  1– 6.