ChromeBook（Chrome OS）でM5Stack環境（Arduinuo IDE）入れたときの備忘録

- ChromeBoookを購入して、プチ開発環境を入れようとしてハマった体験の備忘録。
[2022/11/29版]
- この記事ではChrome OS V107 Lenovo IdeaPad duetを使用した際の開発環境に関する内容になります。

※たぶんそのうちESPToolのほうがアップデートしてこういう事気にしなくなると思うけどそれまで

前から気になっていたChromeBookが格安で手に入ったので、せっかくだしス○バなどでなんたらチーノとかいうの飲みながらカフェでコーディングなんていう意識高い系やりたくなってちょっとした環境構築をしようとしたときにハマりました。。。。
**（つまり、M5Stackのコンパイルが通らない！！）**

まず調べると、概ねChromeBookのChrome OSでも大概のことができるらしい。
ただし他人事みたくブログ見ているのとは違い、いざ当事者となるともう思ってたのとのギャップがちらほら、、、
（翌々考えたらハードウェアやOSからすると当たり前のことだったわけですが。。。）
[^1]:開発環境の構築
# まずは諸々の開発環境構築
手順は下記を参照
[**Chromebookを快適な開発環境にするためのプチノウハウ群（2022年6月版）**](https://qiita.com/komde/items/25b4c80598d7e2b679f6)
こちらを参考にして、ほとんど欲しい環境が構築できました。

[^2]:M5Stackの開発環境
# さて本題です(M5Stackの開発環境）

M5Stackの開発環境インストールについて
基本の環境構築は上記リンクの通りで進みます。
しかし、いざ私の環境でサンプルコードなどコンパイルしてみると、Arduino IDEのOutputに
```
ImportError: No module named serial
```

と出力されてコンパイルが通りません。

内容としては「Serialのライブラリが読み込めません」ということのよう。
*「あれれ？　先程、　pip apt install pyserial でインストールしたけど？？」*
って思いましたが、見返してみるとPython3にインストールされてしまい、Python3のPathが通らないChrome OS上のVM Linuxではライブラリが読み込めないようです。

*「Python3はpip3って指定するのでは？？」*
と思いましたが、どうも昨年からPython2系のPIPはサポートが終了されて、そもそもPIPが提供されていないとのこと。

[^3]:Python2のPIPをインストール
# Python2系のPIPをインストール
ちなみに、個別にPython2のPIPをインストールすべく
```
$ sudo apt install python-pip
```
としても、
```
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package python-pip is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
  python3-pip

E: Package 'python-pip' has no installation candidate
```
となり、やはりインストールできません。

そこでPython2系のPIPを手動でインストールする方法を探してみたところ、ありました。
[**Python 2.7 に pip をインストールする**](https://qiita.com/sg0hsmt/items/f8fc8d587bff816654a8)

こちらのリンクに従い
```
$ curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
$ python get-pip.py
```
とすると、入りました。

しかしながらサポートが2021で終わってますよ的な警告がでてますが、現時点のArduino IDEでESPToolがPython2でないと動かないので仕方ない。
（いやむしろPySerialのPathが通らないからかな？？）

無事pipが入ったところで、
```
$ pip install pyserial
```
をいれると、しっかりまたPython2.7に関する警告を出しつつ、Python2でインストールできたもよう。
この状態でArduino IDEに戻り、M5Stackのコードコンパイルをすると
![Screenshot 2022-11-29 15.38.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306697/b78f62e2-293e-b2bf-a69f-24e247ea5fac.png)
無事コンパイル完了！
（ついでにM5Atomに書き込みもできました）

# 2024.1.30更新python2が入らない
2024年に入り、手持ちのChromebookをちょっと更新したところ、以前やった方法ではうまくいきませんでした。
そもそもやり方として、Python2.7を入れるというのが先のない方法でしたし、ESP32がPython2が必要というのも間違っていました。
というか、2024年1月時点でPython2.7を入れる事自体トリッキーになってしまったようです。
以前からサポート終わりましたよとアナウンスされていたので仕方ないですね。
ということで、以前少し触れていたPython-Serialが動くようにしてやることで対応する方法の備忘録とします。
（まさに今後の自分のためにも）

## python3でpyserialをインストールします
この問題は、M5Stackの一部でライブラリ読み込み時に必ずPython−Serialを使用するため、これがないと参照できないというエラーが出る問題でした。
なので、その警告通りにPython-serialが使えるようにします。
っで、これそのままできれば簡単なのですが、どうも私の環境では（Lenovo IdeaPad Duet 5 Chromebook）そう簡単にはいきませんでした。

まずは何らかの方法でpython3をインストールします。
これはそもそも入っているようですが、PIPが使えないのでそれを有効にします。
そしてこれ
```
$ sudo pip install pyserial
```
すると、、、
```
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.
    
    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.
    
    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.
    
    See /usr/share/doc/python3.11/README.venv for more information.

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
```
うーむ困りました。
外部管理されているから無理と。　これChromeOS上で動いているLinuxVM環境だからですかね？
ちゃんと理解できてませんが、似たような事象の対処法を以下から参照
[**Raspberry Pi OSでもbookwormでpipインストールエラー「externally-managed-environment」**](https://raspida.com/pip-error-pep668)
こちらを参考に
```
$ pip install --break-system-packages pyserial
```
これでインストールできましたが、ちょっと場合によっては危なっかしいよと注意がでてきました。
```
Defaulting to user installation because normal site-packages is not writeable
Collecting pyserial
  Downloading pyserial-3.5-py2.py3-none-any.whl (90 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 kB 939.9 kB/s eta 0:00:00
Installing collected packages: pyserial
  WARNING: The scripts pyserial-miniterm and pyserial-ports are installed in '/home/ryokutya256/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pyserial-3.5
```
ここはVMなので良いでしょう。

これで無事ArduinoでM5Stackのコンパイルが通りました。