はじめに
ESP32はWi-FiとBluetoothを標準搭載し、高性能なのに低価格という、電子工作やIoT開発において重宝するマイコンボードの一つです。
最近はArduinoなども無線通信対応し始めていますが機能と比べても低価格で高性能となっています。
ここではM5Stackなどではなく、一般にESP32といわれるマイコンボードを前提にその仕様を整理しておきたいと思います。
無線通信機能
ESP32の最強の強みは、追加パーツなしで無線通信ができることです。
入出力・制御機能(GPIOの機能)
豊富なGPIO(汎用入出力)ピンを持ち、多様なセンサやアクチュエータを扱えます。
アナログ入力 (ADC)
ほぼすべてのGPIOピンでアナログ電圧(0-3.3V)を読み取れます。
(34以降は入力専用)
また、内部プルアップも以下のピンで使用できます。
(2, 4, 5, 13, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33 など)
アナログ出力 (PWM)
Arduinoなどと異なり、基本的にほぼすべてのピンでアナログ出力(PWM)が使えます。
(推奨:2, 4, 5, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, *25, *26, 27, 32, 33)
また、擬似的なPWMではなく、真のアナログ電圧を出力できるピンが2つ(GPIO 25, 26)あります。これにより、スピーカーから音を出したり、波形を生成したりできます。
タッチセンサ
特定のピン(Touch0〜9)は、指で触れたことを検知する「静電容量式タッチスイッチ」として使えます。物理ボタンなしでスイッチが作れます。
(ちょっとこれについては調べている中で情報がありましたが、私自身はまだ使ったことがありませんので詳細は不明)
通信インターフェース
UART、I2C、SPI、などの標準的な通信方式を複数系統持っています(複数のセンサやディスプレイを同時に接続可能)。
UART
一般にシリアル通信といったとき、UARTのことを指す場合があります。
ピンアサイン:TX、RX
また、(すべてではないが)任意のピンをシリアル通信として使える、ソフトウェアシリアルという機能もあります。
I2C
推奨ピン:21(SDA)、22(SCL)
このほかに電源(VCC)とGNDの4本線で通信します。
21、22は多くのでESP32ボードで標準として採用されています。
(この他に以下も使用可能。0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33)
I2Cに対応したセンサーやモニター、マルチプレクサ、AD変換モジュールなどのパーツを使うことができます。
SPI
推奨ピン:12, 13, 14, 18, 19, 23など
これらは基板設計上、高速通信に適した配置になっているため、特別な理由がない限りは推奨ピンの使用が最も安定します。
(この他に以下も使用可能。2, 4, 5, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33)
処理能力・システム機能
EEPROM
設定値などを外付けではないメモリに保存することができます。
実際には従来のArduinoなどで利用できたEEPROMとは異なるらしいですが、EEPROM.hによって同様の機能をエミュレートすることができます。
まとめ
ESP32は無線通信が使えGPIOが多いことから、重宝するのですがどの機能がどのピンで使えるかが毎回迷います。
この記事ではそのための最低限のリファレンスとなるようにGPIOの機能とその他基本的な機能を整理しました。
ただし、多くの互換ボードがでていることからその実装に違いがある場合があります。
また、機能が干渉することがあります。
そのような中で、それぞれ推奨ピンを使うことで機能の干渉は極力抑えることができるはずです。
