プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

ESP32の機能を整理しておく

はじめに

ESP32はWi-FiBluetoothを標準搭載し、高性能なのに低価格という、電子工作やIoT開発において重宝するマイコンボードの一つです。
最近はArduinoなども無線通信対応し始めていますが機能と比べても低価格で高性能となっています。
ここではM5Stackなどではなく、一般にESP32といわれるマイコンボードを前提にその仕様を整理しておきたいと思います。

無線通信機能

ESP32の最強の強みは、追加パーツなしで無線通信ができることです。

Wi-Fi (2.4GHz)

Webサーバー機能: スマホのブラウザからESP32に接続し、LEDを操作したりセンサー値を見たりする。
IoTクライアント: 温度や湿度などのデータをクラウドGoogle Sheets, AWS, LINEなど)に送信する。
ESP-NOW: Wi-Fiルーターを経由せず、ESP32同士で直接・高速に通信する(ラジコンのリモコンなどに最適)。

Bluetooth (Classic & BLE)

Bluetooth Classic: スマホと接続してBluetoothスピーカーを作ったり、シリアル通信を行う。
BLE (Bluetooth Low Energy): 省電力でビーコンを発信したり、フィットネストラッカーのようなセンサーデバイスを作る。

入出力・制御機能(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)

処理能力・システム機能

CPU性能

Arduino Unoと比較すると、デュアルコア CPUを持っていて、Wi-Fi通信を維持しつつ、もう片方のコアで重い計算やセンサ制御を行う、といった並列処理が可能です。

Deep Sleep (ディープスリープ)

消費電力を極限まで下げる(数µA程度)モード。
これを使うと乾電池やニッケル水素電池リチウムイオン電池で数ヶ月〜1年以上動作するセンサ端末が作れます。

EEPROM

設定値などを外付けではないメモリに保存することができます。
実際には従来のArduinoなどで利用できたEEPROMとは異なるらしいですが、EEPROM.hによって同様の機能をエミュレートすることができます。

まとめ

ESP32は無線通信が使えGPIOが多いことから、重宝するのですがどの機能がどのピンで使えるかが毎回迷います。
この記事ではそのための最低限のリファレンスとなるようにGPIOの機能とその他基本的な機能を整理しました。
ただし、多くの互換ボードがでていることからその実装に違いがある場合があります。
また、機能が干渉することがあります。
そのような中で、それぞれ推奨ピンを使うことで機能の干渉は極力抑えることができるはずです。