Ardino/NUCLEO用シールド(Accessory ShieldのOLED)

先日のAccessory Shieldで、もうちょっと何とかならないかなと調べた続き。

別のモジュールが必要なBluetooth以外は、動作確認がほぼできている状態。
あいかわらずOLEDのみ表示されない。ひょっとして壊れてるのかと不安になる。


よく使うOLEDと違い4つの端子が出ているわけではなく、OLED本体のリボンケーブルが基板に直付けされている状態なので、これだけ外して確認するのも難しい。

しかし回路図を見ると特に複雑なことをしているわけではないので、これだったら標準のサンプルスケッチで試せるなと思った。
というわけで、Adafruit_SSD1306のサンプルスケッチ「ssd1306_128x64_i2c.ino」を開く。
修正はresetの番号。
 #define OLED_RESET     7 
あとはいつものI2Cのアドレス。今回も0x3Cにする。
 if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 Serial.println(F("SSD1306 allocation failed")); 
(回路図見ても0x3C/0x7Dと両方書いてあって当てにならなかった。ので、実は両方やってみた結果)

これでコンパイルして転送。
でも
 display.cp437(true);         // Use full 256 char 'Code Page 437' font 
と、エラーが出た。
該当するフォント(キャラクターコード?)がないのか、そんな感じのエラーなのでもうちょい調べる必要がありそう。
しかしめんどくさいので、今回は手っ取り早くこの行だけコメントアウトしてしまった。
これでコンパイル成功。

 

すると無事にOLEDに文字や図形が表示された。
壊れてなかったんだな…。

しかも例の黄色と青のやつだったか…。
こっちのほうが安いからしかたない。画像表示させるには色の境界を考慮してデザインしないと。

 

一応、これでOLED自体は問題ないことがわかった。
他に考えられる原因は、Adafruit関連のライブラリが最近更新されているので、何かしらバージョンに合ってないことをやってる可能性もある。
なので今度はAdafruit_GFXライブラリを一度削除、最新版をインストールし直してみた。

(昨日はAdafruit_SSD1306ライブラリを入れ直したので)

そしてもう一度、Accessory Shieldのoledをコンパイルしてみたところ、無事表示された。

え、それだけ??という感じ。なんだ自分の環境が悪かっただけか…。

 

その後、他にAccessory Shieldを見つけたので、これをダウンロードして温度計とか表示させてみた。

 https://libstock.mikroe.com/projects/view/1502/waveshare-arduino-accessory-shield-demo

これも、そのままではOLEDは表示されなかったので、ちょっと修正した。

編集した12行目あたりを抜粋。

//Definitions for SSD1306 128x64 OLED Display
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET                            7
#define OLED_SA0                              8
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

それと下の方、アドレスを0x3Cにする。

void setup() 
{
unsigned char i = 0;
Serial.begin(9600);
Serial.flush();
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
oled.clearDisplay();

こんなもんだったかな。

日付と時間はずれてるけど、温度はちゃんと測定できてる。

とにかく古いスケッチとライブラリは、一度見直した方がいいという話でした。

Sponsered Link

コメント