macOS Big SurでESP32のコンパイルが通らなかった件を解決したメモ #m5stack


Atom Liteを触ろうとしてエラーが出たのでメモです。

## 環境

* macOS v11.0.1 Big Sur
* Arduino IDE 1.8.13


## 出たエラー

```
In file included from /Users/n0bisuke/Documents/ds/Arduino/libraries/M5Atom/src/M5Atom.h:52:0,
                 from /Users/n0bisuke/Documents/ds/Arduino/libraries/M5Atom/examples/Basics/LEDSet/LedSet.ino:1:
/Users/n0bisuke/Documents/ds/Arduino/libraries/FastLED/FastLED.h:14:21: note: #pragma message: FastLED version 3.003.003
 #    pragma message "FastLED version 3.003.003"
                     ^
In file included from /Users/n0bisuke/Documents/ds/Arduino/libraries/FastLED/FastLED.h:65:0,
                 from /Users/n0bisuke/Documents/ds/Arduino/libraries/M5Atom/src/M5Atom.h:52,
                 from /Users/n0bisuke/Documents/ds/Arduino/libraries/M5Atom/examples/Basics/LEDSet/LedSet.ino:1:
/Users/n0bisuke/Documents/ds/Arduino/libraries/FastLED/fastspi.h:130:23: note: #pragma message: No hardware SPI pins defined.  All SPI access will default to bitbanged output
 #      pragma message "No hardware SPI pins defined.  All SPI access will default to bitbanged output"
                       ^
In file included from /Users/n0bisuke/Documents/ds/Arduino/libraries/M5Atom/src/M5Atom.h:52:0,
                 from /Users/n0bisuke/Documents/ds/Arduino/libraries/M5Atom/src/M5Atom.cpp:4:
/Users/n0bisuke/Documents/ds/Arduino/libraries/FastLED/FastLED.h:14:21: note: #pragma message: FastLED version 3.003.003
 #    pragma message "FastLED version 3.003.003"
                     ^
In file included from /Users/n0bisuke/Documents/ds/Arduino/libraries/FastLED/FastLED.h:65:0,
                 from /Users/n0bisuke/Documents/ds/Arduino/libraries/M5Atom/src/M5Atom.h:52,
                 from /Users/n0bisuke/Documents/ds/Arduino/libraries/M5Atom/src/M5Atom.cpp:4:
/Users/n0bisuke/Documents/ds/Arduino/libraries/FastLED/fastspi.h:130:23: note: #pragma message: No hardware SPI pins defined.  All SPI access will default to bitbanged output
 #      pragma message "No hardware SPI pins defined.  All SPI access will default to bitbanged output"
                       ^
In file included from /Users/n0bisuke/Documents/ds/Arduino/libraries/M5Atom/src/utility/LED_Display.h:4:0,
                 from /Users/n0bisuke/Documents/ds/Arduino/libraries/M5Atom/src/utility/LED_DisPlay.cpp:1:
/Users/n0bisuke/Documents/ds/Arduino/libraries/FastLED/FastLED.h:14:21: note: #pragma message: FastLED version 3.003.003
 #    pragma message "FastLED version 3.003.003"
                     ^
In file included from /Users/n0bisuke/Documents/ds/Arduino/libraries/FastLED/FastLED.h:65:0,
                 from /Users/n0bisuke/Documents/ds/Arduino/libraries/M5Atom/src/utility/LED_Display.h:4,
                 from /Users/n0bisuke/Documents/ds/Arduino/libraries/M5Atom/src/utility/LED_DisPlay.cpp:1:
/Users/n0bisuke/Documents/ds/Arduino/libraries/FastLED/fastspi.h:130:23: note: #pragma message: No hardware SPI pins defined.  All SPI access will default to bitbanged output
 #      pragma message "No hardware SPI pins defined.  All SPI access will default to bitbanged output"
                       ^
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が255を返しました。
ボードESP32 Pico Kitに対するコンパイル時にエラーが発生しました。
```

最後のこの辺が怪しいですよね

```
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
```

## 先人がいた

調べたら既に解決している人がいて全く同じ形で解決できました。

> * [macOS Big SurでArduino IDEからESP32の書き込みができない件](https://qiita.com/ashe1098/items/585d6474bd5d4833d39d)
> * [こちらのissue](https://github.com/espressif/arduino-esp32/issues/4408#issuecomment-726271514)でも書いています。

## 手順

* 1. plathome.txtの書き換え

> packages/esp32/hardware/esp32/1.x.x フォルダの中にある plathome.txtを開き、 7行目にあるtools.esptool_py.cmd=esptoolとなっている部分を tools.esptool_py.cmd=esptool.pyと書き換えて保存する

> ![スクリーンショット 2020-12-15 3.38.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/cb98c574-c7f3-8289-c2e0-18671e916d78.png "スクリーンショット 2020-12-15 3.38.21.png")

* 2. esptool.pyのコピー

> packages/esp32/hardware/esp32/1.x.x/tools フォルダにある esptool.py を packages/esp32/tools/esptool_py/2.x.x/ フォルダにコピーする。

* 3. esptool.py に実行権限を付与

> コピーした esptool.py に実行権限をつける。 `chmod +x packages/esp32/tools/esptool_py/2.x.x/esptool.py`

![スクリーンショット 2020-12-15 3.38.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/cc7bf19e-a3cc-d7f5-c58a-5947a8f6a33f.png "スクリーンショット 2020-12-15 3.38.46.png")

ここまででできる人は出来るっぽいですが、僕はできなかったので次の手順です。

* 4. serialとpyserialのインストール

`pyserial`だけでも良いのかもですが、ここまでで試した際に`ImportError: No module named serial`とエラーが出たので`serial`のインストールもしました。

```bash
pip3 install serial
pip3 install pyserial
```

* 5. esptool.pyをenv変更

esptool.pyをpython3で実行するようにします。2.x.xフォルダにコピーした、`2.x.x/esptool.py`の方です。

僕の環境の場合`/usr/local/bin/python3`にpython3がインストールされています。

```bash
$ which python3
/usr/local/bin/python3
```

1行目の`#!/usr/bin/env python`を`#!/usr/local/bin/python3`に変更しました。

* 6. Arduino IDEの再起動

最後に再起動したら無事コンパイルが通るようになりました。

## 参考

先人がいて助かりますね、ありがとうございました。

* [Big Surにしたら、ArduinoでESP32が動かなくなったので対応した（ValueError: dlsym(RTLD_DEFAULT, kIOMasterPortDefault): symbol not found Failed to execute script esptool）](https://qiita.com/optimisuke/items/15b042d939ff21c8ceaa)