M5Atom:ちょうどいい感じのOLED

I2C接続の128×32 OLEDを持ってたので、M5Atom Liteで表示させてみました。

ライブラリは Adafruit SSD1306 を使いました。

https://github.com/adafruit/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

用途によってはこの選択もアリかも!