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
用途によってはこの選択もアリかも!