| マイクロパイソン | |
|---|---|
| 開発者 | ダミアン・P・ジョージ |
| 初回リリース | 2014年5月3日 (2014年5月3日) |
| 安定版リリース | |
| リポジトリ | |
| 書かれた | C |
| プラットフォーム | ARM Cortex-M、STM32、ESP8266、ESP32、16ビットPIC、Unix、Microsoft Windows、Zephyr、JavaScript、RP2040 |
| ライセンス | MITライセンス[ 1 ] |
| Webサイト | マイクロパイソン |
MicroPythonは、 Python 3とほぼ互換性のあるC言語で書かれたプログラミング言語のソフトウェア実装であり、マイクロコントローラ上で実行するように最適化されています。[ 2 ] [ 3 ]
MicroPythonは、バイトコードを生成するPythonコンパイラと、そのバイトコードのランタイムインタープリタで構成されています。ユーザーには対話型プロンプト(REPL)が表示され、サポートされているコマンドを即座に実行できます。MicroPythonには、Pythonのコアライブラリがいくつか含まれており、プログラマが低レベルのハードウェアにアクセスできるようにするモジュールも含まれています。[ 4 ]
MicroPython には、コードをフルスピードで実行できる インライン アセンブラがありますが、異なるマイクロコントローラ間で移植することはできません。
このプロジェクトのソースコードはMITライセンスの下でGitHubで公開されている。[ 5 ]
歴史

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)、ESP8266、ESP32、[ 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 ]
| タイプ | オペレーター | 名前 | 例 |
|---|---|---|---|
| 算術 | + | 追加 | 変数 + 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 ]
| ライブラリ名 | 説明 |
|---|---|
| 配列 | 配列の操作 |
| cmath | 複素数の数学関数を提供します |
| GC | ガベージコレクター |
| 数学 | 浮動小数点数の基本的な数学演算を提供します |
| システム | システムレベルの関数。インタープリタが使用する変数へのアクセスを提供します。 |
| ビナシ | バイナリとASCII間の変換関数 |
| コレクション | さまざまなオブジェクトを保持するコレクションおよびコンテナ型に対する操作 |
| エラー番号 | エラーコードへのアクセスを提供します |
| ハッシュライブラリ | バイナリハッシュアルゴリズムの操作 |
| ヒープ | ヒープキューアルゴリズムを実装するための操作 |
| io | 入出力ストリーム を処理するための操作 |
| JSON | JSONドキュメントとPythonオブジェクト 間の変換を処理します |
| os | ファイルシステムアクセスと基本的なオペレーティングシステム機能 のための関数 |
| 再 | 正規表現マッチング操作を実装する |
| 選択 | 複数のストリーム上のイベントを処理するための関数 |
| ソケット | ソケット(ネットワーク)に接続し、ソケットインターフェースへのアクセスを提供する |
| 構造体 | プリミティブデータ型をパックおよびアンパックしてPythonオブジェクトへの変換を実行します。 |
| 時間 | 時間間隔の測定や遅延の実装など、時間と日付の機能を提供します。 |
| zlib | バイナリデータを解凍する操作 |
| ライブラリ名 | 説明 |
|---|---|
| フレームバッファ | ディスプレイに送信する ビットマップ画像を作成するために使用できるフレームバッファを提供します。 |
| 機械 | ハードウェアブロックへのアクセスと対話を支援する機能 |
| マイクロパイソン | 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 ]
- マイクロコントローラ( CPU、フラッシュROM、RAMで構成されるMCU )
- microUSBコネクタ
- microSDカードスロット
- IOピン
- スイッチ、LED、サーボポート、リアルタイムクロック、加速度計
起動プロセス
/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 ]
参照
参考文献
- ^ George, Damien P. (2014年5月4日). 「micropython/LICENSE at master · micropython/micropython」 . GitHub . 2017年2月11日閲覧。
- ^ Venkataramanan, Madhumita (2013年12月6日). 「Micro Python: Arduinoよりも強力、Raspberry Piよりもシンプル」 . Wired . 2016年12月15日閲覧。
- ^ Yegulalp, Serdar (2014年7月5日). 「Micro Pythonの小さな回路:Pythonの亜種がマイクロコントローラをターゲットに」 InfoWorld . 2016年12月15日閲覧。
- ^ a b c d e f g h i「MicroPython - マイクロコントローラ向けPython」 . micropython.org . 2017年8月12日閲覧。
- ^ 「MicroPython on GitHub」 . GitHub . 2022年2月7日.
- ^ 「Micro Python: マイクロコントローラ向けPython」 Kickstarter 、 2016年2月26日。 2016年12月15日閲覧。
- ^ Beningo, Jacob (2016年7月11日). 「プロトタイプから製品版へ:MicroPythonの裏側」 EDN Network . 2016年12月15日閲覧。
- ^ 「Nucleo STM32、STM32F411CE、STM32F401CC上のMicroPython:ファームウェアのフラッシュと基本ツール」 Mischianti . 2023年8月.
- ^ 「MicroPython with esp8266 and esp32: flashing firmware and programming with basic tools」 . Mischianti . 2023年6月7日.
- ^ George, Damien P. "micropython/ports at master · micropython/micropython" . GitHub . 2019年10月22日閲覧。
- ^ Sokolovsky, Paul. 「Awesome MicroPython」 . GitHub . 2019年10月22日閲覧。
- ^ Williams, Alun (2015年7月7日). 「BBC Micro-Bit ユーザーインターフェースを実際に使ってみる」 . ElectronicsWeekly.com . 2015年7月8日閲覧。
- ^ Shawcroft, Scott (2019年5月22日). 「CircuitPython 4.0.1 リリース!」 . Adafruit ブログ. Adafruit Industries . 2019年6月11日閲覧。
- ^ 「RISC-Vポスタープレビュー — 第7回RISC-Vワークショップ」(PDF) 2017年11月28日. 2018年12月17日閲覧。
- ^ 「LEGO、ev3devとPybricksをベースにしたEV3向けMicroPythonをリリース」 www.ev3dev.org . 2020年4月21日閲覧。
- ^ 「Raspberry Silicon のご紹介:Raspberry Pi Pico が4ドルで販売開始」 www.raspberrypi.org 2021年1月21日. 2021年1月21日閲覧。
- ^ a b c d e f g h i Alsabbagh, Marwan (2019). MicroPython Cookbook . バーミンガム、イギリス: Packt Publishing .
- ^ a b c Bruno, P. (2021年11月25日). 「MicroPython入門」 . All3DP . 2022年5月9日閲覧。
- ^ a b c d e f g h i j k Bell, Charles (2017). MicroPython for the Internet of Things . Berkeley, USA: Apress .
- ^ 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.
- ^ a b Rembor, K. 「REPL」 . CircuitPythonへようこそ! . Adafruit Learning System . 2022年5月9日閲覧。
- ^ 「MicroPython と CPython の違い — MicroPython の最新ドキュメント」 . docs.micropython.org .
- ^ 「MicroPython - マイクロコントローラ用の Python」 . micropython.org .
- ^ Wang, L.; Li, Y.; Zhang, H.; Han, Q.; Chen, L. (2021). MicroPythonバイトコード用の効率的な制御フローベースの難読化ツール. 2021 第7回システムおよびソフトウェア信頼性国際シンポジウム (ISSSR). pp. 54– 63.
- ^ Khamphroo, M.; Kwankeo, N.; Kaemarungsi, K.; Fukawa, K. (2017).コンピュータコーディング学習のためのMicroPythonベースの教育用モバイルロボット. 2017第8回組み込みシステム向け情報通信技術国際会議 (IC-ICTES). pp. 1– 6.
外部リンク
- 公式サイト
- GitHubのmicropython
- GOTO 2016 • MicroPython とモノのインターネット • YouTubeのDamien George
- YouTubeのMicroPythonプレイリスト• Tony DiCola / Adafruitによるチュートリアル