ATOMS3 (ESP32-S3)

コンピュータ、組み込み

ATOMS3を入手しました。
M5系はあまり経験がないので少しずつ試していきます。

紹介するもの

ATOMS3 (ESP32-S3)

特徴
接続Micro C
CPUESP32-S3 Xtensa 32bit LX7 Dual core 240MHz
GPIO6
ADC4 (12bit 0 – 4095) (ソケットから使用できるピン数)
PWM4 (8bit 0 – 255)
UART1
I2C1
SPI1 (CS, MISO, MOSI, SCKまでならソケットから使用できます。
 LCD(ST7735)などはHY2.0 のIOも使います)
ボタンLCDボタン(LCDがプッシュボタンになっています。感圧式ではありません)
リセットボタン(2秒以上の長押しでダウンロードモードになります。)
そのほか技適あり BLE, Wifi
0.85inch IPS LCD GC9107(128 x 128)
User Button(Screen)
3軸ジャイロ、3軸加速センサ(MPU6886)
赤外線発光
HY2.0 4Pin コネクタ(3.3V, GND, GPIO1, GPIO2)
ピン配置

外観

使ってみて

小型のモニタが小さな筐体に納まったかわいらしいモデルです。
画面自体はボタン(感圧式のタッチパネルではありません)になっているので、簡単な機能を与えることができます。

普段使っていない機能がいくつかあるのでこれから調べながらブログを更新していきます。
今回は評価ボードで紹介している内容にとどめておきます。

準備

ライブラリ

ボードライブラリ

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

スケッチの書き込み

筐体横のリセットボタンを長押しすることでダウンロードモードになります。
緑のLEDが点灯するまで押し続けてください。

Arduino IDEから書き込みボタンを押下することで書き込みができます。

基本スケッチ

ボタンLED

説明

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

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

配線

GPIO1(LED出力用) -> 保護抵抗(約200Ω) -> LED -> GND
3.3V -> タクトスイッチ -> GPIO2(INPUT)

保護抵抗は目安です。使用されるLEDの適値を求めてください。

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

【マイコン基板】
ATOM3

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

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

【準備】
GPIO8(LED) -> 保護抵抗(約200Ω) -> LED Anode, LED Cathode -> GND
3.3V -> タクトスイッチ -> GPIO7(INPUT)

【バージョン情報】
2023/1/30 : 新規
**********************************************************************/

#define LED 8      //LED
#define BUTTON 7    //タクトスイッチ

void setup()
{
  pinMode(LED, OUTPUT);               //ピン出力設定
  pinMode(BUTTON, INPUT_PULLDOWN);    //プルダウンで入力
}

void loop()
{
  int iStat = digitalRead(BUTTON);
  digitalWrite(LED, iStat);           //ボタンの状態をLEDに出力
}
結果

ボタンを押下するとLEDが点灯し、離すことでLEDが消灯しました。
画像は流用ですが同じ結果が得られます。

PWM

説明

PWMを使ってLEDをゆっくり点灯、ゆっくり消灯します。

配線

GPIO8(PWM) – 保護抵抗(約200Ω) – LED – GND
ワイヤとLEDで動作させる場合の抵抗値は使用するLEDにより適切な抵抗値を求めてください。

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

【マイコン基板】
ATOM3

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

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

【準備】
GPIO8 - 保護抵抗(約200Ω) - LED - GND
ワイヤとLEDで動作させる場合の抵抗値は使用するLEDにより適切な抵抗値を求めてください。

【バージョン情報】
2023/1/30 : 新規
**********************************************************************/

#define PWM 8        //PWM 出力pin

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

I2C(SSD1306)

説明

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

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

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

【マイコン基板】
ATOM3

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

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

【準備】
マイコン基板 <-> SSD1306
3V3         <-> VCC
GND         <-> GND
GPIO7(SDA)  <-> SDA
GPIO8(SCL)  <-> SCL
ATOM3の I2Cでは、 Wire.setPins()により任意の位置にI2CのSDA, SCLを設定することができます。

【バージョン情報】
2023/1/30 : 新規
**********************************************************************/

#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 7
#define PIN_SCL 8                                   
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)モニタのサンプルを動作させます。

配線

LCDの配線をするために、ソケットだけでは足りないのでHY2.0のコネクタのIOも使用します。
あまり用途の無い使いかたかもしれませんが、参考までに掲載します。

ATOMS3配線ST7735(1.8inch)
3.3VVCC
3.3VLED
GNDGND
GPIO5(VSPI CS)Reset
GPIO6AO(DC)
GPIO7Reset
GPIO8(VSPI MOSI)SDA
GPIO2(VSPI CS0)SCK
スケッチ

ST7735をSPIで表示をするサンプルです。
文字列の表示を行います。

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

LOLIN D32 PROではVSPIとHSPIの2系統が使用できます。
どちらのピンア配置もサンプルに掲載されているので用途に応じてコメントを解除してください。

下記サンプルではVSPIで動作します。

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

【マイコン基板】
ATOMS3

【スケッチの説明】
ST7735 LCDの表示制御します。
ATOMS3ではピンソケットから使用できるIOが4ピンなので、ST7735LCDを使用する場合、HY2.0コネクタからIOを追加で使用します。

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

【準備】
VSPIを使用する場合
マイコン基板 <-> ST7735
3V3            <-> VCC
GND            <-> GND
GPIO5(CS)      <-> CS
GPIO1(Reset)   <-> Reset
GPIO2(DC)      <-> AO
GPIO6(MOSI)    <-> SDA
GPIO7(SCK)     <-> SCK

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

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

#define TFT_CS    5
#define TFT_RST   1
#define TFT_DC    2
#define TFT_MOSI  6
#define TFT_SCK   8

//1系統目を使う場合
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup(void) 
{
  //1系統目を使う場合
  SPI.begin(TFT_SCK, -1, TFT_MOSI, TFT_CS);       //FSPIピンを変更して使用する場合、この行のコメントを解除

  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をコピーしました