MicroSDスロットにESP32を接続するモジュール開通

# 0.はじめに
ニッチ過ぎるモジュールの使い方覚書。
たぶん1年くらい寝かしていたSipeedのESP-32TFというモジュール。技適認証ついてることに今更気付いたので動かしてみたら意外とあっさり動いたので覚書。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">このsipeedのESP32ボード、積んでたんだけど、技適通ってるじゃないかっっっ!!! <a href="https://t.co/1jFD8LYXCi">pic.twitter.com/1jFD8LYXCi</a></p>&mdash; AIRPOCKET＠rastaman vibration (@AirpocketRobot) <a href="https://twitter.com/AirpocketRobot/status/1360539395300839426?ref_src=twsrc%5Etfw">February 13, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 1.使ったもの
今回使ったのは次のアイテムたち。
# 1-1.Sipeed ESP32-TF
調べると、2019年の10月に[aliexpressでMaix Bitととセット購入してました。](https://ja.aliexpress.com/item/4000157178963.html?spm=a2g0s.9042311.0.0.27424c4dIgxCQf)
残念ながら、扱っているショップは見つかりませんでした。

# 1-2.Sipeed Maix Bit

![maix-bit-aiot-developer-kit-7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/ba61c73c-477f-aa47-532f-cb57ec5edece.jpeg)

SoCにK210を乗せたエッジAIボード。カメラ、マイク、LCD、GPIOがついてるので、使い勝手の良い開発ボードです。ESP32の付属していないものであれば、[SWITCH SCIENCE](https://www.switch-science.com/catalog/6931/)さんなどで購入できます。
ちなみに[画像検査機](https://qiita.com/airpocket/items/c5921195384d3f16d357)や、[音源の可視化装置](https://qiita.com/airpocket/items/7d91976fb3732625bf85)に返信します。
載ってるSoCが同じなので、みんな大好き[M5StickV](https://www.switch-science.com/catalog/6651/)にできることなら大体できます。

# 1-3.M5StickV（旧版）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/41f58c0a-440f-686b-7683-7e982ae81255.png)

Maix Bitと同じくK210搭載のM5StickVでも同様の確認をしてみました。
M5StickVにはマイクが動かない旧品と、マイクが動く現行品があります。現行品では確認できていないのですが、fpioでpin設定するのでたぶんおそらく動きます。

# 1-4.M5UnitV
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/d9c12882-8dfb-beba-eed0-e29627ae79da.png)
M5StickVのlcd、バッテリー無し版です。
こちらでも動作すると思うので、確認でき次第報告予定。

# 1-5.FT232RL USBシリアル変換モジュール
![ft232rl-usb-to-ttl-5v-3-3v-convertor-500x500.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/451a6a82-9f34-7d6d-aabc-e468e95c5fb5.jpeg)
ESP32-TFモジュールにファームウェアを書き込むために使用します。
私は[aliexpressで激安品](https://ja.aliexpress.com/item/32896631192.html?spm=a2g0s.9042311.0.0.27424c4dVCR01m)を買いましたが、アマゾンでも国内在庫品がまあまあ安く買えます。

# 2.ファームの書き換え
ESP32 TF側には特にプログラム等を書き込む必要はないのですが、ファームのバージョンが古いと怒られたので、最新版を探して書き込みました。ファームの書き換えは、Win10から行いました。
# 2-1.FT232のドライバインストール
すでにarduinoやM5Stackなどを使用しているかたは不要だと思いますが、FT232がうまく動かない場合は[こちらのサイト](https://ftdichip.com/drivers/vcp-drivers/)からドライバをダウンロードしてインストールしましょう。

# 2-2.ESP32-TFの最新ファームウェア
最新ファームウェアは[こちらにあります](https://github.com/sipeed/Maixduino_esp32_fimware/releases)。
また、linuxからesptoolを使ったインストール方法も紹介されていますが、消去はできたもののなぜか書き込みができなかったので2-4項のESP32 Download toolを使って書き込みました。

# 2-3.PCとの接続

FT232はジャンパピンで3.3Vと5Vを切り替えられますので3.3V側にしておきます。
FT232とESP32-TFの接続は下表のとおり。
| FT232 | ESP32-TF  |
| ---- | ---- |
|  RX  |  U0TX  |
|  TX  |  U0RX  |
|VCC|3V3|
|GND|GND|
また、ESP32-TFのIO0とGNDを短絡しておきます。
![DSC_2695.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/195bea28-a1d3-1156-34f5-38e27e15238d.jpeg)
今回はバナナクリップを使って結構適当につないでいますがなんとか通信できました。
[ツイッタで教えてもらったこういうの](https://akizukidenshi.com/catalog/g/gC-09830/)使った方がいいですね。注文しました。

# 2-4.ESP32 Download toolによる書き込み
書き込みには、ESP32 Download toolを使用しました。[こちらのサイト](https://www.espressif.com/en/support/download/other-tools)からダウンロードできます。今回使用したツールのバージョンは3.8.5でした。
ダウンロードした圧縮ファイルの中に実行ファイルがあるため立ち上げます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/6a970700-1053-9e44-a458-5319f8d29965.png)
動作モードを尋ねられるため、Developer Modeを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/a0aafb28-206f-93fc-fafa-8fc2c61a5e48.png)
続いてESP32 DownloadToolを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/d6f209c9-9c15-7c3a-482c-b54c683e1866.png)
「...」から先ほどダウンロードしたファームウェアを選択。右の空白セルのインストール先のアドレスに「0x0000」を入力。
右下のCOMにはFT232を接続したCOMを選択、BAUDは115200を選択して、STARTで書き込み開始します。
書き込みの進捗はCUIに%表示されますので、見守りましょう。

# 3.動作テスト
ESP32-TFをMaix BitのSDカードスロットに差し込み、PCと接続します。


以下のテストコードで動作確認を行いました。

```python
import network
from Maix import GPIO
from fpioa_manager import *

#iomap at Maix Bit
fm.register(29,fm.fpioa.GPIOHS10)#cs
fm.register(8,fm.fpioa.GPIOHS12)#rdy (unused, but required)
fm.register(28,fm.fpioa.GPIOHS13)#mosi
fm.register(26,fm.fpioa.GPIOHS14)#miso
fm.register(27,fm.fpioa.GPIOHS15)#sclk

nic = network.ESP32_SPI(cs=fm.fpioa.GPIOHS10,rst=-1,rdy=fm.fpioa.GPIOHS12,
mosi=fm.fpioa.GPIOHS13,miso=fm.fpioa.GPIOHS14,sclk=fm.fpioa.GPIOHS15)

nic.connect("<SSID>", "<password>")
print("ifconfig %s" % ' '.join(nic.ifconfig()))

import usocket as socket
addr = socket.getaddrinfo('micropython.org', 80)[0][-1]
s = socket.socket()
s.connect(addr)
s.send(b'GET / HTTP/1.1\r\nHost: micropython.org\r\n\r\n')
data = s.recv(1000)
s.close()

print(data)
```
[こちらのサイト](https://en.bbs.sipeed.com/t/topic/1827/8)のコピーです。
実行結果は以下ツイートの通りで、ルーターから見える様になりました。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">TFスロットに挿したESP32モジュールとSPI通信してWi-Fi接続成功。K210のfpioってpi picoのpioと同種の機能という理解でいいのかな、よくわからんけど。 <a href="https://t.co/vvGwsmM9BB">pic.twitter.com/vvGwsmM9BB</a></p>&mdash; AIRPOCKET＠rastaman vibration (@AirpocketRobot) <a href="https://twitter.com/AirpocketRobot/status/1360945901993299969?ref_src=twsrc%5Etfw">February 14, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


[オフィシャル](https://maixpy.sipeed.com/maixpy/en/course/network/network_config.html)にもデモコードが載ってますが、そのままでは動かなかったorまだ試してないです。

もう少し使い方を勉強するつもりですが、今回はここまでです。
このモジュールを持ってるレアな同志の方がいらっしゃったら、ぜひ試行結果を共有して下さいませ。