XIAO互換ボード Adafruit QT Py ESP32-S2を入手したので評価しました。
技適がないので電波の出せませんが、高性能XIAOとして基本機能を記載します。
紹介するもの
Adafruit QT Py ESP32-S2
特徴
電源とGND、GPIOピン位置は互換であるが、ピン番号互換は無い。
ESP32-S2搭載であるため、処理速度は高い。
技適未対応です。
接続 | Micro C |
CPU | Xtensa LX7 (240MHz) |
フラッシュMemory | 4MB |
PSRAM | 8MB |
GPIO | 11 |
PWM | 11(8bit 255まで) 同時に8個まで使用可能 |
ADC | 8 (13bit 3.3V = 8191) |
UART | 1 |
I2C | 1 |
SPI | 1 |
ボタン | BOOT RESET |
そのほか | QWIIC (I2C) SDA(GPIO41), SCL(GPIO40) |
ピン配置
外観
400穴ブレッドボードでは、左右2列と3列使用することができます。
使ってみて
Seeedstudio XIAOとほぼ上位互換になりますが、ピン配置のややこしさが残ります。
Qwiic やNeopixelなど機能面の充実や処理能力は高いだけに、技適がないのが惜しい。
少し割高で、国内では手軽に入手できないのも残念です。
準備
ライブラリ
ボードライブラリ
Arduino IDEのボードマネージャからESP32用のライブラリのインストールとボードの選択をします。
ボードマネージャのURL | https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json |
検索 | ESP |
ボードライブラリ | esp32 by Espressif Systems バージョン x.x.x※ |
選択するボード | esp32 > Adafruit QT Py ESP32-S2 |
モジュールライブラリ
機能やモジュールを使用しない場合インストールの必要はありません。
機能/モジュール | ライブラリ名 | 検索 | 確認時のバージョン |
---|---|---|---|
SSD1306 | Adafruit SSD1306 by Adafruit | SSD1306 | 2.5.1 |
ST7735 | Adafruit ST7735 and ST7789 Library by Adafruit | ST7735 | 1.9.3 |
関連 SSD1306 ST7735 | Adafruit GFX Library by Adafruit | GFX | 1.11.3 |
WS2812 | Adafruit NeoPixel by Adafruit | NEOPIXEL | 1.10.5 |
スケッチの書き込み
一度スケッチを書きこむとCOMポートの認識をしなくなる。
スケッチを書き込むときは、次の2通りの方法で行う。
・BOOTボタンを押しながら電源を投入する。
・電源投入後にBOOTボタンを押しながらRESETボタンを押す。
COMポートが認識されるようになるので、ArduinoIDEからCOMポートを選択して書き込みを行う。
基本スケッチ
LEDチカ
説明
ボタンが押下されている間LEDを点灯させます。
ボタンが離されている間LEDは消灯させます。
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
全般で使用できます。
Adafruit QT Py ESP32-S2
【スケッチの説明】
プルダウンしたピンの状態がHighならLEDを点灯、LowならLEDを消灯させます。
【ライブラリ】
Adafruit QT Py ESP32-S2
【準備】
GPIO35 -> 保護抵抗(約200Ω) -> LED -> GND
3.3V -> GPIO37
保護抵抗は目安です。使用されるLEDの適値を求めてください。
【バージョン情報】
2022/11/6 : 新規
**********************************************************************/
#define LED 35 //基板実装LED
#define BUTTON 37 //タクトスイッチ
void setup()
{
pinMode(LED, OUTPUT); //ピン出力設定
pinMode(BUTTON, INPUT_PULLDOWN); //プルダウンで入力
}
void loop()
{
int iStat = digitalRead(BUTTON);
digitalWrite(LED, iStat); //ボタンの状態をLEDに出力
}
結果
ボタンを押下するとLEDが点灯しました。
ボタンを離すとLEDが消灯しました。
PWM
説明
DACとPWMを使ってLEDのフェード点灯(ゆっくり点灯)とフェード消灯(ゆっくり消灯)を行います。
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Adafruit QT Py ESP32-S2 で利用できます。
【スケッチの説明】
DAC と PWMを使用しLEDのゆっくり点灯とゆっくり消灯をします。
【ライブラリ】
例 esp32 > Adafruit QT Py ESP32-S2
【準備】
GPIO17(DAC) - 保護抵抗(200Ω) - LED - GND
GPIO9(PWM) - 保護抵抗(200Ω) - LED - GND
保護抵抗(200Ω)は目安ですので、使用するLEDの適値求めてください
【バージョン情報】
2022/11/6 : 新規
**********************************************************************/
//Adafruit QT Py ESP32-S2
//analogWriteで設定できるピン (8bit 0 - 255)
// 18, 17, 9, 8, 7, 6, 5, 16
//dacWriteで設定できるピン (8bit 0 - 255)
// 18, 17
#define DAC 17
#define PWM 9
void setup()
{
pinMode(DAC , OUTPUT);
pinMode(PWM , OUTPUT);
}
void loop()
{
for(int i = 0; i < 256; i ++)
{
analogWrite(PWM, i);
dacWrite(DAC, i);
delay(2);
}
for(int i = 0; i < 256; i ++)
{
analogWrite(PWM, 255 - i);
dacWrite(DAC, 255 - i);
delay(2);
}
}
結果
DAC側(左)はある程度電圧が上昇してからLEDの点灯をしました。
電圧が下がるとLEDは消灯しました。
PWM側(右)はゆっくり点灯とゆっくり消灯を続けています。
ADC
説明
M5Stamp Pico Mateにはアナログ出力があります。
出力したアナログ信号をADCで読み取ります。
DACは8bit(0~255)で設定して最大で3.3V出力します。
ADCは12bit(0~4095)の最大3.3Vを読み出します。
配線
GPIO17(DAC) と GPIO9(ADC)を直接配線します。
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Adafruit QT Py ESP32-S2 で利用できます。
【スケッチの説明】
DAC で出力した電圧を ADCで読み取り、結果をCOMに出力します。
【ライブラリ】
例 esp32 > Adafruit QT Py ESP32-S2
【準備】
GPIO17(DAC) - GPIO9(ADC)
【バージョン情報】
2022/11/6 : 新規
**********************************************************************/
//Adafruit QT Py ESP32-S2
//analogReadで設定できるピン (13bit 0 - 8191)
// 18, 17, 9, 8, 7, 6, 5, 16
//dacWriteで設定できるピン (8bit 0 - 255)
// 18, 17
#define DAC 17
#define ADC 9
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で読み取りました。
設定値と読み取ったAD値をグラフにしました。
分解能が13bitあるので細かくとれるのですが、3.3Vに達する前にサチレーション(値が上限に達して正確に読み取れない状態)しています。
一部拡大(ピンクの枠)してみましたがADCの読み取り値にばらつきがみられます。
ADCの分解能は高くても精度はいまいちのようです。
念のためDACの出力をオシロスコープで確認してみましたが、3.2V位出ています。
設定値に対してリニア(直線的)でしたので、ADCの読み取りが高めに出ていると推測します。
UART
説明
UARTは2系統ありますが、UART0はCOMになります。
ESP32-S2-Picoはスケッチ書き込み後にUSBのCOMは認識されなくなるので、UART0を使用するにはGP43(TX)とGP44(RX)を使用します。
UART1はそのままでは内部フラッシュに接続されているので、そのままでは使用できません。
スケッチでピン指定して使用しています。
UART0(COM)から読み取ったデータをUART1に送信します。
UART1から読み取ったデータをUART0(COM)に送信真します。
配線
ESP32-S2-Pico | 配線 | FT232RL(UART1側) |
---|---|---|
GP5(UART1 TX) | 黄 | RX |
GP6(UART1 RX) | 緑 | TX |
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Adafruit QT Py ESP32-S2 で利用できます。
【スケッチの説明】
COMから読み取った情報を UART1へ出力します。
UART1から読み取った情報を COMへ出力します。
【ライブラリ】
esp32 > Adafruit QT Py ESP32-S2
【準備】
UARTの通信にFT232RLを使用します。
QT Py ESP32-S2(COM側) <-> FT232RL(UART1側)
【バージョン情報】
2022/11/6 : 新規
**********************************************************************/
void setup()
{
Serial.begin(115200); //SerialオブジェクトはUART0 (COM)
Serial1.begin(115200); //Serial1 オブジェクトは ピン指定で、RX = GP6, TX = GP5 で設定する
}
void loop()
{
if(Serial1.available() != 0) //UART1にデータがあれば、読み取った内容をUART0に送信
{
Serial.write(Serial1.read());
}
if(Serial.available() != 0) //UART0にデータがあれば、読み取った内容をUART1に送信
{
Serial1.write(Serial.read());
}
}
結果
結果はTeratermを2つ起動して確認します。
Teratermから送信した文字は、エコーバックにより表示されます。
今回UART0(COM)はCOM106、UART1のFT232RLはCOM9で認識されました。
COM106側から赤実線枠”tamanegi”と入力を行うと、COM9側の赤点線枠に”tamanegi”と表示されました。
COM9側から青実線枠”Hello”と入力を行うと、COM106側の青点線枠に”Hello”と文字が出力されました。
I2C(SSD1306)
説明
I2Cを使ってSSD1306(OLED 0.96inch)モニタのサンプルを動作させます。
I2Cはデフォルトでピン定義されているため、ピン設定不要です。
そのほかの図形描画サンプルは、Arduinoサンプルスケッチを参照してください。
ファイル(F) > スケッチ例 > Adafruit SSD1306 > ssd1306_128x64_i2c
配線
ESP32-S2-Pico | 配線 | SSD1306(0.96inch) |
---|---|---|
3.3V | 赤 | VCC |
GND | 黒 | GND |
GP7 | 黄 | SDA |
GP6 | 白 | SCL |
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Adafruit QT Py ESP32-S2 で利用できます。
【スケッチの説明】
I2Cを使い、SSD1306 OLEDの制御をします。
【ライブラリ】
esp32 > Adafruit QT Py ESP32-S2
Adafruit SSD1306 by Adafruit
Adafruit GFX Library by Adafruit
【準備】
マイコン基板 <-> SSD1306
3V3 <-> VCC
GND <-> GND
GPIO7(SDA) <-> SDA
GPIO6(SCL) <-> SCL
【注意】
COM認識しない場合、BOOTボタンを押下しながら電源を再投入する。
【バージョン情報】
2022/11/6 : 新規
**********************************************************************/
//Adafruit QT Py ESP32-S2 I2C SDA(7), SCL(6)
#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を使用する。
void setup()
{
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
for(;;);
}
display.clearDisplay(); //何か表示されている場合に備えて表示クリア
display.setTextSize(2); //フォントサイズは2(番目に小さい)
display.setTextColor(SSD1306_WHITE); //色指定はできないが必要
display.setCursor(20, 5); //テキストの表示開始位置
display.print(F("TAMANEGI")); //表示文字列
display.setCursor(40, 25);
display.print(F("QT Py"));
display.setCursor(20, 45);
display.print(F("ESP32-S2"));
display.display(); //バッファ転送(表示)
}
void loop()
{
}
結果
SSD1306のサンプルスケッチが動作しました。
SPI(ST7735)
説明
SPIを使ってST7735(LCD 1.8inch)モニタのサンプルを動作させます。
そのほかの図形描画サンプルは、Arduinoサンプルスケッチを参照してください。
ファイル(F) > スケッチ例 > Adafruit ST7735 and ST7789 Library > graphicstest
配線
ESP32-S2-pico | 配線 | ST7735(1.8inch) |
---|---|---|
3.3V | 赤 | VCC |
3.3V | 赤 | LED |
GND | 黒 | GND |
GPIO18 | 黄 | CS |
GPIO17 | 青 | RESET |
GPIO9 | 橙 | AO |
GP35(SPI MOSI) | 緑 | SDA |
GP36(SPI CLK) | 紫 | SCK |
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Adafruit QT Py ESP32-S2 基板で動作します。
【スケッチの説明】
ST7735 LCDの表示制御します。
H/W SPIを使用するための方法についてサンプル記載します。
【ライブラリ】
esp32 > Adafruit QT Py ESP32-S2
Adafruit ST7735 and ST7789 Library by Adafruit
Adafruit GFX Library by Adafruit
【準備】
マイコン基板 <-> ST7735
3V3 <-> VCC
GND <-> GND
GPIO18(CS) <-> CS
GPIO17(Reset) <-> Reset
GPIO9(DC) <-> AO
GPIO35(MOSI) <-> SDA
GPIO36(SCK) <-> SCK
【バージョン情報】
2022/11/6 : 新規
**********************************************************************/
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#define TFT_CS 18 // CS
#define TFT_RST 17 // Reset
#define TFT_DC 9 // DC
#define TFT_MOSI 35 // MOSI
#define TFT_SCK 36 // 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.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のサンプルスケッチが動作しました。
特別なスケッチ
Neopixel(W2812)
説明
1秒ごとに、LEDの色を変化させます。
赤->緑->黄->青->紫->水->白
配線
基板実装W2812を使用するので配線不要。
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Adafruit QT Py ESP32-S2 で利用できます。
【スケッチの説明】
実装 W2812を点灯させます。
1秒間隔で、赤->緑->黄->青->紫->水->白 の順で点灯させます。
【ライブラリ】
esp32 > Adafruit QT Py ESP32-S2
Adafruit NeoPixel by Adafruit
【準備】
配線不要
【バージョン情報】
2022/11/6 : 新規
**********************************************************************/
#include <Adafruit_NeoPixel.h>
#define DIN_PIN 39 // NeoPixel の出力ピン番号はGP23
#define POWER_PIN 38
#define LED_COUNT 1 // LEDの連結数
#define WAIT_MS 1000 // 次の点灯までのウエイト
#define BRIGHTNESS 16 // 輝度(Max 255)
Adafruit_NeoPixel pixels(LED_COUNT, DIN_PIN, NEO_GRB + NEO_KHZ800);
void setup()
{
pinMode(POWER_PIN, OUTPUT);
digitalWrite(POWER_PIN, HIGH);
pixels.begin(); //NeoPixel制御開始
}
void loop()
{
pixels.clear();
//pixels.Color(Red, Green, Blue)で、パレット情報を作成する。
//赤点灯
pixels.setPixelColor(0, pixels.Color(BRIGHTNESS, 0, 0));
pixels.show();
delay(WAIT_MS);
//緑点灯
pixels.setPixelColor(0, pixels.Color(0, BRIGHTNESS, 0));
pixels.show();
delay(WAIT_MS);
//赤 + 緑 で 黄点灯
pixels.setPixelColor(0, pixels.Color(BRIGHTNESS, BRIGHTNESS, 0));
pixels.show();
delay(WAIT_MS);
//青点灯
pixels.setPixelColor(0, pixels.Color(0, 0, BRIGHTNESS));
pixels.show();
delay(WAIT_MS);
//赤 + 青 で 紫点灯
pixels.setPixelColor(0, pixels.Color(BRIGHTNESS, 0, BRIGHTNESS));
pixels.show();
delay(WAIT_MS);
//緑 + 青 で 水点灯
pixels.setPixelColor(0, pixels.Color(0, BRIGHTNESS, BRIGHTNESS));
pixels.show();
delay(WAIT_MS);
//赤 + 緑 + 青 で 白点灯
pixels.setPixelColor(0, pixels.Color(BRIGHTNESS, BRIGHTNESS, BRIGHTNESS));
pixels.show();
delay(WAIT_MS);
}
結果
Nexpixelが1秒毎に色の変化をしました。
コメント