Big Surにしたら、ArduinoでESP32が動かなくなったので対応した(ValueError: dlsym(RTLD_DEFAULT, kIOMasterPortDefault): symbol not found Failed to execute script esptool)


はじめに

Big Surにしたら、ArduinoでESP32が動かなくなった。ぐぬぬ。

環境

MacOS: Big Sur
Arduino: 1.8.13
ESP32: M5StickC

エラー

こんなエラーがでる。

Traceback (most recent call last):
  File "esptool.py", line 57, in <module>
  File "/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py", line 389, in load_module
  File "serial/tools/list_ports.py", line 29, in <module>
  File "/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py", line 389, in load_module
  File "serial/tools/list_ports_posix.py", line 31, in <module>
  File "/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py", line 389, in load_module
  File "serial/tools/list_ports_osx.py", line 32, in <module>
ValueError: dlsym(RTLD_DEFAULT, kIOMasterPortDefault): symbol not found
Failed to execute script esptool
exit status 255
/Applications/Arduino.app/Contents/Java/arduino-builder returned 255
Error compiling for board M5Stick-C.

調査

ここ2つがこのissueについて議論してるところっぽい。
すでに解決してそう。

MacOS Big Sur dlsym(RTLD_DEFAULT, kIOMasterPortDefault): symbol not found (ESPTOOL-82) · Issue #540 · espressif/esptool

esptool fails on MacOS Big Sur preview: Failure to import serial.tools.list_ports · Issue #509 · pyserial/pyserial

解決策

ここに、それっぽい解決方法が書かれてるのでためしてみる。

ここらのコマンドを実行した。
Pythonを入れ直して、esptool.pyを最新のとってきてるだけかな。

~ ❯❯❯ sudo rm -rf /Library/Developer/CommandLineTools                      ✘ 1 
~ ❯❯❯ sudo xcode-select --install
~/L/A/p/e/tools ❯❯❯ brew install --build-from-source python            
~/L/A/p/e/tools ❯❯❯ cd ~/Library/Arduino15/packages/esp32/tools/esptool_py
~/L/A/p/e/tools ❯❯❯ mv esptool esptool.old                                
~/L/A/p/e/tools ❯❯❯ mv ~/Downloads/esptool.py ./                          
~/L/A/p/e/tools ❯❯❯ chmod + esptool                           

pythonはここにインストールされたっぽい。シンボリックリンクみたいやけど。

~/L/A/p/e/t/e/2.6.1 ❯❯❯ which python3
/usr/local/bin/python3
~/L/A/p/e/t/e/2.6.1 ❯❯❯ python3 --version
Python 3.9.0

esptoolの最初の一行を以下のように変更する。

#!/usr/local/bin/python3                                                        

確認

それでも、なぜかうまくいかなかったりした。
Arduinoを再起動したり、Boardを選び直したりして、コンパイルを何度かしたらいけた。
再現性があるか謎。

いけたときのログはこんな感じ。

Sketch uses 214433 bytes (16%) of program storage space. Maximum is 1310720 bytes.
Global variables use 15436 bytes (4%) of dynamic memory, leaving 312244 bytes for local variables. Maximum is 327680 bytes.

Exampleを書き込んで動くことを確認した。
よかったよかった。

おわりに

Big Surにして、しばらく大丈夫やったけど、トラップがあった。
まあ、解決してそうでよかった。

追記

先人がいた。
python入れ直さなくてよかった疑惑・・・。

macOS Big SurでArduino IDEからESP32の書き込みができない件 - Qiita