ESP32 で Android/iOS ライクな OS を動かす!MicroPythonOS の全貌

タグ ESP32MicroPython組み込みOSIoT開発GUIWi-FiLittleFScolumnコラムlinuxLinuxiotGitHubオープンソースMicroPythonOS

ESP32 で Android/iOS ライクな OS を動かす!MicroPythonOS の全貌

ひとことでいうと

MicroPythonOS は、ESP32 などの小型マイコン向けに作られた、本格的なオペレーティングシステムです。 Android や iOS のデザイン思想を参考に設計されており、MicroPython(マイコンで動く Python 実装)の上で動作します。 グラフィカルな画面操作、Wi-Fi 接続の管理、アプリの追加・起動といった機能を、手のひらサイズのマイコンボードで実現できます。 「小さなコンピューターに OS を乗せて、スマートフォンのような体験を作る」というのが、このプロジェクトのめざすところです。 Python の知識があれば、C 言語やアセンブラを使わずにシステムレベルの開発を体験できる点が、大きな魅力です。

こんな人におすすめ

1. ESP32 で IoT デバイスを作りたい開発者

センサーや液晶画面を組み合わせた IoT(モノのインターネット)デバイスを作るとき、Wi-Fi の再接続や UI(画面表示)の仕組みをゼロから書く手間が省けます。 MicroPythonOS にはこれらがあらかじめ用意されているため、自分のアプリ機能の開発に集中できます。

2. MicroPython で GUI・ネットワーク機能を試したい人

グラフィカルなキーボードや接続マネージャーといった高レベルな部品が最初から揃っています。 pytest 形式のテストも整備されているため、品質を保ちながら機能を追加・拡張していけます。

3. マイコン向け OS の仕組みを学びたいエンジニア・学習者

Android や iOS を参考にしたアーキテクチャを、Python コードで読み解ける貴重な教材です。 scripts/ フォルダに豊富なシェルスクリプトが揃っており、ビルドからフラッシュ(書き込み)までの流れを一通り把握できます。

インストール・使い方

MicroPythonOS のセットアップには、ESP32 開発ボードと USB ケーブル、そして Python 環境が必要です。 ターミナル(文字を入力してパソコンに命令を送る画面)を使って、以下の手順を順番に実行してください。 コマンドはコピー&ペーストで貼り付けて使えます。 詳しい手順は公式ドキュメント(https://docs.MicroPythonOS.com/)にも掲載されています。

Step 1: リポジトリ(ソースコードの置き場所)をダウンロードする

git clone https://github.com/MicroPythonOS/MicroPythonOS.git
cd MicroPythonOS

git clone はインターネットからソースコードをまるごとダウンロードするコマンドです。 cd MicroPythonOS でダウンロードしたフォルダの中に移動します。

Step 2: 必要なツールをインストールする

bash scripts/install.sh

ビルドに必要なツール群を自動でインストールするスクリプトです。 mklittlefs(ファイルシステムのイメージを作るツール)など、複数の依存ツールがまとめてセットアップされます。

Step 3: ファームウェア(マイコンに書き込むプログラム)をビルドする

bash scripts/build_all.sh

MicroPython のツールチェーン(ビルドに使う一連のツール)を使い、ファームウェアイメージを生成します。 内部では scripts/compile_py.sh で Python コードをコンパイルし、scripts/bundle_apps.sh でアプリをまとめる処理も行われます。

Step 4: ESP32 に書き込む(USB 経由)

bash scripts/flash_over_usb.sh

USB ケーブルで PC と ESP32 ボードをつなぎ、ファームウェアを書き込みます。 書き込みが完了すると、マイコンが MicroPythonOS で起動する準備が整います。

Step 5: デスクトップ環境の起動を確認する

bash scripts/run_desktop.sh

MicroPythonOS のデスクトップ(グラフィカルな操作画面)が正しく起動するか確認するステップです。 ここまで完了すれば、OS の基本機能が動いていることを確認できます。

ブラウザで試す(デモ)

実際に ESP32 へ書き込まなくても、MicroPythonOS のプロジェクト構造・主要スクリプト・MicroPython コード例をブラウザ上でインタラクティブに確認できるデモが用意されています。 ハードウェアをまだ持っていない方でも、OS の設計思想やコンポーネントの構成をざっくり把握するための情報デモとして活用できます。 まずはデモで全体像をつかんでから、実機へのセットアップに進む、という流れもおすすめです。

動かしてみた

Python 3.12 の環境でリポジトリ全体の構造を確認しました。 プロジェクトのルートには internal_filesystem/main.py(OS が起動するときの入り口となるファイル)があり、scripts/ フォルダには多数のシェルスクリプト、tests/ フォルダには pytest 形式のテストが整然と並んでいます。

./internal_filesystem/main.py                           # OS メインエントリポイント
./scripts/build_all.sh                                  # 全体ビルドスクリプト
./scripts/flash_over_usb.sh                             # USB 経由フラッシュ
./scripts/run_desktop.sh                                # デスクトップ起動
./scripts/bundle_apps.sh                                # アプリバンドル
./scripts/make_image.sh                                 # イメージ作成
./tests/test_logging.py                                 # ログ機能テスト
./tests/test_connectivity_manager_reconnect.py          # 再接続テスト
./tests/test_graphical_keyboard_method_forwarding.py    # キーボードテスト

テストは test_logging(ログ出力の動作)、test_connectivity_manager_reconnect(Wi-Fi などの再接続ロジック)、test_graphical_keyboard_method_forwarding(グラフィカルキーボードの動作)の 3 種類が揃っており、主要コンポーネントが網羅されていることが分かります。 c_mpos/ ディレクトリには MicroPython 向けの C 拡張モジュールの定義ファイル(.mk / .cmake)が入っており、速度が求められる処理はネイティブコード(C 言語で書かれた高速なプログラム)と連携する仕組みになっていることも確認できました。 pytest tests/ コマンドでテストの一部はハードウェアなしでも実行できるため、コードを読む入り口としても最適です。

実践へのはじめの一歩

  • まずハードウェアを揃える — ESP32 開発ボードと USB ケーブルを用意するところからスタートです。
  • install.sh を最初に実行する — 依存ツールがまとめてセットアップされ、後の手順がスムーズになります。
  • make_image.shflash_over_usb.sh の順に進める — ファームウェアイメージを作ってから書き込む、という流れが基本です。
  • run_desktop.sh で動作確認を先にやる — ボード起動後すぐにデスクトップ環境を確かめることで、セットアップが正しいか素早く判断できます。
  • ハードウェアがない場合は pytest tests/ から始める — ロジックの確認やコードリーディングの入り口として活用できます。
  • changelog_to_json.sh でリリース管理の仕組みを学ぶ — 変更履歴を JSON 形式に変換するユーティリティも含まれており、プロジェクト管理の流れまで一緒に学べます。

用語とポイント解説

MicroPython

マイコン(小型の組み込みコンピューター)向けに最適化された Python の実装です。 かんたんに言うと「RAM が数百 KB しかない小さなボードでも動く、軽量版 Python」です。 通常の Python と文法はほぼ同じため、Python を知っていればすぐに書き始められます。 標準ライブラリの一部が省略されている代わりに、ハードウェア制御用のモジュールが充実しています。

ESP32

Espressif(エスプレシフ)社が開発した、Wi-Fi と Bluetooth を内蔵したマイコンモジュールです。 かんたんに言うと「インターネットにつながる小型コンピューターチップ」で、IoT デバイス開発で世界中に普及しています。 価格が安く入手しやすいため、趣味から業務まで幅広い場面で使われています。

LittleFS

マイコンの内蔵フラッシュメモリ(ストレージ)向けに設計された、小型のファイルシステムです。 かんたんに言うと「マイコン上でファイルを保存・管理するための仕組み」で、突然の電源断(パワーロス)が起きてもデータが壊れにくい特性があります。 PC の FAT や NTFS と同じ役割を、はるかに少ないリソースで実現します。

mklittlefs

LittleFS のイメージファイル(ファイルシステムをひとかたまりにしたデータ)を PC 上で生成するツールです。 かんたんに言うと「マイコンに書き込む前に、ファイルのまとまりを 1 つのファイルに固める道具」です。 ビルドチェーンの一部として build_all.sh の中から自動で呼び出されます。

フラッシュ(書き込み)

マイコンの内蔵フラッシュメモリにファームウェアを書き込む操作のことです。 かんたんに言うと「スマホの OS アップデートのように、マイコンにプログラムを転送してインストールする作業」です。 USB ケーブル経由で flash_over_usb.sh を使って実行します。

接続マネージャー(コネクティビティマネージャー)

Wi-Fi などのネットワーク接続状態を監視し、切断されたときに自動で再接続を試みるシステムコンポーネントです。 かんたんに言うと「ネットワークが途切れたら自動で再接続してくれる管理係」です。 IoT デバイスでは安定したネットワーク接続が重要なため、このコンポーネントは特に実用価値が高いです。

C 拡張モジュール

MicroPython から呼び出せる、C 言語で実装された高速なモジュールです。 かんたんに言うと「Python では遅くなりがちな処理を、速い C 言語で書き直した部品」です。 MicroPythonOS では c_mpos/ ディレクトリにその定義が置かれており、速度が求められる場面でネイティブコードを活用する設計になっています。

ファームウェア

マイコンや組み込み機器に書き込まれた、ハードウェアを動かすための基本プログラムです。 かんたんに言うと「マイコン専用の OS とドライバーを合わせたもの」で、PC で言えば BIOS や OS に相当します。 MicroPythonOS ではビルドスクリプトでファームウェアイメージを生成し、フラッシュ操作でマイコンに転送します。

pytest(パイテスト)

Python の標準的なテストフレームワーク(テストを自動実行する仕組み)です。 かんたんに言うと「コードが正しく動くかを自動でチェックしてくれるツール」で、pytest tests/ のように実行します。 MicroPythonOS では Wi-Fi 再接続やグラフィカルキーボードのロジックなど、主要コンポーネントのテストが揃っています。

活用例

  • スマートホームコントローラー — ESP32 にタッチ液晶を接続し、MicroPythonOS 上にカスタム UI アプリを載せることで、壁掛け型スマートホームパネルを構築できます。接続マネージャーが Wi-Fi の安定を担保するため、ネットワーク周りの実装が大幅に省力化されます。
  • 携帯型センサーロガー — Wi-Fi・Bluetooth の切り替えを接続マネージャーで自動化しつつ、センサーデータを LittleFS 上に記録するポータブルデバイスとして活用できます。カメラモジュールを組み合わせた画像記録にも対応できる設計になっています。
  • 教育用マイコン OS 教材 — Android/iOS ライクなアーキテクチャを Python コードで体験できる点が、大学・専門学校のカリキュラムに向いています。C 言語やアセンブラの知識なしに、スケジューリング・ファイルシステム・UI レンダリングといった OS の核心概念を学べます。
  • プレゼンテーション用デバイスstart_presentation.sh というプレゼンモードの起動スクリプトが含まれており、ESP32 を使ったスタンドアロンのプレゼンシステムを手軽に構築できます。
  • ウェブカム連携アプリcapture_webcam.sh によるウェブカム映像キャプチャや、グレースケール RAW 画像を PNG に変換するスクリプトが用意されており、カメラを使ったデバイス開発の出発点として活用できます。
  • 個人開発のミニ OS プロジェクト — アプリのバンドル・インストール・起動の仕組みが揃っているため、独自アプリを追加しながら自分だけの小型 OS を育てていく個人プロジェクトとして最適です。

MicroPythonOS は、小さなマイコンに本格的な OS の仕組みを持ち込むという、ユニークなアプローチのオープンソースプロジェクトです。 Python ベースのわかりやすいコードと豊富なスクリプト群のおかげで、初学者からプロの開発者まで幅広い方が学習・開発に活かせます。 ぜひスマートホームパネルの自作や組み込み OS の学習教材などに活用してみてはいかがでしょうか。