python3仮想環境でarduinoやesp32のシリアル通信をする
従来python環境にはpython2x系とpython3x系がありましたが2024初頭にpython2x系のサポートが終了しpython3では仮想環境を構築する必要があります。
ChromebookでarduinoIDEを使ってarduinoやM5Stack、esp32のプログラム作成や書き込みをするにはpython3の仮想環境を作成してその中にarduinoIDEをインストールしなければなりません。
chromebook(chromeOS)のlinux
chromebookでlinuxを使えるようにするのはとても簡単で歯車マークの設定から詳細設定 ⇒ デベロッパー ⇒ Linux開発環境を「ON」にするだけでOKです。
この場合ホームディレクトリ名がデフォルトではメールアドレスになりますので適当な名称にしておくといいかも知れません。
kazuは「zizo」としています。
Linuxのインストールは数分で終わりlinux(debian)を使えるようになります。
このlinux環境にpython3仮想環境を作成してarduino ideをインストールするという流れになります。
python3 venv のインストール
linuxがインストールされた時点で既にpython3がインストールされています。
しかし、このまま使おうとするとエラーとなりますので、ここで仮想環境を新たに作成することにします。
仮想環境を作成するにはpython3標準ライブラリの「venv:ブイベンブ」を使います。
標準ライブラリ venv はインストールされていませんのでターミナルを起動してインストールします。
sudo apt install python3.11-venv
これで仮想環境を構築する準備が整いました。
仮想環境 作成
venv (Python 3 用) を使うと、異なるプロジェクトにそれぞれ別のパッケージをインストールして管理できます。(仮想環境は) 互いに影響を与えない"仮想的な" Python インストール環境を生成します
ここでは標準の.venvフォルダ(ドットがあります)を作成しました。
python3 -m venv .venv
python3 -m venv .venv
これで.venv フォルダの中に仮想環境が作成されました。
仮想環境をアクティブにする
次に仮想環境をアクティブ化します。
仮想環境を活性化すると、その仮想環境に特有の python と pip の実行ファイルがシェルの PATH 変数に追加されます
”特有” のpythonというのがpython3最大の特徴と言える訳で仮想環境.venv の中にインストールされた実行フアイルやプログラムなどはこの中でのみ動作し、他の仮想環境(例えば.venv2)やlinux本体には影響を与えません。
逆の言い方をすれば「動かない」ということになります。
仮想環境をアクティブにするには次の一文を加えます。
source .venv/bin/activate
仮想環境がアクティブ化されたか確認するためwhich pythonと入力してフルパスが返ってくれば成功です。
arduino ide は仮想環境がアクティブな状態でインストールします。
arduino ide をダウンロード
arduino ide も進化?していてarduino 1x と arduino 2x とあるようです。
当初arduino 2x をダウンロードして実行してみましたがインストールファイルがなく新たに調べるのがメンドウということでarduino 1xをダウンロードしました。
arduino 2x系にはイメージファイルもあるようですので専用ソフトを入れて使えるようにするのもいいかも知れません。
kazuは従来のターミナルからinstall.shファイルを実行しましたので以下の記述内容はarduino 2x系には対応していません。
ただ展開方法が異なるだけで同じでは?と思いますが確認出来ていませんのでご了承お願いします。
arduino ideは公式サイトからArduino IDE 1.8.19 linux64bitを選択しました。
それぞれのPC環境で選択してください。(chromebookを使っています)
arduino ideの解凍とインストール
arduino ideのファイルはホームディレクトリ(Linuxファイル)の「zizo_py」フォルダに入れて解凍・インストールしました。
このあたりはお好みでどうぞ!^^;
cd コマンドでフォルダを選択して解凍します。
tar Jxfv arduino-1.8.19-linux64.tar.xz
解凍出来たらarduino ide をインストールします。
sudo bash install.sh
これでLinuxアプリにお馴染みのarduinoマークが表示されていればインストール成功です。
arduino ide でesp32を使えるようにする
次にarduino統合開発環境(IDE)でesp32を使えるようにします。
M5Stackもesp32に液晶がついたようなものですのでこれからの作業で全てのM5Stackバージョンが使えるようになります。
それはボードの選択肢の中に全て含まれます。
先ずarduinoを起動します。
当初は英語表示ですので左上「file」から下から2番目(環境設定)を選択します。
言語を日本語に設定します。
次に「追加ボードマネージャのURL」欄に次の一文を貼り付け「OK」をクリックし一旦終了の後再起動することで日本語表示になっています。
https://espressif.github.io/arduino-esp32/package_esp32_index.json
「ツール」から「ボードマネージャ」と進み「全て」の欄右に「esp32」と入力します。
「esp32 by Espressif systems」を選択、インストールします。
これでesp32やM5Stackがarduino ide で使えるようになります。
python3環境でシリアル通信
これまでpython3仮想環境を作成し、arduino ideをインストールし、arduinoはもちろん、esp32やM5Stackを使えるようにしてきました。
が…..
このままでは結局どうにもなりません。
それは…
arduinoもesp32もM5Stackもシリアル通信でプログラム(スケッチ)を書き込むようになってるからですね。
しかし…
python3はおろか、venv 仮想環境でシリアル通信なんて!ということでpython3環境でシリアル通信するための参考になる記事が見当たりません。
一番ハマったのがココでした。^^;
ということで最後の関門、python3 venv でシリアル通信できるようにしましょう。
いろいろ試した結果インストール出来たのは…
pip install pyserial
インストールが終わったら一旦再起動します。
venv環境は非アクティブになっていますのでアクティブ化します。
資料によれば「reactivate」でアクティブ化されるそうですがkazuの環境ではこのコマンドは使えませんでした。
ということで,source .venv/bin/activate を使いました。
シリアルポートが使えるようになったか確認してみます。
python -m serial.tools.list_ports -v
「ポートが見つかりました」と表示されました。
python3仮想環境 まとめ
そもそもesp32を使うのにpython3 仮想環境など思いもしなかったのですがセキュリティ強化ということで仕様変更になったのでしょう。
まぁ、やるしかないですよね…
資料に拠ればmacには色々インストールされているそうですがlinuxにはpipなどもインストールする必要があるそうですからコマンド入れてpipが使えなければインストールしてください。
python3 -m pip install –upgrade pip
バージョン確認は
python3 -m pip –version
pyserialが使えない!
ほぼ1日ハマりましたがようやくシリアル通信出来たのに翌日起動するとなんとシリアルを認識してくれません…
いろいろ調べた結果、arduino-linux-setup sh ファイルにそれらしき記述があったので再度pyserialが使える状態のまま再起動することでPCをシャットダウンしても起動してesp32を繋げば今までのようにシリアルポートが開くようになりましたので共有したいと思います。
pyserialをインストール後に再起動し、シリアルポートが使える状態でもう一度再起動すればいいようです。