車輪の再発明

電子工作とか信号処理とか、やってみたことの記録的なモノ

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)。届いたときにはあまりのちっちゃさにビックリでしたけど、表示はクッキリとして美しいですねこれ。

f:id:b09:20170430214927j:plain f:id:b09:20170430214917j:plain

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

これで、ビルドおよび実行ができるようになりました!

f:id:b09:20170430214941j:plain