MaixPyをVSCodeで開発する【M5StickV,Maixシリーズ】

M5Stack社のM5StickV,UnitV、Sipeed社のMaixシリーズ(Maixduino,MaixM1Dock, MaixBit,MaixAmigoなど)をMaixPyIDEではなくVisualStudioCodeで開発するための手順を紹介します。
もくじ(Index)記事で利用した環境
ソフトウェア
- OS
Ubuntu 20.04 (Windows10のVMWare上のゲストOS) - VisualStudioCode 1.58.2
- Pymakr 1.1.12
- Nodejs v10.19.0
ハードウェア
K210搭載の下記の2機種で試しました。下記のリンクはAmazonへしています。詳しい購入の方法についてはM5Stack、M5StickC、M5StickV、M5Atom、M5Paper、M5CoreInkなどM5Stack製品の買い方を参照してください。
●microSDカード
M5StickVはmicroSDカードとの相性が良くない場合があります。当サイトではこちらのLexarの32GBものをおススメしています。
VSCodeの設定
Node.jsのインストール
いくつか方法があるようですが、私はsudo apt installを利用しました。Ubuntu20.04はNode.js Version10.19.0ですが動いています。
Pymakrのインストール
VSCodeの機能拡張で「Pymakr」を検索してインストールします。
global settings
コマンドパレットから「Pymakr>Global Settings」か「Ctrl+Shift+G」を押すとpymakr.jsonの編集画面が開くので下記の2項目を編集します。
- “address”
USBで接続するのであれば、ポートを指定します。(Ubuntuなら”/dev/ttyUSB0″ Windowsなら”COM??”など) - “auto_connect”: false
trueだと失敗するようです。falseにしておきましょう。

【難しい】VSCodeのコード補完機能にMaixPyのmoduleを追加する。
このままだと、MaixPy特有のlcdやKPU等のモジュールは補完できません。データを作成してあげる必要があります。
ただ、データを作成しても補完するときの候補にはメソッド名(関数名)しか表示されず、引数の情報は表示されないので完全ではありませんので注意してください。
①micropy-cliのインストール
②micropy-cliの改造
micropy-cliはMaixPyのstubには対応しておらず、またMaixPyではFlashのSPIFFSでフォルダが作成できないという致命的な制限があるのでそのままでは動きません。
「which python」を実行しpipでインストールされるフォルダを探して下記の3ファイルの修正を行います。Flashに書き込んでいる部分をsdに変更します。
●~/.platformio/penv/lib/python3.8/site-packages/micropy/main.py
120行目の”/stubs”を”/sd/stubs/”に変更
●~/.platformio/penv/lib/python3.8/site-packages/micropy/utils/pybwrapper.py
99行目の”/pyboard/”を”/sd/”に変更
●~/.platformio/penv/lib/python3.8/site-packages/micropy/lib/stubber/board/createstubs.py
① 433行目の”/flash”を”/sd”に変更
② 58~68行目のモジュールを変更(ESP32のMicroPython用なのでMaixPy独自のモジュールを足します。)
③micropy-cliの実行
M5StickVやMaixDuino等をPCに接続し、下記のコマンドを実行します。M5StickVは終わるまでずっとAボタンを押しっぱなしにします。(それでもうまくいかない場合あり。)
下記のように表示されたら完了です。(0.6.2-66はファームウェアのバージョンなので異なる場合があります。)
★M5StickVでmicropy-cliがうまくいかない場合
M5StickVは初期化の仕様がMaixシリーズと違うらしく、うまくいかない場合があります。その場合は下記手順でmicroSDカードから起動してstubを作成できます。
①microSDを準備
~/.platformio/penv/lib/python3.8/site-packages/micropy/lib/stubber/board 配下にある下記の3つのファイルをmicroSDのルートにコピーします。(修正後のもの)
- createstubs.py
- logging.py
- main.py
★main.pyはboot.pyに変えます。
②microSDをM5StickVに挿入して起動
起動し、シリアルモニターを開いておくと下記のようなメッセージが出てmicroSDにstubsフォルダが作成されます。
③microSDをPCに接続しフォルダを確認
PCに接続すると下記のようなフォルダ構成になっています。
- stubs
- micropython-maixpy-0_6_2-66
- stubファイル(*.py)とmodules.json
- micropython-maixpy-0_6_2-66
④フォルダ構成を変えて取り込み用のフォルダを準備
下記のように変更します。
- micropython-maixpy-0_6_2-66
- info.json
※ modules.jsonをコピーして名前を変更 - stubs
- stubファイル(*.py)とmodules.json
- info.json
⑤micropy-cliの実行
準備したフォルダを指定してmicropy-cliを実行します。
これでmicropyにstubが登録されます。
プロジェクトの作成
プロジェクト用のフォルダを作成し、移動後micropy initを実行します。選択する項目は下記の3つです。
- Project Name
任意です。 - Choose any Templates to Generate(※ 上下で選んでスペースで選択します。)
VSCode Settings for Autocompletion/Intellisense - Which stubs would you like to use?
作成したスタブを選びます(MaixPy-micropython-0.6.2)


VSCodeでフォルダを開く
作成したフォルダを開くと、プロジェクトに必要な設定ファイルやフォルダが自動で作成されます。

boot.pyを作成して動かしてみる。
エクスプローラーのエリアでboot.pyを作成して実行してみましょう。

サンプルソース
補完している様子
注意点としてはstubは関数名や変数のみなので、引数の項目は何も表示されません(仕様です。)
関数や変数の候補が表示されている状態 引数については何も表示できません。
【補足】スタブの作成が難しいという方へ
MaixPyの2021/08/22の最新で作成したものを公開しておきます。(Ver. 0.6.2-66) ※0.5ぐらいとは大きく違うので注意してください。
https://github.com/mongonta0716/stub_for_maixpy
上手く補完ができない時の対処
別のPCでセットアップをしたところ、補完が上手くいかない場合がありました。micropy initで作成される「.vscode/settings.json」のpython.languageServerが”None”の場合は”Delault”に直してみてください。
●参考: 私が使っているsettings.json
{ "python.linting.enabled": true, "python.jediEnabled": false, "python.autoComplete.extraPaths": [ ".micropy/micropython-maixpy-0_6_2-66/frozen", ".micropy/BradenM-micropy-stubs-4f5a52a/frozen", ".micropy/micropython-maixpy-0_6_2-66/stubs", ".micropy/MaixTrain" ], "python.autoComplete.typeshedPaths": [ ".micropy/micropython-maixpy-0_6_2-66/frozen", ".micropy/BradenM-micropy-stubs-4f5a52a/frozen", ".micropy/micropython-maixpy-0_6_2-66/stubs", ".micropy/MaixTrain" ], "python.analysis.typeshedPaths": [ ".micropy/micropython-maixpy-0_6_2-66/frozen", ".micropy/BradenM-micropy-stubs-4f5a52a/frozen", ".micropy/micropython-maixpy-0_6_2-66/stubs", ".micropy/MaixTrain" ], "python.linting.pylintEnabled": true, "python.languageServer": "Default", "python.analysis.extraPaths": [ ".micropy/micropython-maixpy-0_6_2-66/frozen", ".micropy/BradenM-micropy-stubs-4f5a52a/frozen", ".micropy/micropython-maixpy-0_6_2-66/stubs", ".micropy/MaixTrain" ] }
おわりに
これでMaixPyIDEではできなかったコード補完もできるようになりました。センサーの画像を見ることはできませんが、生産性が上がると思うのでぜひやってみてください。
更新履歴
- 2021/11/21 pip の記述が間違っていたので修正+補完が上手く動かない時の対処を追加
- 2021/8/22 新規作成