Mini-ESP32-WROOM-32 を入手しました。
ESP32-WROOM-32搭載基板の中では小型の部類です。
基本的な入出力と、通信スケッチを記載します。
紹介するもの
ESP32-WROOM-32E
特徴
技適付きESP32モジュールのピンをコンパクトに詰め込んだボードです。
すべてのスルーホールにピンヘッダを取り付けると、ブレッドボードが使用できなくなってしまうので当方では内側のみピンヘッダを取り付けてブレッドボードで使用します。
LOLIN(WEMOS)の他のMINI基板と互換があるためです。
同梱品には、ロングピンのソケット、ピンソケット、ピンヘッダが含まれています。
接続 | Micro B (ドライバ CH9102) |
CPU | ESP32-WROOM 32E Xtensa 32bit LX6 Dual core 240MHz |
GPIO | 全 32pin 内側2列で使用する場合 16pin |
ADC | 2 (12bit 0 – 4095, 3.3V) |
PWM | 内側2列で使用する場合 13pin |
UART | 1 GPIO1(TX), GPIO3(RX) |
I2C | 1 デフォルトは無いが、任意に設定できます。 |
SP | 2 デフォルトで VSPIが設定されています。任意に設定できます。 |
そのほか | LED 青 GPIO 32 |
ピン配置
内側のピン配置表を作成しました。
画像内赤枠に対するピン配置表です。
外観
内側のスルーホールにピンヘッダを装着した場合、400穴ブレッドボードでは左右1列分は開いていますが、基板が屋根になってしまい実質使用することができません。
ブレッドボードを2つ合体させて、ブリッジさせて使用します。
画像は400穴ブレッドボードを使用している図です。
LOLIN(WEMOS)のミニサイズの基板と内側のピン配置は互換です。
外側のピンはピンソケットを基板の上面に取り付けることで有効に使用することができそうです。
LOLIN(WEMOS)のC3 Mini V2.1.0とRP2040搭載 XIAO RP2040と大きさを比べてみました。
C3 Mini V2.1.0 と比較しても一回り大きく、XIAO RP2040と比べるとモジュールだけでXIAOと同等の大きさがあります。
単体を写真で見るとコンパクトに見えますが、実物は意外と大きいです。
こちらは同規格、ピン互換のLOLIN Miniシリーズの記事です。
XIAO RP2040の記事です。
使ってみて
ピンがたくさん使用できそうで期待してしまいますが、すべてをピンヘッダにしてしまうとブレッドボードが使用できなくなるので、ピンヘッダ、ピンソケットの組み合わせに悩まされます。
内側のピンは電源、GND、通信線(UART, I2C, SPI)は他のLOLINのMINIボードと同じ配置になっているので、ピンヘッダをつけてブレッドボードを使用するのであれば使いやすいと思います。
外側のピンはADCと静電容量Touchが多く使用できるので用途に応じてピンヘッダ、ピンソケットを装着してください。
ピンヘッダを取り付けてしまえば、普通のESP32-WROOM32使うことができ、技適付きで無線も利用することができます。
上面にはピンにシルクもなく、並列で記載されたピン配置表ではピンの見間違い、差し間違いが起きやすいので注意が必要です。
準備
ライブラリ
ボードライブラリ
Arduino IDEのボードマネージャからESP32用のライブラリのインストールとボードの選択をします。
ボードマネージャのURL | https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json |
検索 | ESP |
ボードライブラリ | esp32 by Espressif Systems バージョン x.x.x※ |
選択するボード | ツール > ボード > esp32 > ESP32 Dev Module |
モジュールライブラリ
機能やモジュールを使用しない場合インストールの必要はありません。
機能/モジュール | ライブラリ名 | 検索 | 確認時のバージョン |
---|---|---|---|
SSD1306 | Adafruit SSD1306 by Adafruit | SSD1306 | 2.5.1 |
ST7735 | Adafruit ST7735 and ST7789 Library by Adafruit | ST7735 | 1.9.3 |
関連 SSD1306 ST7735 | Adafruit GFX Library by Adafruit | GFX | 1.11.3 |
スケッチの書き込み
Arduino IDEのスケッチの書き込みボタンから書き込みを行うことができます。
基本スケッチ
ボタンLED
説明
タクトボタンとLEDの組み合わせの動作をします。
タクトボタンはPULLDOWN設定します。(押下したらHIGH)
タクトボタンを読み取り、押下されるとLEDが点灯します。
ボタンが離されるとLEDは消灯します。
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Mini ESP32-WROOM32 V1.0.0
【スケッチの説明】
プルダウンしたピンの状態がHighならLEDを点灯、LowならLEDを消灯させます。
【ライブラリ】
esp32 > ESP32 Dev Module
【準備】
GPIO16 -> 保護抵抗(約200Ω) -> LED -> GND
3.3V -> タクトボタン -> GPIO17(INPUT)
ワイヤによる配線で行う場合は、保護抵抗の適値を求めて使用してください。
【バージョン情報】
2023/4/23 : 新規
**********************************************************************/
#define LED 16 //LED
#define BUTTON 17 //タクトスイッチ
void setup()
{
pinMode(LED, OUTPUT); //ピン出力設定
pinMode(BUTTON, INPUT_PULLDOWN); //プルダウンで入力
}
void loop()
{
int iStat = digitalRead(BUTTON);
digitalWrite(LED, iStat); //ボタンの状態をLEDに出力
}
結果
ボタンを押下するとLEDが点灯し、離すことでLEDが消灯しました。
PWM
説明
PWMを使ってLEDをゆっくり点灯、ゆっくり消灯します。
同時に設定できるのは6本までです。
7本以上設定してもコンパイルエラーにはなりませんが、7番目からは出力がありません。
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Mini ESP32-WROOM32 V1.0.0
【スケッチの説明】
PWM出力でのフェード点灯(ゆっくり点灯)とフェード消灯(ゆっくり消灯)を行います。
【ライブラリ】
esp32 > ESP32 Dev Module
【準備】
GPIO16(LED) - 保護抵抗(約200Ω) - LED - GND
抵抗値は使用するLEDにより適切な抵抗値を求めてください。
【バージョン情報】
2023/4/27 : 新規
**********************************************************************/
#define PWM 16 //PWM 出力ピン
void setup()
{
pinMode(PWM , OUTPUT);
}
void loop()
{
for(int i = 0; i < 256; i ++)
{
analogWrite(PWM, i);
delay(2);
}
for(int i = 0; i < 256; i ++)
{
analogWrite(PWM, 255 - i);
delay(2);
}
}
結果
LEDがゆっくり点灯し、ゆっくり消灯しました。
DAC, ADC
説明
MINI ESP32-WROOM-32 にはDACとADCがあります。
DACから出力した電圧をADCで読み取りCOMに出力します。
DACからは0~255(約3.3V) まで2msごとに1ずつ上昇し、255(約3.3V)~0までを2msごとに1ずつ下降する設定を繰り返します。
配線
GPIO26(DAC) から GPIO36(ADC)に直接配線します。
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Mini ESP32-WROOM-32
【スケッチの説明】
DACからの電圧をADCに入力します。
読み取った電圧をCOMに出力します。
【ライブラリ】
esp32 > ESP32 Dev Module
【準備】
GPIO26(DAC) <-> GPIO36(ADC)
【バージョン情報】
2023/4/27 : 新規
**********************************************************************/
#define DAC 26
#define ADC 36
void setup()
{
Serial.begin(115200);
pinMode(DAC, OUTPUT);
pinMode(ADC, INPUT);
}
void loop()
{
int iADC = 0;
//アナログ出力を、アナログ入力で読み取ります。
//結果はCOM出力します。
for(int i = 0; i < 256; i ++)
{
dacWrite(DAC, i);
iADC = analogRead(ADC);
Serial.printf("(DAC, ADC) = %d, %d\r\n", i, iADC);
delay(2);
}
for(int i = 0; i < 256; i ++)
{
dacWrite(DAC, 255 - i);
iADC = analogRead(ADC);
Serial.printf("(DAC, ADC) = %d, %d\r\n", 255 - i, iADC);
delay(2);
}
}
結果
設定DACと電圧のADCを読み取った結果をグラフにしました。
電圧の変化は0V -> 3.3Vまでを約500msで上昇し、3.3V -> 0Vまで約500msで下降します。
若干のノイズと、ESPのADC特有のカーブがみられます。
読み取りの電圧は全体では5%程低めに読み取れているようです。
電圧と読み取り値の同期はできていませんが、参考程度に入力電圧を添付します。
UART
説明
UART0(またはCOM)から受け取ったデータを UART1に送信します。
UART1から読み取ったデータを UART0(またはCOM)に送信します。
配線
ESP32-WROOM-32E | 配線 | FT232RL-1 | 配線 | FT232RL-2 |
---|---|---|---|---|
GPIO1(UART TX) | 黒 | RX | ||
GPIO3(UART RX) | 赤 | TX | ||
GPIO16(UART1 TX) | 黄 | 黄 | RX | |
GPIO17(UART1 RX) | 青 | 青 | TX |
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Mini ESP32-WROOM-32
【スケッチの説明】
UART0(またはCOM)から受け取ったデータを UART1に送信します。
UART1から読み取ったデータを UART0(またはCOM)に送信します。
【ライブラリ】
esp32 > ESP32 Dev Module
【準備】
FT232RLを2個使用します。
マイコン基板 <-> FT232RL-1
GPIO1(TX) <-> RX
GPIO3(RX) <-> TX
マイコン基板 <-> FT232RL-2
GPIO16(TX) <-> RX
GPIO17(RX) <-> TX
【バージョン情報】
2023/4/27 : 新規
**********************************************************************/
#define PIN_TX0 1
#define PIN_RX0 3
#define PIN_TX1 16
#define PIN_RX1 17
void setup()
{
// Serial.begin(115200, SERIAL_8N1, PIN_RX0, PIN_TX0); //デフォルトで GPIO1(TX), GPIO3(RX)
Serial.begin(115200); //デフォルトで GPIO1(TX), GPIO3(RX)
Serial1.begin(115200, SERIAL_8N1, PIN_RX1, PIN_TX1);
}
void loop()
{
if(Serial.available() != 0) //UART0(またはCOM)にデータがあれば、読み取った内容をUART1に送信
{
Serial1.write(Serial.read());
}
if(Serial1.available() != 0) //UART1にデータがあれば、読み取った内容をUART0(またはCOM)に送信
{
Serial.write(Serial1.read());
}
}
結果
UART0(COM)側のTeratermとUART1(FT232RL)側のTeratermの2つを起動します。
UART0(COM)側のTeratermから入力した文字は、FT232RL側の画面に表示されます。
FT232RL側のTeratermから入力した文字は、UART0(COM側)の画面に表示されます。
I2C(SSD1306)
説明
I2Cを使ってSSD1306(OLED 0.96inch)モニタのサンプルを動作させます。
デフォルトのI2Cピンがないため、スケッチ中でSDAとSCLの設定をします。
そのほかの図形描画サンプルは、Arduinoサンプルを参照してください。
ファイル(F) > スケッチ例 > Adafruit SSD1306 > ssd1306_128x64_i2c
配線
FT232RLによりスケッチの書き込みを行いますが、電源もFT232RLのVCCから3.3Vを供給します。
Mini ESP32-WROOM-32 | 配線 | SSD1306(0.96inch) |
---|---|---|
3.3V | 赤 | VCC |
GND | 黒 | GND |
GPIO21(SDA) | 黄 | SDA |
GPIO22(SCL) | 青 | SCL |
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Mini-ESP32-WROOM-32 v1.0.0
【スケッチの説明】
SSD1306 OLEDの制御をします。
【ライブラリ】
esp32 > ESP32 Dev Module
Adafruit SSD1306 by Adafruit
Adafruit GFX Library by Adafruit
【準備】
マイコン基板 <-> SSD1306
3V3 <-> VCC
GND <-> GND
GPIO21(SDA) <-> SDA
GPIO22(SCL) <-> SCL
【バージョン情報】
2023/4/26 : 新規
**********************************************************************/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 //解像度 128 x 64 で使用します。
#define SCREEN_HEIGHT 64 //SCREEN_HEIGHTは 32 に設定することができます。
#define OLED_RESET -1 //使用しないので -1を設定する。
#define SCREEN_ADDRESS 0x3C //I2Cアドレスは 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//表示制御にはAdafruit製 SSD1306を使用する。
//デフォルトピンから変更する場合
#define PIN_SDA 21
#define PIN_SCL 22
void setup()
{
// Wire.setPins(PIN_SDA, PIN_SCL); //I2Cピンを変更する場合はコメントを外す
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
for(;;);
}
display.clearDisplay(); //何か表示されている場合に備えて表示クリア
display.setTextSize(2); //フォントサイズは2(番目に小さい)
display.setTextColor(SSD1306_WHITE); //色指定はできないが必要
display.setCursor(20, 0); //テキストの表示開始位置
display.print(F("TAMANEGI")); //表示文字列
display.setCursor(15, 25);
display.print(F("OLED 0.96"));
display.setCursor(25, 45);
display.print(F("SSD1306"));
display.display(); //バッファ転送(表示)
}
void loop()
{
}
結果
SSD1306のサンプルスケッチが動作しました。
SPI(ST7735)
説明
SPIを使ってST7735(LCD 1.8inch)モニタのサンプルを動作させます。
そのほかの図形描画サンプルは、Arduinoサンプルを参照してください。
ファイル(F) > スケッチ例 > Adafruit ST7735 and ST7789 Library > graphicstest
配線
Mini ESP32-WROOM-32 | 配線 | ST7735(1.8inch) |
---|---|---|
3.3V | 赤 | VCC |
3.3V | 赤 | LED |
GND | 黒 | GND |
GPIO5 | 黄 | CS |
GPIO16 | 青 | RESET |
GPIO17 | 橙 | AO(DC) |
GPIO23 | 緑 | SDA |
GPIO18 | 紫 | SCK |
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Mini ESP32-WROOM-32
【スケッチの説明】
ST7735 LCDの表示制御します。
【ライブラリ】
esp32 > ESP32 Dev Module
Adafruit ST7735 and ST7789 Library
Adafruit GFX Library
【準備】
マイコン基板 <-> ST7735
3V3 <-> VCC
GND <-> GND
GPIO5 <-> CS
GPIO16 <-> Reset
GPIO17 <-> AO
GPIO23 <-> SDA
GPIO18 <-> SCK
【バージョン情報】
2023/4/26 : 新規
**********************************************************************/
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#define TFT_CS 5
#define TFT_RST 16
#define TFT_DC 17
#define TFT_MOSI 23
#define TFT_SCK 18
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
//S/W SPIはこちら。遅いが任意のピンを使用できる。
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCK, TFT_RST);
void setup(void)
{
// SPI.begin(TFT_SCK, -1, TFT_MOSI, TFT_CS);
tft.initR(INITR_BLACKTAB); //Init ST7735S初期化
tft.fillScreen(ST77XX_BLACK); //背景の塗りつぶし
//テキスト表示
tft.setRotation(3); //画面回転
tft.setTextSize(3); //サイズ
tft.setCursor(0, 10); //カーソル位置
tft.setTextColor(ST77XX_GREEN); //緑
tft.printf("TAMANEGI\n");
tft.setCursor(0, 50); //カーソル位置
tft.setTextSize(2); //サイズ
tft.setTextColor(ST77XX_RED); //赤
tft.printf("1.8inch LCD\n");
tft.setTextColor(ST77XX_YELLOW); //黄
tft.printf("Res=128 x 160\n");
tft.setTextColor(ST77XX_BLUE); //青
tft.printf("ST7735\n");
}
void loop()
{
}
結果
ST7735のサンプルスケッチが動作しました。
コメント