VSCodeでmicropythonの開発環境を構築
micropythonの開発環境をVSCode上に作る方法を紹介します。micropythonのファームウェアはesp32 v1.15を使用しました。micropythonの開発環境はいくつか選択肢があると思いますが、今回のはVSCodeとPymakrextensionとmicropy-cli
を使用します。
Pymakrが自動起動しないようにする
上のリンク先からPymakrをVSCodeにインストールすると、VSCodeを開くと真っ先に起動して、マイコンに接続しようとします。これはさすがに邪魔すぎるので、グローバル設定を変更します。
コマンドパレットでPymakr>Global settings
を選び、次のように設定を変えます。
--- 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
に変更しておきます。
--- 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",
画像のようにコード補完が効きます。machine
はmicropython
特有のモジュールなのでスタブも有効になっているようですね。
接続設定する
プロジェクトルートにあるpymakr.conf
のaddress
を接続先デバイスのパスに変更します。
{
"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ですが、コードは次の通りです。
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