【Arduino】ESP32 C3 SuperMiniを使う

it

激安マイコン基板ESP32 C3 Super Miniを使ってみました。
いくつかの種類があり、それぞれの違いを探しながら基板を試してみます。

記事の概要

ESP32-C3が搭載された小型のマイコン基板Super Miniについて複数の基板を試した内容です。
基板ごとの違いを主に、使用した経験での信号上の注意点なども記載しました。

ESP32C3 Super Mini

簡単紹介

小型で激安マイコン基板のSuper MiniにESP32-C3が搭載されたモデルがあります。
ここではESP32-C3についての説明は省略して基板の個体差について紹介します。
※すべて技適が無いため、当サイトでは無線機能は使用しません。

※表記
品名が定かではないので、当記事では以下の名称にします。

画像左から
ESP32 C3 Super Mini(K1)
ESP32 C3 Super Mini(K2)
ESP32 C3 Super Mini(K3)
ESP32 C3 PLUS(R1)
ESP32-C3 PRO MINI(B1)

◆入手

Ali Expressではすべて\350~\500/個(送料込み)が目安で、まとめ買いで送料の節約も期待できます。
AmazonでもESP32 C3 Super Mini(K2)は扱っているようです。

◆関連記事

RP2040搭載の小型で安価なRP2040-ZERO互換基板の記事

ESP32C3搭載、技適マーク付きで無線が使える小型基板 XIAO ESP32C3の記事

ピン配置

ESP32 C3 Super Mini(K1)

ESP32 C3 Super Mini(K2)


ESP32 C3 Super Mini(K3)

ESP32 C3 PLUS(R1)

ESP32-C3 PRO MINI(B1)

外観

◆ESP32 C3 Super Mini(K1)

◆ESP32 C3 Super Mini(K2)

◆ESP32 C3 Super Mini(K3)

◆ESP32-C3 PLUS(R1)

◆ESP32-C3 PRO MINI(B1)

使ってみた

◆開発

Arduino環境で開発を行います。

これまでに紹介したESP32C3搭載基板XIAO ESP32C3と同じ開発ができます。
使用するボードライブラリに「ESP32C3 Dev Module」を使用するため、GPIOのマクロ定義にD(x)が使えません。

◆差異比較(ESP32C3 SuperMini)

外観上の色、サイズ、厚さ、無線関係は省略します。
差異としてインパクトのあると感じたものから並べます。

ピン配置
K1のみピン配置が違います。
基板差異の中では最もインパクトのある差異と感じます。

LED
全ての基板にユーザLEDが実装されていますが、実装位置と色、また点灯させるための信号がNegativeかPositiveかの違いがあります。
くわしくはこちらの結果に掲載しています。

ESP32-C3 PLUS(R1)には唯一RGB LED(WS2812)が実装されています。
RGB LEDのDIN信号とユーザLEDのAnodeピンと同じGPIOを使っていますが、RGB LEDを使うとユーザLEDは使用できなくなりました。

BOOTボタン、RESETボタン
K1のみ取り付け位置が違います。
個人的にはボタンを押すときにUSBに指が当たらないのでK1が一番使いやすいと感じます。

外観&USBコネクタ
中央(K3)はUSBTypeCコネクタの形状が違いますが、挿抜感に差は感じません。

まとめ

5種比べてみました。

個人的にはESP32 C3 SuperMini(k1)が使い勝手が良いと感じました。
・ボタンが押しやすい。
・GPIOの並びが覚えやすい。

入手性と価格ではESP32 C3 SuperMini(k2)です。(主観)
入手性と価格は変化があるので、ESP32 C3 SuperMini(k1)以外の4基板はほとんど差異が無いので置き換えのしやすさはあります。

全ての基板技適が無いのが残念です。

準備

Arduino環境の作成

◆開発環境

当記事ではArduino環境を使って開発します。
Arduino環境の準備はこちらの記事で紹介しています。

◆ボードライブラリ

Arduino IDEでESP32 C3を開発するために、ESP32ボードライブラリをインストールします。
Super Mini ESP32 C3に専用ボードライブラリが見当たらないため、「ESP32C3 Dev Module」を使います。

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

◆モジュールライブラリ

I2CのサンプルではSSD1306 OLED、SPIのサンプルではILI9341を使用します。
サンプルやモジュールを使用しない場合はインストール不要です。

SSD1306

ライブラリ名検索確認時のバージョン
Adafruit SSD1306 by AdafruitSSD13062.5.11
Adafruit GFX Library by AdafruitGFX1.11.10

ILI9341

ライブラリ名検索確認時のバージョン
Adafruit ILI9341 by AdafruitILI93411.6.1
Adafruit GFX Library by AdafruitGFX1.11.10

スケッチ

ユーザLED

説明

ボード上のユーザLEDを点灯させます。

ボードLEDはGPIO8で制御しますが、基板によってPositive/Negativeが違います。
スケッチはLowの時間を長くHighの時間を短く差をつけることで、どちらがPositiveでNegativeか判断できるようにしています。
点灯時間が長いほうがNegative、点灯時間が短いほうがPositiveです。

Positive : HighでLEDが点灯
・ESP32 C3 PLUS(R1) – 青

Negative : LowでLEDが点灯
・ESP32 C3 Super Mini(K1) – 青
・ESP32 C3 Super Mini(K2) – 青
・ESP32 C3 Super Mini(K3) – 緑
・ESP32-C3 PRO MINI(B1) – 青

配線

配線不要

スケッチ

#define LED_PIN   (8)
void setup()
{
  pinMode(LED_PIN, OUTPUT);

  while(1)
  {
    digitalWrite(LED_PIN, LOW);
    delay(500);

    digitalWrite(LED_PIN, HIGH);
    delay(100);
  }
}

void loop()
{  
}

結果

各ボードにスケッチを書き込みLEDを点灯させました。
LEDの点灯にはNegativeとPositiveの基板があり、スケッチのウエイトにより点灯時間が違います。
画像は点灯時の状態です。
基板上の赤の点灯は電源LEDです。

LEDを点灯させるためにGPIO8のLOW/HIGH制御をします。
ピンヘッダ側にも同じ信号がでているので、GPIO8を使用する場合には配慮が必要です。
画像はGPIO8の信号をオシロスコープでモニタした様子です。

RGB LED(WS2812)

説明

ESP32 C3 PLUS(R1)にはWS2812が実装されています。
ボード上のRGB LED(WS2812)を点灯させます。

発色を赤->緑->黄->青->紫->水->白の順に点灯させます。

配線

配線不要

スケッチ

#include <Adafruit_NeoPixel.h>

#define DIN_PIN         (8)
#define LED_COUNT       (1)
#define WAIT_MS         (1000)
#define BRIGHTNESS      (64)
Adafruit_NeoPixel pixels(LED_COUNT, DIN_PIN, NEO_GRB + NEO_KHZ800);

void setup()
{
  pixels.begin();
}

void loop()
{
  const uint32_t tblCol[] = {
    pixels.Color(BRIGHTNESS, 0, 0),
    pixels.Color(0, BRIGHTNESS, 0),
    pixels.Color(BRIGHTNESS, BRIGHTNESS, 0),
    pixels.Color(0, 0, BRIGHTNESS),
    pixels.Color(BRIGHTNESS, 0, BRIGHTNESS),
    pixels.Color(0, BRIGHTNESS, BRIGHTNESS),
    pixels.Color(BRIGHTNESS, BRIGHTNESS, BRIGHTNESS),
  };

  int32_t t = sizeof(tblCol) / sizeof(uint32_t);

  pixels.clear();
  
  while(1)
  {
    for(int32_t i = 0; i < t; i ++)
    {
      pixels.setPixelColor(0, tblCol[i]);
      pixels.show();
      delay(WAIT_MS);
    }
  }
}

結果

RGB LEDがカラフルに点灯しました。
画像は色変化しているうちの1シーンです。
RGB LEDはGPIO8を使用しているので、「ユーザLED」のようにGPIO8の出力をオシロスコープで確認しましたが信号は出ていませんでした。


試しに以下スケッチの修正をしました。
WS2812の制御と一緒にユーザLEDの点滅処理を加えたものです。
GPIO8が信号がなく、ユーザLEDの点滅もありませんでした。

RGB LED(WS2812)を使い始めるとGPIO8は使用できなくなりました。
(別のスケッチを書きなおすと使用することができます)

  pinMode(8, OUTPUT);
  
  while(1)
  {
    for(int32_t i = 0; i < t; i ++)
    {
      pixels.setPixelColor(0, tblCol[i]);
      pixels.show();

      digitalWrite(8, i % 2);
      delay(WAIT_MS);
    }
  }

画像左はRGB LED(WS2821)を使用していない場合、右はRGB LED(WS2812)を使用した場合の波形です。

I2C(SSD1306)

説明

I2Cを使いOLED(SSD1306)の表示制御をします。
制御内容は簡単なテキスト表示です。

デフォルトのI2Cピンを使い、同じスケッチで動作することを確認します。
ESP32C3ではI2Cの信号線は任意のピンに設定することができます。

このサンプルスケッチではloop()で同じ描画を何度も繰り返しています。
I2Cピンのデフォルトで設定されているSDAはGPIO8 でユーザLEDと重複しています。

何度も信号を送ることでユーザLEDの点灯点滅に影響があるか確認します。

配線

・ESP32 C3 Super Mini(K1)の配線

・ESP32 C3 Super Mini(K2)
・ESP32 C3 Super Mini(K3)
・ESP32 C3 PLUS(R1)
・ESP32-C3 PRO MINI(B1)の配線

代表してESP32 C3 Super Mini(k2)の絵を使った配線図

スケッチ

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH        (128)
#define SCREEN_HEIGHT       (64)

#define OLED_RESET          (-1)
#define SCREEN_ADDRESS      (0x3C)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
                                        
void setup()
{  
  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    for(;;);
  }
}

void loop()
{
  display.clearDisplay();
  
  display.setTextSize(2);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 20);
  display.print(F("ESP32 "));
  display.setTextSize(4);
  display.print(F("C3"));

  display.display();

}

結果

すべてのSuper Mini ESP32C3での表示を確認しました。
SDAと同じGPIO8を使用するユーザLEDはすべての基板で点滅(目視では薄暗い点灯)を確認しました。

SPI(ILI9341)

説明

SPIを使いLCD(ILI9341)の表示制御をします。
制御内容は簡単なテキスト表示です。

デフォルトのSPIピンを使い、同じスケッチで動作することを確認します。
ESP32C3ではSPIの信号線は任意のピンに設定することができます。
今回CSは任意のピン(GPIO0)に変更しています。


同じ配線で動作させるための方法として、サンプルスケッチの以下のコメントを解除することで、同じ配線で使用できます。
//#define SUPERMINI_ESP32C3_K1 (1)

配線

・ESP32 C3 Super Mini(K1)の配線

・ESP32 C3 Super Mini(K2)
・ESP32 C3 Super Mini(K3)
・ESP32 C3 PLUS(R1)
・ESP32-C3 PRO MINI(B1)の配線

代表してESP32 C3 Super Mini(k2)の絵を使った配線図

スケッチ

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

#define TFT_RST         (0)
#define TFT_DC          (1)

//#define SUPERMINI_ESP32C3_K1    (1)
#if defined (SUPERMINI_ESP32C3_K1)
#undef SS
#undef MOSI
#undef MISO
#undef SCK
#undef TFT_RST
#undef TFT_DC
#define SS              (2)
#define MOSI            (1)
#define MISO            (0)
#define SCK             (21)
#define TFT_RST         (8)
#define TFT_DC          (9)
#endif

#define TFT_CS          (SS)
#define TFT_MOSI        (MOSI)
#define TFT_MISO        (MISO)
#define TFT_SCK         (SCK)

Adafruit_ILI9341 tft = Adafruit_ILI9341(&SPI, TFT_DC, TFT_CS, TFT_RST);

void setup(void) 
{
  SPI.begin(TFT_SCK, -1, TFT_MOSI, TFT_CS);

  tft.begin();
  tft.fillScreen(ILI9341_BLACK);
  tft.setRotation(3);
  tft.setTextSize(3);
  
  tft.setCursor(0, 10);
  tft.setTextColor(ILI9341_GREEN);
  tft.printf("TAMANEGI\n");

  tft.setCursor(0, 50);
  tft.setTextSize(2);
  tft.setTextColor(ILI9341_RED);
  tft.printf("2.4inch LCD\n");
  tft.setTextColor(ILI9341_YELLOW);
  tft.printf("Res=240 x 320\n");
  tft.setTextColor(ILI9341_BLUE);
  tft.printf("ILI9341\n");
}

void loop()
{
}

結果

すべてのSuper Mini ESP32C3での表示を確認しました。
デフォルトピンで配線を行っているのでK1のみ配線が違いますが、ESP32C3はピン設定を任意のピン変更できます。
今回は同じスケッチを使用しましたが、配線を優先する場合はSPI.begin()を使うことで同じ配線を使用できます。

結果の画像は上側ESP32 C3 SuperMini(K1)と下側ESP32 C3 SuperMini(K2)です。

コメント

  1. nobcha48 より:

    こんにちは。参考になる情報を書いていただき感謝します。
    ESP32-C3 super mini dev kitを使った基板試作のため、参考にさせていただきました。

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