I2C接続の128×32 OLEDを持ってたので、M5Atom Liteで表示させてみました。
ライブラリは Adafruit SSD1306 を使いました。
I2Cなので接続はGND/VCC/SCL/SDAの4本。以前、GROVE端子につないでたパーツがあったのでまずはそれ繋いでみました。
M5.begin内でのI2C起動を止めて、I2CをSDA=G26,SCL=G32で起動。
#include <M5Atom.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(115200);
M5.begin(true,false,true);
Wire.begin(26,32);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
delay(1000);
display.clearDisplay();
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0,0); // Start at top-left corner
display.println(F("Hello, \n world!"));
display.display();
}
void loop(){
}
OLEDで「Hello,world!」
SDA/SCLの位置を M5StackのGROVE PORT A と合わせたのですが、OLED側は外側SDAなので、コードがクロスしてしまってます。
むむ、端子の並びと間隔を見てると、コード使わずに直接繋げられそうな感じですね…。
ということでさっそく。
使うピンは、Wire.begin(21,25); です。これはSDA/SCLクロスしなくていいので、上でGROVE接続した時とは物理的な順番が違ってます。(これ、自分が混乱したw)
いい感じ!
横から見ると、わりとスキマ開いてしまっています。もうちょっと、ピンを短めにしちゃってもいいかも。
画面の向きがM5AtomのLEDと逆になるのが惜しいところですね。表裏を逆にしてつけるか…?
OLEDがほぼ隠れちゃうのと、M5Atomの他のピンが使えなくなる弊害がありますねw
用途によってはこの選択もアリかも!






