🚀

【Micopython】Micropython CLIを脱却して、mpremoteを使うようになりました

に公開

Micropython CLIからmpremote移行の背景

私はラズパイPicoやESP32のコードはもっぱらMicroPythonで書いており、開発環境にはMicroPython CLIを用いていました。

しかし、MicroPython CLIには色々と不満点もありまして、例えば以下のような感じです。

  • ラズピコやESP32への書き込みはPyMakrやMicroPico Device Controllerを使っていますが、接続不良が発生しやすい
  • 2025年7月現在、MicroPython CLIはpython3.11環境下でしか動かず、いい加減に3.13で動いてほしい
  • stubsの導入はできるが削除はできず、古いスタブがどんどん溜まる

AIがコードを書いたりコマンド実行してくれるようになった現代、下手にGUIで操作するよりも、コマンドを打ったほうが便利です。

MicroPython v1.17以降は、mpremoteを使ってMicroPython デバイスをリモート操作、ファイルシステム管理ができるようになりました。

mpremoteは公式が提供してくれているので、前述のようなサードパーティ性ツールのような不具合も少なく、メンテナンスも期待できます。

開始手順

$ pip install --user mpremote

フォルダ等は全部自分で作成する必要があります

/
├── lib/
├── src/
├── stubs/
└── README.md

スタブの用意

これをzipでまるっとインストールしましょう。

https://github.com/Josverl/micropython-stubs

stubsフォルダに、色々なデバイスのスタブがあるので、必要なものをstubsディレクトリにコピーします。
(この例では、2025年7月時点のラズピコWのスタブである"micropython-v1_25_0-rp2-RPI_PICO_W-merged"をコピーしています。
無印よりmergedのほうが、カバー範囲が広い?)

コピーできたら、pyrigntconfig.jsonにスタブを読み込むよう設定します。

{
    "include": ["src", "lib"],
    "extraPaths": [
      "./stubs/micropython-v1_25_0-rp2-RPI_PICO_W-merged"
    ]
  }

これで、CursorやVSCodeでコード補完が効くようになりました。

例1. モジュールのインポート

src/module1.py
"""Lチカのモジュール"""
from machine import Pin
import utime

class Module1:
    def __init__(self):
        self.led = Pin("LED", Pin.OUT)

    def blink(self):
        for i in range(10):
            self.led.value(1)
            utime.sleep(0.5)
            self.led.value(0)
            utime.sleep(0.5)
src/main.py
# ファイルパスを認識させる
import sys
sys.path.append('/src')
sys.path.append('/lib')
sys.path.append('/remote/src')
sys.path.append('/remote/lib')

# モジュールをインポートして実行
from module1 import Module1

module1 = Module1()
module1.blink()

アップロード

ラズピコ内にsrcフォルダを作成
% mpremote mkdir :src

srcフォルダの中身を全てラズピコにコピー
% mpremote cp -r src/* :src 

REPLの実行

pythonを使う理由は、なんと言ってもインタプリタ型なのでコードを逐次的に実行できることです。
いちいちビルドが必要なNode-RedやC/C++(Aruduino言語)と違い、パパッと実行できるので開発がとても快適です。

公式ドキュメントに書かれているので、ここではよく使うコマンドだけ紹介します。

src/main.pyをラズピコ内で直接実行

% mpremote run src/main.py

PCのフォルダやファイル構成を直接ラズピコで実行

PCのフォルダやファイルをラズピコにマウント
% mpremote mount .
>>> import os
>>> print(os.listdir('/remote'))

パソコンのカレントディレクトリのファイル一覧が表示される

例えばsrc/main.pyがあったとして、これを実行する

exec(open('/remote/src/main.py').read())

Discussion