OLED SSD1306 128x64に表示してみた
やってみたこと
Arduino_STM32環境でOLED SSD1306 128x64をSTM32F103C8T6と接続してサンプルスケッチを動かしてみました。
安価なOLED
amazonで¥420の「HiLetgo 0.96" I2C IIC SPI シリアル 128×64 OLED LCDディスプレイSSD1306液晶 」。「OLED SSD1306」あたりのキーワードで調べると4ピンや6ピンのものもあるようですが、ここにあるのは7ピンのもの。ジャンパーでSPIとIICを切り替えられるようになってるようです(デフォルトSPI)。届いたときにはあまりのちっちゃさにビックリでしたけど、表示はクッキリとして美しいですねこれ。
STM32F103C8T6ではu8glibが使えない?
ちょっと前にArduino UNOでも試してるんですけど、そのときにはレスポンスが良いと評判のu8glibを使わせてもらいました。が、STM32にはライブラリが対応してないようなのでAdafruitで。
ライブラリにそのままズバリの「Adafruit SSD1306」があります。Arduino IDE(1.8.1)の「スケッチ > ライブラリをインクルード > ライブラリの管理…」からインストール。
STM32F103C8T6との接続
ライブラリをインストールすると「ファイル > スケッチ例」に「Adafruit SSD1306」が追加されてます。そこから「ssd1306_128x64_spi」を選択。
スケッチのピンのアサイン部分はデフォルトで以下のようになってます。
// If using software SPI (the default case): #define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13
これを接続に合わせて修正。(←接続の図がないのでナンノコッチャですけど…)
// If using software SPI (the default case): #define OLED_MOSI PB13 #define OLED_CLK PB12 #define OLED_DC PB15 #define OLED_CS PB14 #define OLED_RESET PA8
D0とかD1とか何?ってな感じでそーとー混乱しましたけど、整理するとラベルとディスプレイ本体の表示の関係は以下のようになってるようです。
ラベル | 本体の表示 |
---|---|
OLED_MOSI | D1 |
OLED_CLK | D0 |
OLED_DC | DC |
OLED_CS | CS |
OLED_RESET | RES |
ヘッダーファイルの修正
この状態でビルドするとエラーが出るのでlibrariesフォルダにある「Adafruit_SSD1306\Adafruit_SSD1306.h」をテキストエディタで修正。
74行目あたりで128x32用の定義がされてます。
// #define SSD1306_128_64 #define SSD1306_128_32 // #define SSD1306_96_16
ので、128x64を活かすように修正。
#define SSD1306_128_64 // #define SSD1306_128_32 // #define SSD1306_96_16
これで、ビルドおよび実行ができるようになりました!