WeAct ESP32-C3-C3FH4

コンピュータ、組み込み

WeActのESP32-C3を入手しました。
Arduino環境で基本的な入出力と通信(UART, I2C, SPI)を使ってみます。

紹介するもの

WeAct ESP32-C3-C3FH4

特徴

安価でESP32-C3を搭載していますが、技適がありません。
シリアルチップが搭載されていないので、USBケーブルを使用したUARTは使用できません。

接続Type C
CPUC3 RISC-V 160MHz
GPIO15
ADC6 (12bit 0 – 4095)
GPIO5をAnalog入力にすると、起動ループしてしまうので
使用不可としています。
PWM15 (8bit 0 – 255)
同時に設定できるのは6本まで
UART1 COMシリアルとGPIO20(TX), GPIO21(RX)と共通
I2C1(デフォルトは無いが、任意のピンに設定可能)
SPI1(デフォルト有るが、任意のピンに設定可能)
ボタンBOOT
RESET

WeAct ESP32C3-C3FH4 説明サイト

ピン配置

外観

400穴ブレッドボードでは、左右2列と3列使用することができます。

使ってみて

値段も手ごろ(500~600円台)で購入できます。
小さめの基板なので、小型のブレッドボードなどの実験では扱いやすいです。
基板の表面にはシルクでピン番号が表記されているので作業性は良いです。

無線は使用できませんが、ESP32-C3に慣れる意味であれば扱いやすい基板だと思います。

無線は使用できませんが、WeAct ESP32-C3よりも小型なESP32-C3 Super Miniの記事はこちら

準備

ライブラリ

ボードライブラリ

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 > ESP32C3 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

スケッチの書き込み

書き込みモードで起動します。
BOOTボタンを押下しながら電源を投入するか、BOOTボタンを押下しながらRESETボタンを押下します。
COM認識されるので、Arduino IDEから書き込みボタンを押下することで書き込みができます。

基本スケッチ

ボタンLED

説明

タクトボタンとLEDの組み合わせの動作をします。

タクトボタンはPULLDOWN設定します。(押下したらHIGH)
タクトボタンを読み取り、押下されるとLEDが点灯します。
ボタンが離されるとLEDは消灯します。

スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
WeAct ESP32-C3-C3FH4

【スケッチの説明】
プルダウンしたピンの状態がHighならLEDを点灯、LowならLEDを消灯させます。

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

【準備】
GPIO0(LED) -> 保護抵抗(約200Ω) -> LED -> GND
3.3V -> タクトボタン -> GPIO1(INPUT)

ワイヤによる配線で行う場合は、保護抵抗の適値を求めて使用してください。

【バージョン情報】
2022/12/14 : 新規
**********************************************************************/

#define LED 0       //LED
#define BUTTON 1    //タクトスイッチ

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/

【マイコン基板】
WeAct ESP32-C3

【スケッチの説明】
PWM出力でのフェード点灯(ゆっくり点灯)とフェード消灯(ゆっくり消灯)を行います。

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

【準備】
GPIO0(LED) - 保護抵抗(約200Ω) - LED - GND

抵抗値は使用するLEDにより適切な抵抗値を求めてください。

【バージョン情報】
2022/12/14 : 新規
**********************************************************************/

#define PWM 0        //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がゆっくり点灯し、ゆっくり消灯しました。

ADC

説明

ADCに入力された電圧を読み取りCOMに出力します。

電圧の入力にLOLIN32 Liteを使用します。
0~255(約3.3V) まで2msごとに1ずつ上昇し、255(約3.3V)~0までを2msごとに1ずつ下降する設定を繰り返します。

配線
WeAct ESP32-C3配線LOLIN32 Lite
GPIO0(ADC)GPIO26(DAC)
GNDGND
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
WeAct ESP32-C3-C3FH4

【スケッチの説明】
入力された電圧を読み取ります。

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

【準備】
WeAct ESP32-C3 <-> LOLIN32 Lite
GPIO0(ADC)      <-> GPIO26(DAC)
GND             <-> GND

【バージョン情報】
2022/12/14 : 新規
**********************************************************************/

#define ADC 0

void setup()
{
  Serial.begin(115200);

  pinMode(ADC, INPUT);
}

void loop()
{
  int iADC = 0;

  //外部から入力された電圧を読み取り、結果をCOMに出力します。
  iADC = analogRead(ADC);
  Serial.printf("(ADC) = %d\r\n", iADC);
  delay(2);
}
結果

入力した電圧を読み取った結果をグラフにしました。
電圧の変化は0V -> 3.3Vまでを約500msで上昇し、3.3V -> 0Vまで約500msで下降します。

入力された電圧対して直線的ですが、1割ほど高めにオフセットされているように見えます。

電圧と読み取り値の同期はできていませんが、参考程度に入力電圧を添付します。

UART

説明

UART0(COM)から読み取ったデータをUART1に送信します。
UART1から読み取ったデータをUART0(COM)に送信します。

配線

WeAct ESP32-C3-C3FH4 のUSBにはシリアルチップが搭載されていないので、UART0の送受信はGPIOピンから行います。
UART1についてはピン定義がないのでピン設定をします。

WeAct ESP32-C3-C3FH4配線FT232RL-0配線FT232RL-1
GPIO21(UART0 TX)RX
GPIO20(UART0 RX)TX
GPIO0(UART1 TX)RX
GPIO1(UART1 RX)TX
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
WeAct ESP32-C3-C3FH4

【スケッチの説明】
 UART0から読み取った情報を UART1へ出力します。
 UART1から読み取った情報を UART0へ出力します。

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

【準備】
WeAct ESP32-C3-C3FH4 のUSBにはシリアルチップが搭載されていないので、UART0の送受信はGPIOピンから行います。

 ESP32-C3-C3FH4 <-> FT232RL(UART0側)
 GPIO21(TX) <-> RX
 GPIO20(RX) <-> TX

 ESP32-C3-C3FH4 <-> FT232RL(UART1側)
 GPIO0(TX) <-> RX
 GPIO1(RX) <-> TX

【バージョン情報】
2022/12/18 : 新規
**********************************************************************/

#define PIN_TX 0
#define PIN_RX 1

void setup()
{
  Serial.begin(115200);                                   //基板中央のスルーホールTX, RXに入出力されます
  Serial1.begin(115200, SERIAL_8N1, PIN_RX, PIN_TX);      //Serial1 オブジェクトは ピン指定で使用します
}

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

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

結果はTeratermを2つ起動します。
一つはUART0(FT232RL)で、もう一つはのUART1(FT232RL)です。

UART0用のTeratermの入力した文字は、UART1用のTeratermに表示されます。
UART1用のTeratermの入力した文字は、UART0用のTeratermに表示されます。

I2C(SSD1306)

説明

I2Cを使ってSSD1306(OLED 0.96inch)モニタのサンプルを動作させます。

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

配線
WeAct ESP32-C3配線SSD1306(0.96inch)
3.3VVCC
GNDGND
GPIO9(SCL)SCL
GPIO8(SDA)SDA
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
 WeAct ESP32-C3-C3FH4

【スケッチの説明】
I2C から SSD1306 OLEDの制御をします。
デフォルトピンで使用しますが、Wire.setPins(PIN_SDA, PIN_SCL) を使用することでピンの変更ができます。

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

【準備】
WeAct ESP32-C3-C3FH4 <-> SSD1306
3V3             <-> VCC
GND             <-> GND
GPIO8(I2C SDA)  <-> SDA
GPIO10(I2C SCL) <-> SCL

【バージョン情報】
2022/12/18 : 新規
**********************************************************************/

#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を使用する。

//デフォルトピン以外でI2Cを使用する場合
// #define PIN_SDA 0
// #define PIN_SCL 1

void setup()
{
//  デフォルトピン以外でI2Cを使用する場合
//  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, 05);            //テキストの表示開始位置
  display.print(F("TAMANEGI"));         //表示文字列
  display.setCursor(35, 25);
  display.print(F("WeAct"));
  display.setCursor(20, 45);
  display.print(F("ESP32-C3"));

  display.display();                    //バッファ転送(表示)
}

void loop()
{
}
結果

SSD1306のサンプルスケッチが動作しました。

SPI(ST7735)

説明

SPIを使ってST7735(LCD 1.8inch)モニタのサンプルを動作させます。

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

配線
WeAct ESP32-C3配線ST7735(1.8inch)
3.3VVCC
3.3VLED
GNDGND
GPIO7(SPI CS)CS
GPIO8RESET
GPIO10AO(DC)
GPIO6(SPI MOSI)SDA
GPIO4(SPI SCK)SCK
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
WeAct-ESP32-C3 基板で利用できます。

【スケッチの説明】
ST7735 LCDの表示制御します。
H/W SPIを使用するための方法についてサンプル記載します。
デフォルトのSPIを使用しますが、変更する場合はbegin()関数によりピン設定します。

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

【準備】
マイコン基板 <-> ST7735
3V3           <-> VCC
GND           <-> GND
GPIO7(CS)     <-> CS
GPIO8         <-> Reset
GPIO10        <-> AO
GPIO6(MOSI)   <-> SDA
GPIO4(SCK)    <-> SCK

【バージョン情報】
2022/12/16 : 新規
**********************************************************************/

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

#define TFT_CS          7  // CS
#define TFT_RST         8  // Reset 
#define TFT_DC          10 // DC
#define TFT_MOSI        6  // MOSI
#define TFT_SCK         4  // SCK

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で使用することができます。  
//  SPI.begin(TFT_SCK, -1, TFT_MOSI, TFT_CS);   //H/W SPIを使用する場合こちらでピン番号を指定する。
                                              //S/W SPIで使用する場合はコメントアウトする。
  

  tft.initR(INITR_BLACKTAB);                  //Init ST7735S初期化
  
  tft.fillScreen(ST77XX_BLACK);               //背景の塗りつぶし

  //テキスト表示
  tft.setRotation(3);                         //画面回転
  tft.setTextSize(3);                         //サイズ

  tft.setCursor(0, 20);                      //カーソル位置                      
  tft.setTextColor(ST77XX_RED);              //赤
  tft.printf("TAMANEGI\n");

  tft.setTextColor(ST77XX_GREEN);            //緑
  tft.printf("TAMANEGI\n");

  tft.setTextColor(ST77XX_BLUE);             //青
  tft.printf("TAMANEGI\n");

  tft.setTextColor(ST77XX_YELLOW);           //黄
  tft.printf("TAMANEGI\n");
}

void loop()
{
}
結果

ST7735のサンプルスケッチが動作しました。

コメント

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