手持ちのMacBookを,出来心でCatalina→Big Surにアップグレード.
当然何も起こらないはずがなく…
ESP32 Dev moduleでのコンパイルができない
コンパイルしようとすると
ValueError: dlsym(RTLD_DEFAULT, kIOMasterPortDefault): symbol not found
Failed to execute script esptool
exit status 255
などというエラーが発生.
arduino-esp32 projects fail on macOS 11 "Big Sur" に同様のissueが上がっている.
どうやらBig Surの仕様のせいらしい.そりゃまだ対応されてないわな…(なぜアップグレードしたんだ俺)
対処手順
M1 MacBook Air 2020 でArduino IDEを動かしてみました を見て解決を試みる.
行った手順を以下に引用.
- Arduino IDEの環境設定から、/Users/...../preferences.txt のリンクをクリックして、フォルダを開く。
- packages/esp32/hardware/esp32/1.x.x フォルダの中にある plathome.txtを開き、
7行目にあるtools.esptool_py.cmd=esptool
となっている部分を
tools.esptool_py.cmd=esptool.py
と書き換えて保存する。 - packages/esp32/hardware/esp32/1.x.x/tools フォルダにある esptool.py を packages/esp32/tools/esptool_py/2.x.x/ フォルダにコピーする。
- 以下のコマンドで、コピーした esptool.py に実行権限をつける。
chmod +x packages/esp32/tools/esptool_py/2.x.x/esptool.py
解決…できない!
解決できた人はそれでよい.帰りなさい.
私の場合,これが発生した.
ImportError: No module named serial exit status 1 Error compiling for board ESP32 Dev Module.
あー,pyserialが無いのね.
おっけーおっけー,コマンドからこれでインストールすれば解決だ
$ pip install pyserial
pyserialが読み込まれない
読み込んでもらえた人はそれでよい.お帰りなさい.
確かにpyserialはインストールできたはずなのだが,esptoolちゃんは毅然としてImportErrorを履き続ける.ツンデレかな?
更に調べていったら以下のようなissueに辿り着いた.
esptool fails on MacOS Big Sur preview: Failure to import serial.tools.list_ports #509
このコメントを参考に私が行った手順は以下の通り.
- コマンドから
$ /usr/local/bin/pip3 install pyserial
を実行し,大元のPythonにpyserialをインストール - 先程コピーした esptool.py をテキストエディタで開き,1行目の
#!/usr/bin/env python
を#!/usr/local/bin/python3
に書き換える
これで無事に書き込みできました!やったね!
おわりに
それにしても,なぜ単純にpipでpyserialをインストールしても,esptoolは読み込んでくれなかったのか?
おそらくpyenvやらpipenvやらで,普段のPython環境を構築してしまっていたのが原因かと思われる.
まぁこんな面倒なことをせずとも,いずれesptoolもBig Surに対応してくれるだろうけど,急ぎでESP32を書き込みたい!って人の参考になったなら幸いです.