ESP32の味見

# ESP32の味見

想定難易度はちょっと電子工作に興味のある情報科の学生レベルです

プロの人からマサカリが飛んでくるかもしれませんがお手柔らかにお願いします

また詳細は割愛することが多いのでくわしくは参考サイトをみてください

### まずはじめに: ESP32とは
非常に安価にもかかわらずWi-Fi/Bluetoothが利用できるマイコンボード(クロック周波数も最大240MHzと高速)として有名

ESP32-WROOM-32Eの場合:フラッシュメモリーは4MB, SRAMは520KB, コアはXtensa LX6 x2 32bit

姉妹ChipにESP-02(ESP8832EX)がある

またWROOM/WROVER+(後ろに英数字がついているモデル)といった細かいバリエーションがあり搭載メモリー量や価格に若干の差異はあるが基本は同じである (なかにはRISC-Vのものもあるようだ)

まとめているページがあった

[ESP32シリーズまとめ](https://lang-ship.com/blog/work/esp32-series/)

[ESP32シリーズ(無印, S2, S3, C3, …)比較 2022年1月](https://lang-ship.com/blog/work/esp32-2022-01/)


### 機材

おすすめのボードは以下

ESP32単体を購入してもよいがUSBの5Vから3.3VへのレギュレーターとBoot向けのスイッチが搭載されているためすぐに開発が可能になる (単体はやや難易度が高く一敗)

[ESP32-WROOM-32Eマイコンボード](https://akizukidenshi.com/catalog/g/g116108/)

シリアル変換は以下がおすすめ

もっと安価なものでも構わないが高速かつ小型でピンも余計なものがついていないため今回の開発にぴったり

接続はmicro-B

[FT234X 超小型USBシリアル変換モジュール](https://akizukidenshi.com/catalog/g/g108461/)

4Pがまとまったメス-メスのケーブルも買っておく

[コネクター付コード 4P 赤黒黄緑](https://akizukidenshi.com/catalog/g/g115385/)

こちらでもいい

[ブレッドボード・ジャンパー延長ワイヤ(メス-メス) 15cm青](https://akizukidenshi.com/catalog/g/g103476/)

接続は以下の通り

5VとGNDはケーブルをねじって接続する必要がある

|ESP32-dev|USB-Serial|
|---|---|
|GND|GND|
|5V|5V|
|RX|TxD|
|TX|RxD|

買って帰ったら早めに半田付けすること (情熱が枯れる前に)

### Platform IOについて

Platform IO拡張機能をインストールしたら左のアイコンからHomeへ飛び, New projectでEspressif ESP32 Dev Moduleをボードに指定してArdiunoを選択する (今回のケースはこの設定で行うがボードややりたいことによっては変えるべし)

Buildと書き込み, シリアルモニターは下部のステータスバーにある

なおこのプロジェクトはVSCodeが開いているフォルダーではなく別の場所に保存されているようである

コードは参考サイトの簡単なシリアル通信のものを使った

参考

[Get started with Arduino and ESP32-DevKitC: debugging and unit testing](https://docs.platformio.org/en/latest/tutorials/espressif32/arduino_debugging_unit_testing.html#tutorial-espressif32-arduino-debugging-unit-testing)

[ESP32でのPlatformIO IDEの使い方と環境構築](https://qiita.com/nextfp/items/f54b216212f08280d4e0)

### 書き込み

Bootを押しながらENをプッシュしてリセットすると書き込みモードに移行する

Bootを押さずにENをプッシュすると普通に起動する

シーケンス図
|Boot|EN|
|---|---|
|1|1|
|0|1|
|0|0|
|0|1|
|1|1|

通信速度をあげることもできる

platformio.ini
```
monitor_speed = 115200
upload_speed = 512000
```

自分の環境ではボーレート38400でも安定して通信できた (115200は配線が悪いのかノイズが多いのかわからないがだめだった)

追記

再度試したところ512000でも動作しました

参考

[ESP32の書き込みで嵌った話](https://qiita.com/hayate2718/items/a35e16f4833218ab45c7)

[ESP32のプログラム書込みを安定させる](https://qiita.com/h_nari/items/b971e615688d69bb3564)

### Advanced: Nostr client

Segmentさんの記事を参考にしてみる

[Arduino(ESP32)から次世代SNSプロトコル Nostrにアクセスしてみる](https://qiita.com/gpsnmeajp/items/2b70d55979b645559a60)

ライブラリーはPlatform IOのPIO Home > Librariesから追加できる

途中で追加するプロジェクトを聞かれるので現在製作中のプロジェクトを選択する

[Reference > Libraries > Nostr](https://www.arduino.cc/reference/en/libraries/nostr/)

[ArduinoJson](https://arduinojson.org/)

5GHzのWi-Fiではうまくいかない(非対応)ので2.4GHzのものを利用する

コードはほぼ同じものをつかったので割愛

### Future: debug(まだ未検証)

FT232HLをつかえばOpenOCDをつかったdebugが出来るらしい

[FT232HL ハイスピードUSBシリアル変換モジュール](https://akizukidenshi.com/catalog/g/g106503/)

[ FT232Hの方が最強かもしれない(2) – シリアルデバッグ編](https://blueeyes.sakura.ne.jp/2018/03/30/1122/)

[ESP32 を FT232H でつないで OpenOCD+GDBでデバッグ](https://qiita.com/rukihena/items/f5585436c16f74d0f01d)

ただの/dev/ttyUSB0としてではなくBit-bangをつかうにはmodprobeでftdi_sioを消して専用のdriverをインストールする必要があるかもしれない (あるいは/etc/modprobe.d/でblacklistに登録する必要があるかもしれない)

[Installation Guides](https://ftdichip.com/document/installation-guides/)

[D2XX Drivers](https://ftdichip.com/drivers/d2xx-drivers/)