ハードウエアSPIでも試してみた。
「U8g2」ライブラリをインスコするのだが、
2個ヒットしたので「U8g2_for_Adafruit_GFX」の方をインスコ
こちらのほうが特化してるので良さげに思えた。
Pinアサインがそのまま使える。
サンプルの「Hllo_Adafruit_SSD1306」を読み込んだ。
元ソースのピンアサインが以下のようになってる。
Adafruit_SSD1306 display(/*MOSI*/ 11, /*CLK*/ 13, /*DC*/ 9, /*RESET*/ 8, /*CS*/ 10);
今までは
#define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12
だったので、
Adafruit_SSD1306 display(/*MOSI*/ 9, /*CLK*/ 10, /*DC*/ 11, /*RESET*/ -1, /*CS*/ 12);
に変更してみた。
結局同じ不具合症状が出た。
表示位置とか変だしフォントサイズがデカくて(1指定でも4サイズ)、どのみち使えそうにない。
-----------------
続いてオリジナルの「U8g2」ライブラリをインスコ
u8g2→full_buffer→HelloWorldのサンプルを読み込む。
61行目に在る
//U8G2_SSD1306_128X64_NONAME_F_4W_HW_SPI u8g2
を探してコメント//を外す。
後のハードウエアは定義は削除(動かしたソースはブログ最後尾)
VCC・GND、CLK = 13、MOSI= 11、CS = 10、D/C = 9 に結線し直し。
が、一回おきに表示が上下に分断されたり、表示位置が移動する、
妙なドットが表示されるなど不具合あり。
ロゴ表示もできた。が、数回の表示でめちゃくちゃに崩れた。(写真載せるのもめんどい)
やはりハード故障なんだろう。
もしかすると微妙に上下に移動したり表示が分断されるのは、黄色と青色の境目にOLEDが実装されていないせいかも。
・「U8g2」やってよかったこと
U8g2はメモリ使用量が26%とAdafruit_SSD1306の約半分だった
文字表示+線だけならこのライブラリが正解です。
フォントも綺麗でプロポーショナルな点は良い。
サンプルのBitmap画像も表示できました。
忍耐という修練が進んだこと。
結線
① VCC -> 3.3/5V
② GND -> GND
③ CLK -> 10 pin
④ MOSI -> 9 pin
⑤ CS -> 12 pin
⑥ D/C -> 11 pin
--------------------
#include "Arduino.h"
#include "U8g2lib.h"
#include "SPI.h"
U8G2_SSD1306_128X64_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
void setup(void) {
u8g2.begin();
}
void loop(void) {
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
u8g2.drawStr(0,30,"Hello World!"); // write something to the internal memory
u8g2.sendBuffer(); // transfer internal memory to the display
delay(1000);
}