🛠️

VSCodeでRaspberry Pi Picoの開発環境構築

2024/06/25に公開

はじめに

ラズパイ入手後、わりと早い段階でVSCodeを利用していました。
ただし、環境設定が中途半端で実動テストにはThonnyも併用しており、中途半端にGit管理専用ツールになっていました。

最近はラズパイ向けのコードも複雑になり、LCDの操作ライブラリを外部クラスに切り出したり、電圧スピーカーの音階・メロディーの定義を切り出したりとファイルが増える一方…

「デプロイを自動化したい」

そんな思いに駆られていきました。

最高のExtensionを見つけた

https://marketplace.visualstudio.com/items?itemName=paulober.pico-w-go

当初、Micro Pythonに向けたコード補完やフォーマッターの観点で拡張機能を探していましたが、こちらが全部のせ感のあるリッチな内容となっており、早速セットアップしてみました。(なにげにフォーマッターなど当初目的のものは含まれていなかったが…)

vREPLターミナルが利用できる

Thonnyでは馴染のあるラズパイ側ターミナルがVSCodeを通して実行できるようになります。
当然ながらVSCode上での起動も可能になるので、Thonnyに頼らず実機検証をおこなえます。

ラズパイをマウントできる

ラズパイの作業ディレクトリをマウントして、ファイルの編集やコピーができるようになります。
エクスプローラで可視化された一覧は非常に見やすいです!

設定方法

ドキュメントに記載があるので、それに倣って取り込みました。

  • Extension(MicroPico)をインストールする
  • MicroPico > Configure Projectを実行
    • .vscode ディレクトリに設定ファイル( extensions.json , setting.json )が自動生成される
    • .micropico ファイルもルートディレクトリに作成される(ラズパイ開発ルートディレクトリのマーク)

Micro Python向けのLinter等は別のExtensionsを推奨しているのでこちらも合わせて取り込むと良さそうです。(extensions.jsonにかかれているから放って置くと取り込まれます)

  • ms-python.python
  • visualstudioexptteam.vscodeintellicode
  • ms-python.vscode-pylance

初期段階はこんなものでした。
この時点でvREPLやマウント機能は利用できるので、割と満足ですね!

プロジェクトの一括デプロイも設定しよう

ローカルPCで編集したコードをラズパイに一発でアップロードしてくれる機能が備わっています。
ローカルファイルをエクスプローラで右クリックすると、以下のようなメニューが追加されています。

「Upload project to Pico」を使うとプロジェクト内容をまとめてデプロイできます。

ただし、こちらは最初うまく動きませんでした。理由はこちらのIssueでやり取りされていました。
https://github.com/paulober/MicroPico/issues/214

内容として、「VSCodeの拡張機能のふるまいに問題がある」との見解が述べられていました。
わたしの試した感触としては、ラズパイをマウントさせたタイミングで .vscode 下の設定が効かなくなる、のではないかと思っています。VSCodeは直下ディレクトリの設定ファイルを参照しますが、Workspace内にふたつのディレクトリが読み込まれたタイミングで直下の位置が変わっていると予想してます。

対処方法としてworkspaceを設定することで回避できる、とのことで試してみました。

workspaceの設定を晒してみる

Issue内でこちらに投稿されている内容とほぼ同じです。
https://github.com/paulober/MicroPico/issues/214#issuecomment-2146969202

"extensions" , "settings" はConfigure Projectの実行時に生成された内容を一旦そのままコピーしています。それに対して、いくつか便利なオプションがあったので合わせて設定してみました。

{
  "folders": [
    {
      "path": "."
    },
    {
      "name": "Pico (W) Remote Workspace",
      "uri": "pico:"
    }
  ],
  "extensions": {
    "recommendations": [
      "ms-python.python",
      "visualstudioexptteam.vscodeintellicode",
      "ms-python.vscode-pylance",
      "paulober.pico-w-go"
    ]
  },
  "settings": {
    "python.linting.enabled": true, 
    "python.languageServer": "Pylance",
    "python.analysis.typeCheckingMode": "basic",
    "python.analysis.diagnosticSeverityOverrides": {
      "reportMissingModuleSource": "none"
    },
    "micropico.syncFolder": "dist",
    "micropico.openOnStart": true,
    "micropico.gcBeforeUpload": true,
    "micropico.softResetAfterUpload": true,
    "python.analysis.typeshedPaths": [
      "~/.micropico-stubs/included"
    ],
    "python.analysis.extraPaths": [
      "~/.micropico-stubs/included"
    ]
  }
}

micropico.syncFolder

同期するルートディレクトリ変更できます。ラズパイ内のコードをダウンロードする際にも利用されるため、これを設定することで双方向にファイルを同期できるので非常に便利です!

micropico.openOnStart

VSCode起動直後にラズパイをマウントしてくれます。接続がない場合はポップアップでエラーが出ますので、接続前提で作業をする場合は有効にしておくと便利です。

micropico.gcBeforeUpload

アップロード前にラズパイをガーベッジコレクションしてくれます。起動時間が若干遅くなりますが、メモリ起因の不具合がなくなるので、ライブデバッグの精度は非常にあがります。

micropico.softResetAfterUpload

アップロードにラズパイ本体をソフトリセットします。前述のガーベッジコレクションと合わせて使うことで、コード反映直後に 通電開始状態を再現できます。

最後に

Thonnyは特化していて便利なツールではありますが、昨今のVSCodeには数多の拡張機能によるコード補完、自動整形があり、もはや手離れできなくなったCopilotの恩恵も大きいです。
初学者としてPythonにふれるのにVSCodeは非常に心強い味方であり、いち早く導入すべきところかと思いました。
拡張ライブラリの開発とVSCodeの意向は一致しないところもあり、今後もある程度のカスタマイズが求められる予感はあるものの、極力利用方法を見出して、こちらの記事でアウトプットしていければと思います。

Discussion