Mini-ESP32-WROOM-32 (CH-9102)

コンピュータ、組み込み

Mini-ESP32-WROOM-32 を入手しました。
ESP32-WROOM-32搭載基板の中では小型の部類です。
基本的な入出力と、通信スケッチを記載します。

紹介するもの

ESP32-WROOM-32E

特徴

技適付きESP32モジュールのピンをコンパクトに詰め込んだボードです。

すべてのスルーホールにピンヘッダを取り付けると、ブレッドボードが使用できなくなってしまうので当方では内側のみピンヘッダを取り付けてブレッドボードで使用します。
LOLIN(WEMOS)の他のMINI基板と互換があるためです。

同梱品には、ロングピンのソケット、ピンソケット、ピンヘッダが含まれています。

接続Micro B (ドライバ CH9102)
CPUESP32-WROOM 32E Xtensa 32bit LX6 Dual core 240MHz
GPIO全 32pin
内側2列で使用する場合 16pin
ADC2 (12bit 0 – 4095, 3.3V)
PWM内側2列で使用する場合 13pin
UART1 GPIO1(TX), GPIO3(RX)
I2C1 デフォルトは無いが、任意に設定できます。
SP2 デフォルトで 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用のライブラリのインストールとボードの選択をします。

ボードマネージャのURLhttps://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
検索ESP
ボードライブラリesp32 by Espressif Systems バージョン x.x.x※
選択するボードツール > ボード > esp32 > ESP32 Dev Module
※ x.x.x 動作確認は2.0.3を使用しています

モジュールライブラリ

機能やモジュールを使用しない場合インストールの必要はありません。

機能/モジュールライブラリ名検索確認時のバージョン
SSD1306Adafruit SSD1306 by AdafruitSSD13062.5.1
ST7735Adafruit ST7735 and ST7789
Library by Adafruit
ST77351.9.3
関連
SSD1306
ST7735
Adafruit GFX Library by AdafruitGFX1.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.3VVCC
GNDGND
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.3VVCC
3.3VLED
GNDGND
GPIO5CS
GPIO16RESET
GPIO17AO(DC)
GPIO23SDA
GPIO18SCK
スケッチ
/**********************************************************************
【ライセンスについて】
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のサンプルスケッチが動作しました。

コメント

タイトルとURLをコピーしました