酒と薔薇の日々(その2)

好きなことだけ求めて生きるアスペ気味のINTJ人

SPI OLED 0.96インチ モジュール実験 [SSD1306] (1/3)

2022年07月03日 20時44分00秒 | マイコン(ESP32・Arduino等)

先般USBが何故か治ったぽいので、ATOM-LITEやらSTICK-Cを動かしてみる。

おおお!ちゃんと動くではないか!

ならば、続いて2月に買って投げてた小型ディスプレイを実験
とりあえずArduinoでの記事を参考に動かしてみる。

128x64 SPI接続専用
上が黄色、下が青で境目に発行市内線が入るといういわく付きの事故物件だった・・・あああ、それで安いんだわ。納得

さて、気を取り直して

Adafruit のライブラリを入手します。[ Adafruit-GFX ]
    https://github.com/adafruit/Adafruit-GFX-Library (グラフィックライブラリ)

それ以外にも必要なライブラリが在ると行ってくるので、全部入れてあげる。

続けてもう一個のライブラリ [ SSD1306 ]
    https://github.com/adafruit/Adafruit_SSD1306 (OLED ドライバライブラリ)

【ソフトウェアSPI】
ライブラリの例からAdafruit_SSD1306→ssd1306_128x64_spi を読み込み実行
424行もある・・・

ソースコードに書かれているピン番号へ結線
VCC = 3.3V
GND = GND
#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13

動いた。
だが、毎回止まる場所が違っている。という不安定状態

【ハードウエアSPI】
結線は、ソース上では
#define OLED_DC     6
#define OLED_CS     7
#define OLED_RESET  8
だったが、Amazonのレポートではこれを書き直すらしく
U8G2_SSD1306_128X64_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
とし
CLK = 13
MOSI= 11
CS = 10
D/C = 9
に結線するとあった。(私はやっていない)

デモを動かしてみるがどこかで止まったりなんだか安定しない。
文字表示をやってみるが、なぜか10秒前後で画面が消えてしまう。省電力モードか?

再電力投入したら治ってた・・・わからん(まだ、時折表示が崩れたり位置がおかしくなる)

---------------

それにしてもク○ Goo はコピペすると#include以下を常に再表示する時に勝手に消しゃあがる。
どうなっとんやワレェ 氏ね HTMLタグじゃぁねってんだ!

------------
#include "SPI.h"
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for SSD1306 display connected using software SPI (default case):
#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
  OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

void setup() {
  Serial.begin(9600);
  if(!display.begin(SSD1306_SWITCHCAPVCC)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
}

void loop() {
  Serial.println("write");
  teststring();
  delay(10000);
}

void teststring(void) {
  display.clearDisplay();
  delay(100);
  display.setTextSize(1);      // Normal 1:1 pixel scale
  display.setTextColor(SSD1306_WHITE); // Draw white text
  display.cp437(true);         // Use full 256 char 'Code Page 437' font
  
  display.setCursor(0, 0);     // Start at top-left corner
  display.println("Hello World");
  display.setTextSize(2);      // Normal 1:1 pixel scale
  display.setCursor(4, 31);     // Start at top-left corner
  display.println("Hey Hey");
  display.display();
}