LoginSignup
2
0

More than 5 years have passed since last update.

AVTOKYO 2017 BADGE で OLEDプログラム

Last updated at Posted at 2018-04-21

この記事は
「SPI SD1306 OLED を STM32Duino ( Arduino IDE + One of BluePill : Robotdyn STM32F103 Dev.Board )で動かす」
https://qiita.com/nanbuwks/items/25ccb1ac38ebb237f94a.md
を再構成したものです

AVTOKYO 2017 BADGE は、0.96inのディスプレイがついています。OLEDディスプレイで、SPIでSTMマイコンに接続しています。

サンプルプログラム

STM32用のライブラリの中にあるサンプルプログラム


~/Arduino/hardware/Arduino_STM32-master/STM32F1/libraries/Adafruit_SSD1306/examples$ ls
ssd1306_128x32_i2c  ssd1306_128x64_i2c_STM32
ssd1306_128x32_spi  ssd1306_128x64_spi

がありますが、ssd1306_128x64_spiを使ってみます。
image

ライブラリインストール

あらかじめ、Adafruit GFX Libraryをライブラリマネージャからインストールしておこう。

また、
https://qiita.com/nanbuwks/items/ba37f049f45378da0e2b
これになぞって、

Arduino_STM32-masterの中にある STM32F1/libraries/Adafruit_SSD1306/Adafruit_SSD1306_STM32.cpp
を修正

(2018/11/1時点の最新版で確認したところ、この作業は必要なくなりました。)


#include <avr/pgmspace.h>
//#ifndef __SAM3X8E__ || __STM32F1__
 //#include <util/delay.h>
//#endif
#include <stdlib.h>

//#include <HWIRE.h>
//#include <HardWire.h>
//HardWire HWIRE(1,I2C_FAST_MODE); // I2c1
HardWire HWIRE(2,I2C_FAST_MODE); // I2c2

を以下のように書きなおす。


#include <avr/pgmspace.h>
//#ifndef __SAM3X8E__ || __STM32F1__
 //#include <util/delay.h>
//#endif
#include "Wire.h"
#define WIRE_WRITE HWIRE.write

#include <stdlib.h>

//#include <HWIRE.h>
//#include <HardWire.h>
//HardWire HWIRE(1,I2C_FAST_MODE); // I2c1
HardWire HWIRE(2,I2C_FAST_MODE); // I2c2

としておきます。

コンパイル


/tmp/arduino_modified_sketch_898425/ssd1306_128x64_spi.ino:22:30: fatal error: Adafruit_SSD1306.h: No such file or directory
 #include <Adafruit_SSD1306.h>
                              ^
compilation terminated.

となった。
ssd1306_128x64_spi.ino スケッチの、


#include <Adafruit_SSD1306.h>


#include <Adafruit_SSD1306_STM32.h>

としたらコンパイルが通るようになった。

ピンアサインの設定

さて、AVTOKYO 2017 BADGEのピンアサインに合わせてssd1306_128x64_spi.ino スケッチを、以下のように変更


// If using software SPI (the default case):
#define OLED_MOSI  PA7
#define OLED_CLK   PA5
#define OLED_DC     PA6
#define OLED_CS     PA4
#define OLED_RESET  PA3 
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);


/* Uncomment this block to use hardware SPI
#define OLED_DC     6
#define OLED_CS     7
#define OLED_RESET  8
Adafruit_SSD1306 display(OLED_DC, OLED_RESET, OLED_CS);
*/

こうすると、software SPIの設定になります。
なお、hardware SPIを使おうとしましたが、うまくいきまんでした。

ピンアサインを変更した後、コンパイルエラーが出るようになった。


STM32_ssd1306_128x64_I2C:65: error: #error ("Height incorrect, please fix Adafruit_SSD1306.h!");
 #error("Height incorrect, please fix Adafruit_SSD1306.h!");
  ^
exit status 1

該当箇所は


#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#end

となっていたので

Adafruit_SSD1306.h

の該当箇所を書き換える。


   #define SSD1306_128_64
//   #define SSD1306_128_32
//   #define SSD1306_96_16

上記のように SSD1306_128_64 を有効にするとエラーが出なくなる。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0