💬

VSCodeでmicropythonの開発環境を構築

2021/12/11に公開

micropythonの開発環境をVSCode上に作る方法を紹介します。micropythonのファームウェアはesp32 v1.15を使用しました。micropythonの開発環境はいくつか選択肢があると思いますが、今回のはVSCodeとPymakrextensionとmicropy-cliを使用します。

Pymakrが自動起動しないようにする

上のリンク先からPymakrをVSCodeにインストールすると、VSCodeを開くと真っ先に起動して、マイコンに接続しようとします。これはさすがに邪魔すぎるので、グローバル設定を変更します。

コマンドパレットでPymakr>Global settingsを選び、次のように設定を変えます。

pymakr.json
--- pymakr.json 2021-12-11 14:33:32.000000000 +0900
+++ -   2021-12-11 14:33:40.000000000 +0900
@@ -3,7 +3,7 @@
        "username": "micro",
        "password": "python",
        "sync_folder": "",
-       "open_on_start": true,
+       "open_on_start": false,
        "safe_boot_on_upload": false,
        "py_ignore": [
                "pymakr.conf",
@@ -18,7 +18,7 @@
        "sync_file_types": "py,txt,log,json,xml,html,js,css,mpy",
        "ctrl_c_on_connect": false,
        "sync_all_file_types": false,
-       "auto_connect": true,
+       "auto_connect": false,
        "autoconnect_comport_manufacturers": [
                "Pycom",
                "Pycom Ltd.",

これで不要なときに悪さはしなくなります。

プロジェクトを作る

micropythonのプロジェクトを作る方法です。micropy-cliをpipでインストールするとmicropyコマンドが使えるようになります。あとはコマンドを見れば意味は分かると思います。

$ mkdir blink_atom_matrix  
$ cd blink_atom_matrix
$ pyenv local 3.8.12
$ python -m venv .venv  
$ source .venv/bin/activate
$ pip install -U pip
$ pip install micropy-cli
$ pip install pylint
$ source ~/.zshrc
$ micropy stubs search esp32

MicroPy  Searching Stub Repositories...

MicroPy  Results for esp32:
MicroPy  esp32-micropython-1.10.0
MicroPy  esp32-micropython-1.11.0
MicroPy  esp32-micropython-1.12.0
MicroPy  esp32-micropython-1.15.0
MicroPy  esp32-micropython-1.9.4
MicroPy  esp32-pycopy-1.11.0
MicroPy  esp32-pycopy-2.11.0.1
MicroPy  esp32-pycopy-2.11.0.5
MicroPy  esp32-pycopy-3.0.0
MicroPy  esp32_LoBo
MicroPy  esp32_LoBo-esp32_LoBo-3.2.24
MicroPy  esp32s2-micropython-1.15.0
$ micropy stubs add esp32-micropython-1.15.0

MicroPy  Adding esp32-micropython-1.15.0 to stubs

MicroPy  Resolving stub...
MicroPy  esp32-micropython-1.15.0: 100%|██████████████████████████████████████████████████████████████████████████| [13.6k/13.6k @ 70.0MB/s]
MicroPy  Detected Firmware: micropython
MicroPy  Firmware not found locally, attempting to install it...

MicroPy  Resolving stub...
MicroPy  micropython: 100%|████████████████████████████████████████████████████████████████████████████████████████| [43.6k/43.6k @ 346MB/s]
MicroPy  ✔ micropython firmware added!
MicroPy  ✔ esp32-micropython-1.15.0 added!
$ micropy init
? Project Name blink_atom_matrix
? Choose any Templates to Generate done (5 selections)
? Which stubs would you like to use? [esp32-micropython-1.15.0]

MicroPy  Initiating blink_atom_matrix
MicroPy  Stubs: esp32-micropython-1.15.0

MicroPy  Rendering Templates
MicroPy  Populating Stub Info...
MicroPy  Vscode File Generated!
MicroPy  Pylint File Generated!
MicroPy  Vsextensions File Generated!
MicroPy  Pymakr File Generated!
MicroPy  Main File Generated!
MicroPy  Boot File Generated!
MicroPy  Gitignore File Generated!
MicroPy  ✔ Stubs Injected!
MicroPy  ✔ Project Created!

MicroPy  Created blink_atom_matrix at ./.

VSCodeを開くと画像のようなメッセージが出ることがありますが、上書きを選択してください。上書きしない場合は、追加で書き込まれた内容が消えてしまいます。

VSCodeのコードインテリセンスを設定する

プロジェクトをはじめ開いた時はデフォルトのインテリセンスが効いていてコード補完してくれますが、2回目開くと何も出なくなる謎現象が起こります。.vscode/settings.jsonを見るとNoneになっているのでPylanceに変更しておきます。

.vscode/settings.json
--- settings.json       2021-12-11 14:05:06.000000000 +0900
+++ -   2021-12-11 14:10:08.000000000 +0900
@@ -8,7 +8,7 @@
     "python.analysis.typeshedPaths":  [".micropy/BradenM-micropy-stubs-ebac1d3/frozen", ".micropy/BradenM-micropy-stubs-4f5a52a/frozen", ".micropy/BradenM-micropy-stubs-ebac1d3/stubs", ".micropy/blink_atom_matrix"],
 
     "python.linting.pylintEnabled": true,
-    "python.languageServer": "None",
+    "python.languageServer": "Pylance",
     "python.analysis.extraPaths": [
         ".micropy/BradenM-micropy-stubs-ebac1d3/frozen",
         ".micropy/BradenM-micropy-stubs-4f5a52a/frozen",

画像のようにコード補完が効きます。machinemicropython特有のモジュールなのでスタブも有効になっているようですね。

接続設定する

プロジェクトルートにあるpymakr.confaddressを接続先デバイスのパスに変更します。

pymakr.conf
{
    "address": "/dev/cu.usbserial-XXXXXXXXXX",
    "username": "micro",
    "password": "python",
    "sync_folder": "src",
    "open_on_start": false,
    "safe_boot_on_upload": false,
    "py_ignore": [
        "pymakr.conf",
        ".vscode",
        ".gitignore",
        ".git",
        "project.pymakr",
        "env",
        "venv",
        ".python-version",
        ".micropy/",
        "micropy.json"
    ],
    "fast_upload": false
}

Lチカしてみる

最後に動作確認のため、Lチカしてみましょう。使用しているマイコンはATOM Matrixですが、コードは次の通りです。

main.py
import machine
from neopixel import NeoPixel

pin = machine.Pin(27, machine.Pin.OUT)
np = NeoPixel(pin, 25)

def blink(_):
    np[0] = (0, 0, 0) if np[0][2] == 10 else (0, 0, 10)
    np.write()


t0 = machine.Timer(0)
t0.init(period=1000, mode=machine.Timer.PERIODIC, callback=blink)

Discussion