XIAO/M5AtomでOLED128x128(I2C)を制御する((XIAO/Arduino版、M5Atom/Arduino版)
2020/10/16
wio-terminal用のplatformio.iniを追加した。
2020/10/15
初版
PlatformIO XAIO M5ATOM OLED128x128(I2C)
PlatformIO XAIO M5ATOM OLED128x128(I2C)
概要
XIAO/M5Atomで以下のOLED128x128(I2C)を制御する((XIAO/Arduino版、M5Atom/Arduino版)。
platformがArduinoなのでソースを共通化して動かしてみる。
・https://wiki.seeedstudio.com/Grove-OLED_Display_1.12inch/
・https://github.com/SeeedDocument/Seeed-WiKi/blob/master/docs/Grove-OLED_Display_1.12inch.md
本ボードは、ボードのバージョンによって、解像度が96x96または128x128であり、それぞれでコントローラも異なる。
入手したボードは、v1.1で解像度は128x128でコントローラはSH1107Gであった。(Vdd:3.3V/5V両用対応)
開発ツールplatformioのインストールについては以下を参照のこと:
・開発ツールPlatformIOをcliで使う(Seeeduino-XIAO版)
・M5Atomを開発ツールPlatformIOで使う(M5Atom/Arduino版)
・M5Atomを開発ツールPlatformIOで使う(Windows10版)
接続
本モジュールはI2Cタイプなので(I2C用の)Grove-Conectorに接続する。
(XIAOは専用のshield経由で接続する)
platformio.ini
XIAO用:
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:seeed_xiao]
platform = atmelsam
board = seeed_xiao
framework = arduino
build_flags = -DXIAO
upload_protocol = sam-ba
monitor_speed = 115200
lib_deps =
# Accept new functionality in a backwards compatible manner and patches
olikraus/U8g2 @ ^2.28.7
lib_ldf_mode = deep+
M5ATOM用:
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:m5stick-c]
platform = espressif32
board = m5stick-c
framework = arduino
build_flags = -DM5ATOM
monitor_speed = 115200
lib_deps =
# use M5Atom lib
3113
# use "FastLED"
126
# Accept new functionality in a backwards compatible manner and patches
olikraus/U8g2 @ ^2.28.7
lib_ldf_mode = deep+
デモ・スケッチ
以下のようなファイルを作成する:
src/helloworld.ino
#ifdef M5ATOM
#include "M5Atom.h"
#endif
#include <Arduino.h>
#include <U8g2lib.h>
#include <U8x8lib.h>
#include <Wire.h>
#ifdef M5ATOM
// Grove Connector of Atom Matrix (I2C GPIO Pin: G26,G32)
#define SCL 32
#define SDA 26
#endif
U8G2_SH1107_SEEED_128X128_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
U8X8_SH1107_SEEED_128X128_SW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
void setup(void) {
/* NO NEED in this sketch
#ifdef M5ATOM
M5.begin(); // Wire.begin() must be after M5.begin()
Wire.begin(26, 32); // Grove Connector of Atom Matrix (I2C GPIO Pin: G26,G32)
#endif
*/
u8g2.begin();
u8g2.enableUTF8Print();
u8x8.begin() ;
}
void loop(void) {
// using u8g2 lib
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_ncenB10_tr);
u8g2.drawStr(0,12,"Hello World! #0");
u8g2.drawStr(0,24,"Hello World! #1");
u8g2.drawStr(0,36,"Hello World! #2");
u8g2.drawStr(0,48,"Hello World! #3");
u8g2.drawStr(0,60,"Hello World! #4");
u8g2.drawStr(0,72,"Hello World! #5");
u8g2.drawStr(0,84,"Hello World! #6");
u8g2.drawStr(0,96,"Hello World! #7");
u8g2.drawStr(0,108,"Hello World! #8");
u8g2.drawStr(0,120,"Hello World! #9");
u8g2.drawStr(0,132,"Hello World! #10");
} while ( u8g2.nextPage() );
delay(1000);
//----------------
// kanji display
u8g2.setFont(u8g2_font_b10_t_japanese1);
u8g2.setFontDirection(0);
u8g2.firstPage();
do {
u8g2.setCursor(0, 15);
u8g2.print("Hello World!");
u8g2.setCursor(0, 40);
u8g2.print("こんにちは世界");
u8g2.setCursor(0, 50);
u8g2.print("今日は良い天気/晴天です。");
u8g2.setCursor(0, 60);
u8g2.print("明日は台風で強風でしょう。");
u8g2.setCursor(0, 70);
u8g2.print("佐藤、田中、鈴木、青木、小松、増野、茅野、松岡");
} while ( u8g2.nextPage() );
delay(1000);
// using u8x8 lib
u8x8.setFont(u8x8_font_artossans8_r) ;
u8x8.clear();
u8x8.println("Text Test") ;
u8x8.println("XIAO/M5Atom\n") ;
u8x8.print("OLED") ;
u8x8.print("128x128(i2c)\n");
u8x8.println(millis());
u8x8.println(123.45);
delay(1000);
//--------------------
}
ビルド・実行
以下の手順でビルド・実行する:
(platformio.iniは、ボードごとに切り替える)
run pio -t upload
スケッチが起動すると、LCDに文字が表示される。
u8g2ライブラリ、u8x8ライブラリを交互に使用して文字を表示する。
日本語も表示するが、すべての漢字を持っているわけでないようだ。
(このデモでは人名が一部表示されない)
追加(wio-terminal用platformio.ini)
以下のplatformio.iniに切り替えるとwio-terminalでビルド・実行できる:
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:seeed_wio_terminal]
platform = atmelsam
board = seeed_wio_terminal
framework = arduino
build_flags = -DWIO_TERMINAL
lib_deps =
# Accept new functionality in a backwards compatible manner and patches
olikraus/U8g2 @ ^2.28.7
upload_protocol = sam-ba
monitor_speed = 115200
lib_ldf_mode = deep+
参考情報
・U8g2 Library wiki: U8g2 is a monochrome graphics library
・u8g2 reference
・Seeeduino XIAO用Grove シールド バッテリー管理チップ 搭載
・XIAO/M5Atomで気圧センサー(HP206C)を動かす(XIAO/Arduino版、M5Atom/Arduino版)
・XIAO/M5AtomでLCD240x240(SPI)を制御する((XIAO/Arduino版、M5Atom/Arduino版)
・M5AtomでOLED128x128(SPI)を制御する(Arduino版)
・XIAOでOLED128x128(SPI)を制御する(Arduino版)
・XIAOでLCD160x80(SPI)を制御する(Arduino版)
以上