概要
0.96インチ128x64ピクセルのOLEDにM5StackのNanoC6を接続し、表示させてみました。
ちょっと手間がかかるとすればPlatformIO上でM5NanoC6でArduinoを使う設定ぐらいです。
このOLEDは上部16ピクセルが黄色で、下48ピクセルが青色のタイプです。
ほぼ以下の記事と同じ手順でできます。
- M5Stack NanoC6購入
- ESP32-C3-WROOM-02+SSD1306でM5Stack-Avatarを表示
できるだけ安価にちょっとした表示ができる組み合わせとして、M5 NanoC6とGME12864/SSD1306 OLEDで文字表示を試してみました。以下のパーツです(価格は2024年9月末時点)。
- M5Stack NanoC6 (スイッチサイエンス; 1,155円)
- GME12864-51/SSD1306 (Amazon; 569円)
ということで1,724円(+送料)で128x64ピクセルOLED表示ができてしまいます(PORT.Aと接続するケーブルも必要ですが)。AtomS3が2,783円でカラー128x128ですので、どちらがいいかということですが…
Windows 10上でVSCode + PlatformIOでビルド環境を用意し、M5Unifiedを使ってプログラムを作成しました。M5GFXを使っているので、日本語フォントなども使えて便利!
PlatformIOの設定
Lang-shipさんのNanoC6の記事に従ってPlatformIOでNanoC6用のビルドができるようにします。その設定にM5Unifiedを追加しますので、最終的にplatformio.ini
は以下のようになりました。
[env:esp32-c6-devkitm-1]
platform = espressif32
board = esp32-c6-devkitm-1
framework = arduino
platform_packages =
platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git
platformio/framework-arduinoespressif32-libs @ https://github.com/espressif/esp32-arduino-libs.git#idf-release/v5.1
extra_scripts = pre:custon_hwids.py
build_flags =
-DARDUINO_USB_CDC_ON_BOOT=1
-DARDUINO_USB_MODE=1
lib_deps = m5stack/M5Unified@^0.1.17
monitor_speed = 115200
ソース
続いてプログラムを用意します。Unit GLASS2を使えば簡単に書けます。
#include <M5UnitGLASS2.h>
#include <M5Unified.h>
// Port.A SDA(G2), SCL(G1)
M5UnitGLASS2 SSD1306Display(2, 1);
void setup() {
M5.begin();
SSD1306Display.init();
SSD1306Display.setFont(&fonts::lgfxJapanGothicP_16);
SSD1306Display.println("こんにちは世界!!");
SSD1306Display.setFont(&fonts::FreeMonoBold9pt7b);
SSD1306Display.println("SSD1306\nGME12864-51");
}
void loop() {
}
NanoC6のPort.AのG1、G2はどちらをSDA、SCLに割り当てても使えるみたいですが、Core2などと互換性を持たせるためにG1をSCL、G2をSDAとしました。M5UnitGLASS2
クラスを初期化する際にピン番号を渡します。
setup()
内で、先ほどのM5UnitGLASS2
オブジェクトを初期化すればM5.Display
と同じように使用することができます。
AtomS3でも同じコードで動作します。
接続
NanoC6とOLEDは以下のように接続しました。Fritzingで描画しました。OLEDパーツは、以下で公開されているものを使用させて戴きました。
参考
- M5Stack NanoC6購入 -- いつもお世話になっているLang-ship様のサイト
- ESP32-C3-WROOM-02+SSD1306でM5Stack-Avatarを表示
- https://qiita.com/McbeEringi/items/02eb900d701ef6dab5c1
- この方法でも動きますが、直接インスタンスを扱ってシンプルにしてみました