Arduino環境でESP32-WROOM-32E モジュールを使う

コンピュータ、組み込み

ESP32-WROOM の小型基板を入手しました。
とにかく小さい基板で技適付きESP32-WROOMを使うことができます。
スケッチの書き込み方法と、簡単な通信スケッチを記載します。

紹介するもの

ESP32-WROOM-32E

特徴
接続Type C (USBシリアル無し) [2023/4/25] 修正 コネクタはありません
CPUESP32-WROOM 32E Xtensa 32bit LX6 Dual core 240MHz
GPIO8pin
(ピンは多く出ていますが、5本は未接続のようです)
ADC2 (12bit 0 – 4095, 3.3V)
PWM8pin
UART1 GPIO1(TX), GPIO3(RX)
I2C1 デフォルトは無いが、任意に設定可
SPI1
そのほかLED 青 GPIO 32
ピン配置

外観

ピンヘッダ自体はそれなりの本数が出ていますが、5本はどことも繋がっていないようです。

400穴ブレッドボードでは、左右2列と1列使えます。
ブレッドボードの画像の右側(ピンヘッダの樹脂が黒い方)は、基板が屋根になってしまうので実質左右1列ずつです。

ESP32-WROOMモジュールを小型のブレークアウト基板に実装することで、近いサイズで多くのピンを利用する基板を紹介しています。

使ってみて

Arduino環境ではUSBを仮想COMとしてスケッチを書きこむことが多いと思います。
M5STAMP PICO MATEや、ESP32-CAMのように基板にUSBコネクタがないものは、直接UARTから書き込みを行うので多少経験値が必要です。

直接UARTから書き込みを行う、アダプタソケットの記事

この基板はAli Expressで見かけたもので小さいことが理由で買ってしまいましたが、3Dプリンタ部品用とあったので、不要なピンは使用できないようにしているのかもしれません。

使用できないピンが多いのが残念ですが小型ではあります。
M5STAMP PICO MATEのほうがさらに小型ですが、価格はこのモジュールのほうが安価です。
入手性が良くないのが残念です。

準備

ライブラリ

ボードライブラリ

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

スケッチの書き込み

スケッチの書き込みは、SocのUARTに直接配線を行います。
FT232の電源供給電圧は3.3Vをショート端子により選択します。
GPIO1(UART TX)とFT232RLのRX、 GPIO3(UART RX)にFT232RLのTXを接続します。

ArduinoIDEより書き込みボタンを押下してスケッチの書き込みを行います。
スケッチの書き込みが終了したら電源の供給を停止し、GPIO0とGNDの接続を解放し手から電源を投入することでスケッチが動作します。

基本スケッチ

UART

説明

USBが無いので、SocのTX(GPIO1)とRX(GPIO3)をUSBシリアルモジュールを使用してオウム返しします。

配線
ESP32-WROOM-32E配線FT232RL
GPIO1(UART TX)RX
GPIO3(UART RX)TX
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
ESP32-S3-DevkitC-1 で利用できます。

【スケッチの説明】
 UARTの読み取り結果をそのままUARTにオウム返しします。

【ライブラリ】
esp32 > ESP32S3 Dev Module

【準備】
M5STAMPS3 <-> FT232RL
 GPIO43(TX) <-> RX
 GPIO44(RX) <-> TX

【補足】
書き込みはリセットボタンを押しながら電源を投入するか、GPIO0とGNDをショートさせた状態で電源を投入し、ダウンロードモードで起動します。

【バージョン情報】
2023/2/19 : 新規
**********************************************************************/

void setup()
{
  Serial.begin(115200);                                   //GPIO 43(TX), 44(RX)に入出力されます
}

void loop()
{
  if(Serial.available() != 0)          //UART1にデータがあれば、読み取った内容をUART0に送信
  {
      Serial.write(Serial.read());
  }
}
結果

結果はTeratermを起動して確認します。
入力した文字はそのままオウム返しされるので同じ文字は2文字ずつ表示されます。

I2C(SSD1306)

説明

I2Cを使ってSSD1306(OLED 0.96inch)モニタのサンプルを動作させます。
デフォルトのI2Cピンがないため、スケッチ中でSDAとSCLの設定をします。

そのほかの図形描画サンプルは、Arduinoサンプルを参照してください。
ファイル(F) > スケッチ例 > Adafruit SSD1306 > ssd1306_128x64_i2c

配線

FT232RLによりスケッチの書き込みを行いますが、電源もFT232RLのVCCから3.3Vを供給します。

ESP32-WROOM-32E配線SSD1306(0.96inch)配線FT232RL
3.3VVCCVCC
GNDGNDGND
GPIO18(SCL)SCL
GPIO23(SDA)SDA
GPIO1(TX)黄破線黄破線RX
GPIO3(RX)緑破線緑破線TX
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
ESP32-WROOM-32E

【スケッチの説明】
SSD1306 OLEDの制御をします。

【ライブラリ】
esp32 > ESP32 Dev Module
Adafruit SSD1306 by Adafruit
Adafruit GFX Library by Adafruit

【準備】
マイコン基板 <-> SSD1306
3V3          <-> VCC
GND          <-> GND
GPIO23(SDA)  <-> SDA
GPIO18(SCL)  <-> SCL

【補足】
書き込みはGPIO0とGNDをショートさせた状態で電源を投入し、スケッチの書き込みを行う。

【バージョン情報】
2023/3/13 : 新規
**********************************************************************/

#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 23
#define PIN_SCL 18                                   
void setup()
{
  Wire.setPins(PIN_SDA, PIN_SCL);

  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)モニタのサンプルを動作させます。
モジュールのI/Oピンが足りないので、GPIO0をスケッチの書き込み用とResetと共用します。

スケッチの書き込み時にはGPIO0とGNDをショートさせます。
一度電源を遮断し、GPIO0をST7735のResetに接続して電源を投入します。

そのほかの図形描画サンプルは、Arduinoサンプルを参照してください。
ファイル(F) > スケッチ例 > Adafruit ST7735 and ST7789 Library > graphicstest

配線

FT232RLによりスケッチの書き込みを行いますが、電源もFT232RLのVCCから3.3Vを供給します。
スケッチ書き込み時にはGPIO0とGNDをショートさせますが、書き込み後はGND0とST7735のRESETを接続してから電源を投入します。

ESP32-WROOM-32E配線ST7735(1.8inch)配線FT232RL
3.3VVCCVCC
3.3VLED
GNDGNDGND
GPIO5CS
GPIO0RESET
GPIO4AO(DC)
GPIO23SDA
GPIO18SCK
GPIO1(TX)黄破線黄破線RX
GPIO3(RX)緑破線緑破線TX
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
ESP32-WROOM 32E

【スケッチの説明】
ST7735 LCDの表示制御します。

【ライブラリ】
esp32 > ESP32 Dev Module
Adafruit ST7735 and ST7789 Library
Adafruit GFX Library

【準備】
マイコン基板 <-> ST7735
3V3            <-> VCC
GND            <-> GND
GPIO5          <-> CS
GPIO0          <-> Reset
GPIO4          <-> AO
GPIO23         <-> SDA
GPIO18         <-> SCK

【補足】
ピン数が足りないので、GPIO0にResetを割り当てる。
書き込み時には GPIO0 とGNDをショートさせてから電源を投入し、スケッチの書き込みを行う。
実働時には GPIO0 と ST7735の Resetを接続してから電源を投入する。

【バージョン情報】
2023/3/12 : 新規
**********************************************************************/

#include <Adafruit_GFX.h> 
#include <Adafruit_ST7735.h>
#include <SPI.h>

#define TFT_CS    5
#define TFT_RST   0
#define TFT_DC    4
#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をコピーしました