「M5STACK LCD Unitのファームウェアアップデート」の記事の際に記載した I2C OLEDディスプレイを動かしてみました。
本製品はタイトルや製品説明では、ドライバICはSSD1315 を使用しているとありましたが、詳細説明ではSSD1306を使用と記載されています。購入してから気が付きました...
詳しくは調べていませんが、SSD1315 はSSD1306 の上位互換らしいので、SSD1306として使用してみました。なお、OLEDのライブラリはAdafruit_SSD1306を使用して記述しました
#include <Wire.h>
#include <Adafruit_GFX.h> // Ver 1.12.1
#include <Adafruit_SSD1306.h> // Ver 2.5.13
#define SCREEN_WIDTH 128 // OLED 横設定
#define SCREEN_HEIGHT 64 // OLED 高さ設定
#define OLED_RESET -1 // OLEDリセット(未使用:-1)
#define SCREEN_ADDRESS 0x3C // ボード上の設定:0x78に接続:0x3C、0x7Aに接続:0x3D
// ディスプレイの宣言
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
}
void loop() {
display.clearDisplay(); // 表示クリア
display.setTextSize(2); // テキストサイズ
display.setTextColor(WHITE); // テキストカラー
display.setCursor(0, 10); // テキストの表示位置
display.println("Hello World");
display.display(); // テキスト表示
delay(1000);
}
サクッと動いてしまいました。3ボードセットなので各ボードで動作チェックを行い、不良が無いことを先に確認しました
折角なのでスタックチャンアバターを表示しようと調べてみると、M5 GLASS2 unitで使用されているSSD1309はSSD1306と互換性があるという情報を見つけました。早速、ライブラリを変更して試してみます。予定通りスタックチャンを表示しますが、折角なので10秒ごとに表情が変わるようにしました
#include <M5UnitGLASS2.h>
#include <M5Unified.h>
#include <Avatar.h>
using namespace m5avatar;
m5avatar::Avatar avatar;
const Expression expressions[] = {
Expression::Angry,
Expression::Sleepy,
Expression::Happy,
Expression::Sad,
Expression::Doubt,
Expression::Neutral
};
const int expressionsSize = sizeof(expressions) / sizeof(Expression);
int idx = 0;
void setup() {
auto cfg=M5.config();
cfg.unit_glass2.pin_sda = 21; // SDA ピン設定
cfg.unit_glass2.pin_scl = 22; // SCL ピン設定
M5.begin(cfg);
// OLED ディスプレイサイズ:128 x 64
avatar.setScale(.4); // 縮尺:.4 = 128/320
avatar.setPosition(-88,-96); // ポジション:88 = (240-64)/2, 96 = (340-128)/2
avatar.init(); // アバターの初期化
}
void loop() {
M5.update();
idx = rand() % expressionsSize;
avatar.setExpression( expressions[idx] );
delay(10000);
}
スタックチャンアバターは、320x240ディスプレイ用に準備されていますので、小さい液晶で表示する際は縮尺(avatar.setScale())やポジション(avatar.setPosition())の設定を変更する必要があります
とりあえず、動作したので良しとしました。結局、このOLED のディスプレイドライバは不明ですが、SSD1306、SSD1309、SSD1315は互換性があるようですね
参考にさせて頂きましたサイト:
- @McbeEring様の「ESP32-C3-WROOM-02+SSD1306でM5Stack-Avatarを表示」
- @Teach様の「M5AtomS3 で M5Stack-Avatar を使う」
0 件のコメント:
コメントを投稿