1-3.ESP-WROOM-32(D)

2019年7月20日

ESP-WROOM-32(D)概要

「ESP-WROOM-32」はEspressif Systems社の集積回路ESP32-D0WDQ6を搭載し無線動作に必要なWi-Fiアンテナなども含めて一体で実装したBluetooth及びWi-Fiが利用できるマイクロコントローラです。また、多くのサイトでは「ESP32」と記載されている場合があり、内部コントローラーのみを指す場合は「ESP32」と呼び、アンテナなどを含めて無線モジュール全体を指す場合は「ESP-WROOM-32」となりますので注意下さい。
外観を以下に示します。サイズは約26mm×18mm×3mmで非常に小さいですが、この中にCPU、メモリ、無線アンテナ等が実装されています。

同様の製品群に製品名の最後に「D」が付いた「ESP-WROOM-32D」があり、新たに集積回路ESP32-D0WDを搭載した製品となります。「ESP-WROOM-32D」は性能や機能、端子の使い方などに「ESP-WROOM-32」と差分がありませんので、製作する電子回路やプログラミングなどは同様に開発可能です。
本サイトはArduino互換である「ESP-WROOM-32(D)」を利用していますが、Arduinoと同様に電子工作を行えるため、Arduino環境を用いて電子工作を行っていきます。
また、「ESP-WROOM-32(D)」は安価にCPU性能やメモリ容量などを実現していることから、本学習のスマートリモコンへの適用だけでなく、様々なセンサーをつなげてプログラムすることにより多くのIoT製品への活用することができるため、学習する価値があると考えています。

「ESP-WROOM-32D」だけではパソコンのUSBポートとも接続ができず開発ができません。そのため、Espressif Systems社から提供されている開発ボード「ESP32-DevKitC」(ESP-WROOM-32Dの開発ボード)を利用して電子工作を行っていきます。この開発ボードはマイクロUSBポートがついていますので、パソコンをつないでプログラムを書き込んだり動作をモニタすることができます。このことにより開発することが可能となります。
「ESP32-DevKitC」の外観は以下になります。

入出力端子

今回利用する開発ボードの主な入出力端子については以下のようになっています。

各端子は上図のようにいくつかの用途で利用可能で、端子によってデジタル入出力やアナログ入出力、SPI、I2Cなど様々な仕様で利用可能になっています。各端子の仕様に合致した利用方法を決めセンサーなどを接続することで電子回路を組み立てていきます。
本サイトではデジタル入出力とアナログ入力を利用しますが、主な端子の仕様について以下の通り説明します。

(1) デジタル入出力【GPIO 0〜33, GPI 34〜39端子】

HIGH/LOWを入力もしくは出力として利用するため、デジタル素子と接続するため利用方法になります。HIGHが動作電圧3.3VでLOWがGND(0V)となりますので、その電圧を入出力しています。GPIO 0〜39までがデジタル入出力端子として利用可能ですが以下の注意が必要です。

・ GPI34〜36,39は入力のみとなります。(GPI端子)
・ GPIO1,3はパソコンとのシリアル通信に利用するため利用注意
・ GPIO0,2,5,12,15は起動モード等に利用されるため利用注意
・ GPIO6〜11は内部フラッシュメモリに接続されているため利用不可

注意すれば利用可能な端子もありますが、今は間違わないようにするためIO欄の背景が黄色になっている番号を利用していきます。
(IO欄のグレー背景で注意すれば利用しても良い端子もあります。)

(2) アナログ入力(ADC)

アナログ入力はアナログ信号をデジタル信号に変換するADC(Analog to Digital Converter)回路を利用して扱います。ESP32にADC回路は2つ付いていますがADC2はWi-Fi機能との併用ができない(2019年4月)ため、Analog欄の背景をグレーアウトしています。(問題の把握に時間を要する可能性があるためグレーアウトしました。)
アナログ入力は以下のように電圧の大きさによって値を取得できます。

上図のように0Vから3.3Vまでのアナログ入力値を0から4095(12Bit)の値で取得できます。図2-3-4のように測定時2.2V入力値の場合は2730のデジタル値として取得できます。

(3) アナログ出力(DAC)【GPIO 25/26】

DAC回路によるアナログ出力が用意されています。8bitのDACのため、0〜255で値を指定し出力する事により、端子電圧が0〜3.3Vの電圧で出力されます。プログラムでは「dacWrite(ピン番号, 指定値)」という形で利用可能です。

(4) アナログ出力(PWM)

PWM(Pulse Width Modulation)は時間的にON時間割合を調整することにより、デジタル出力(HIGH/LOW)を擬似的にアナログ出力する端子となります。
デジタル出力は電圧の大きさを変更することができませんので、HIGHとLOWの時間の割合で電圧の大きさを変化させる方法です。以下のように繰り返されるHIGHとLOWの時間割合を3:2に制御することで電圧の大きさを3/5(3.3V÷3/5 = 1.98V)に制御しアナログ的に出力の大きさを調整しています。

利用できる端子は以下となります。
・GPIO 32(A4)
・GPIO 33(A5)
・GPIO 26(A19)
・GPIO 25(A18)
・GPIO 27(A17)
・GPIO 14(A16)
・GPIO 12(A15)
・GPIO 13(A14)
・GPIO 15(A13)
・GPIO 4(A10)
・GPIO 2(A12)
・GPIO 0(A11)
ArduinoやESP8266で利用する「analogWrite()」は利用できませんが、代わりに「ledcWrite()」が用意されておりanalogWriteと同様に利用できます。
(ledcSetup, ledcAttachPinでPin設定を行い、ledcWriteで出力します。)

(5) 電源/GND【5V/3.3V/GND端子】

「ESP32-DevKitC」は電源は3.3V端子と5V端子があり2種類の電圧が利用可能です。GND端子は複数用意されていますので、どこを接続しても全て繋がっていますのでどこを利用しても同じです。また、マイクロUSB端子は5Vですので、開発ボード自体は5V入力ですが「ESP-WROOM-32D」自体は3.3V動作のため開発ボード内部で3.3Vに変換し接続しています。

(6) EN【EN端子】

EN端子は常にHIGH状態(3.3V入力)にしておく必要がありますのでボード内部で3.3Vに配線されています。また、本端子はリセット機能がありGNDに接続されると本モジュールがリセット(再起動)されます。開発ボードにあるENボタンが本端子と配線されており、ボタンを押す事によりGNDに接続されリセット(再起動)されます。

(7) I2C(Inter-Integrated Circuit)

I2Cはフィリップ社によって提唱されたシリアル通信方式です。モーターや温度、湿度センサーなど多くのI2C対応デバイスがあり、それらのデバイスを利用する場合にこのI2C端子を利用します。本サイトではI2Cは利用していません。

(8) SPI(Serial Peripheral Interface)

モトローラ社が提唱した同期式シリアル通信で、I2C同様に基板内の通信などに利用されています。I2Cより高速にデータ通信を行うことができ、主にEEPROMやSDカード、各種素子などの扱うデータ容量が大きいところで利用されています。また、標準で内蔵FLASHとの接続にも利用されています。