Lilygo T8 ESP32-S2 USB-CにMicroPythonをインストールする

## 概要
[Lilygo®Ttgo t8 ESP32-S2 ESP32-S2-WOOR v1.1 wifiワイヤレスモジュールタイプcコネクタ開発ボード](https://a.aliexpress.com/_mMKAToy)は、その他の通りUSB Type-Cコネクタ付きのESP32開発ボードです。マイクロUSBは使いたくないなと探していて見つけました。色々遊んでみる前に、まずはMicroPythonをインストールしてみます。

![Lilygo T8 ESP32-S2 USB-C](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62253/7d65dcde-b44c-ecd4-29df-e5c6402c59a6.jpeg)


## ファームウェアの入手
[MicroPythonのESP32向けチュートリアル](https://docs.micropython.org/en/latest/esp32/tutorial/intro.html) に沿って、まずはファームウェアをダウンロードします。[ダウンロードページ](https://micropython.org/download/#esp32)には様々なチップ向けにコンパイルされたバイナリが用意されています。ESP32チップには[いくつかの種類](https://www.espressif.com/en/products/modules/esp32)がありますが、今回は[ESP32-S2用のバイナリ](https://micropython.org/download/GENERIC_S2/)をダウンロードします。

```shell-session
$ curl -O https://micropython.org/resources/firmware/GENERIC_S2-20220117-v1.18.bin
```


## ファームウェアの書き込み
ファームウェアの書き込みには[esptool.py](https://docs.espressif.com/projects/esptool/en/latest/esp32/)というコマンドが必要です。もしインストールされていなければ、次のコマンドでインストールできます。

```shell-session
$ pip install esptool
```

次に、ボードがUSBモードになっているかUSBコネクタに近い方のディップスイッチを確認します。ディップスイッチの１番と３番のみがONになっていればUSBモードです。

![Lilygo T8 ESP32-S2 USB-C基板](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62253/76ef6379-8eb6-9f3d-d46b-b20c0f572e35.jpeg)
(右下のディップスイッチを確認する)

:::note warn
[Ver1.1の配置](https://ae01.alicdn.com/kf/Hd414cd3e88eb4440af824d2f3d3424748.jpg)です。他のバージョンでは配置が変わっていないかピンマップ等で確認してください。
:::


ディップスイッチを確認したらボードをUSBケーブルで繋ぎ`/dev/`以下で`cu.usbserial-*`を探します。私の環境では、`/dev/cu.usbserial-14340`が見つかりました。このパスを使ってボードに接続します。もし複数見つかった場合は、他に接続されている機器を取り外すなどしてボードのパスを特定します。

ボードにはあらかじめファームウェアが書き込まれているので、MicroPythonファームウェアを書き込む前に削除します。

```shell-session
$ esptool.py --chip esp32s2 --port /dev/cu.usbserial-14340 erase_flash
```

`--port` パラメータで先程見つけたパスを指定します。

最後にダウンロードしてきたファームウェアを書き込みます。

```shell-session
$ esptool.py --chip esp32s2 --port /dev/cu.usbserial-14340 write_flash -z 0x1000 GENERIC_S2-20220117-v1.18.bin
```


## REPLへの接続
書き込んだファームウェアが正常に動作しているか、MicroPythonのREPLに接続してみます。

​**REPLはファームウェアの更新に使用したポートとは別のポートで動いています**​。ポートを切り替えるには、USBモードからOTGモードへ変更します。
ボードを取り外しUSBコネクタに近い方のディップスイッチの今度は２番と４番のみをONに変更します。

OTGモードに変更したらボードをUSBケーブルで繋ぎ`/dev/`以下でパスを探します。私の環境では、`/dev/cu.usbmodem1234561`が見つかりました。このパスを使ってREPLに接続します。

接続には[picocom](https://github.com/npat-efault/picocom)を使います。インストールされていなければ Homebrewでインストールできます。

```shell-session
$ brew install picocom
```

picocom の簡単な使用方法は `picocom <デバイスパス> -b<ボーレート>` です。[チュートリアル](https://docs.micropython.org/en/latest/esp32/tutorial/intro.html#serial-prompt)によるとボーレートは`115200`です。私の環境では次のような出力が得られました。

```shell-session
$ picocom /dev/cu.usbmodem1234561 -b115200
picocom v3.1

port is        : /dev/cu.usbmodem1234561
flowcontrol    : none
baudrate is    : 115200
parity is      : none
databits are   : 8
stopbits are   : 1
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
hangup is      : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv -E
imap is        :
omap is        :
emap is        : crcrlf,delbs,
logfile is     : none
initstring     : none
exit_after is  : not set
exit is        : no

Type [C-a] [C-h] to see available commands
Terminal ready
```

`Terminal ready`が表示された後、エンターキーを押すとREPLの`>>>`が表示されます。

接続を切る場合は、`Ctrl-a` `Ctrl-x`と続けて入力します。

```shell-session
Terminating...
Thanks for using picocom
```

と出れば完了です。

## 参考
- [Lilygo®Ttgo t8 ESP32-S2 ESP32-S2-WOOR v1.1 wifiワイヤレスモジュールタイプcコネクタ開発ボードの詳細](http://www.lilygo.cn/prod_view.aspx?TypeId=50063&Id=1320&FId=t3:50063:3) 
- [esp32チップの種類](https://www.espressif.com/en/products/modules/esp32)