はじめに
大学の授業でArduino UNO3を使う機会があったのですが、どこを見ても環境を汚す事が前提となっており、環境潔癖症患者の私には到底耐えられませんでした。なのでなんとか試行錯誤して病状を悪化させない環境を作りました。マイコン内で開発する案は考えはしましたが筐体依存性が高くなるためやめました。
最終地点
- ローカル環境を汚さない
- VScodeの強力な支援機能を使ってArduino開発をする(C++)
- pythonとの間でシリアル通信をできるようにする
- sqliteにシリアル値を保存する
環境
windows11 22H2
使うもの
WSL Ubuntu(なんでもいい)
VScode
PlatformIO
python(sqlite)
Dockerで環境構築出来なかった
マイコンとはUSBで接続をして開発すると思うのですが、ハードウェア的通信はDockerコンテナをパススルー出来ないようで、コンテナにこもった時点で不可能なのは確定したようです。
WSL上でUSBを認識させる
WSLでUSB認識をしようで詳しく書きましたが、wsl上ならまだデバイスが認識できたので、WSL-Ubuntu上に環境を確保しようと思います。具体的な手順は記事を見てください。
マイコン環境セットアップ
WSLでVScodeを開きます。
cd /your-project-root/
code .
wsl環境にVScodeの拡張機能をインストールしましょう。
- PlatformIO
- C++
- python
- あとはお好みで
ここでローカル(windows)でVScodeを開いてPlatformIOをインストールして、
画面左側のメニューバーからPlatformIOのアイコンをクリックし、Open>New Project
からプロジェクトを作成しましょう。
Nameは好きに設定し、BoardはArduino UNO
、locationはチェックを外してプロジェクトのディレクトリを選択します。
権限の関係かわかりませんが、僕の環境ではWSL上で開いた場合、ディレクトリが選択できませんでした。
ディレクトリにplatformio.ini
というファイルが生成されたと思うので、今度はWSLでこのディレクトリをVScodeで開くと、拡張機能が有効になります。
Python環境セットアップ
このpython環境もWSL環境にたてないとシリアル通信が出来ないので、仕方なく設定します。ディレクトリはどこにおいても大丈夫です。platformIOのプロジェクトと同じ階層にフォルダを置くと開発するときに便利でいいですよ。
大注意
pythonでシリアル通信をする際にpyserialというライブラリを使うのですが、管理者権限がないと動作しません。プログラムをsudoで走らせると、python環境ごと管理者仕様に変化して、ライブラリが読み込めない場合があります。なので必要ライブラリをインストールする際はsudo pip install -r requirement.txt
と管理者権限のpython環境にライブラリをインストールしましょう。pipがインストールされてない場合はsudo apt install pip
です。そしてプログラムを走らせる場合もsudo python3 <プログラムのパス>
で実行してください。
最後に
プロジェクトのサンプルをおいておきます。以上の手順を踏んだ後であればうまく動くと思います。ありがとうございました。