Arduino Nano互換品を用いて、Adafruit社から出ているSSD1306互換品の128 x 64ピクセルモノクロOLEDディスプレイと、Adafruit GFX Libraryのエラーで3時間ほど格闘したので、解決した際の方法を記します。
SSD1306、Adafruit GFX Libraryとはなにか
SSD1306は、Adafruit製のモノクロミニディスプレイ向けディスプレイコントローラーです。これを搭載したミニディスプレイは、いくつかのバリエーションが展開されています。
Arduino然り、Adafruit社の製品にも中国製の互換マシンが多く出回っており、今回はSSD1306互換の128 x 64ピクセルモノクロOLEDディスプレイを使用しました。Arduino用のミニディスプレイとしてはおそらく一番広く使われているものだと思います。日本でも、秋月電子やAmazonなどで容易に入手することが可能です。
Arduino IDE用にAdafruitから専用のライブラリAdafruit_SSD1306が配布されています。
標準ライブラリのWire.h
とともにSSD1306コントローラとの通信を行うAdafruit_SSD1306ライブラリに加えて必要で、SSD1331などAdafruitの他のディスプレイ系製品でも使用される映像処理担当のライブラリがAdafruit GFX Libraryです(たぶん)。
エラーの内容
Adafruit GFX Library内で呼び出されている、adafruit_i2cdevice.h
のincludeに失敗しました。本来、各ライブラリで呼び出されるヘッダーファイルは同じライブラリに含まれているか、標準でインストールされているはずです。
//29行目以降
#include <Adafruit_GFX.h>
#include <Adafruit_I2CDevice.h>//エラーが起きていた箇所
#include <Adafruit_SPIDevice.h>
#include <SPI.h>
#include <Wire.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
自前のコード冒頭に以上のように記述すると、exit status 1が吐き出され、adafruit_i2cdevice.h
がinclude出来なかったと表示されました。
Adafruit GFX Libraryの再インストール、バージョンの変更などを何度も試しましたたが、解決しませんでした。
解決方法
Adafruitのウェブサイトで公開されている、SSD1306のチュートリアルを読むと、以下のように書かれています。
If using an earlier version of the Arduino IDE (prior to 1.8.10), also locate and install Adafruit_BusIO (newer versions will install this dependency automatically).
要は、バージョン1.8.10以前のArduino IDEを使用している場合は、Adafruit GFX Libraryともう一つのAdafruit BusIOの依存関係がデフォルトでインストールされないから、自分で探してインストールしなさいということです。
私の開発環境はVSCode+Arduino用拡張機能で、使用していたArduino IDEはバージョン1.8.12でしたが、ものは試しとAdafruit BusIOをインストールしてみたところ、このエラーは解消されました。
参考
- [ArduinoでOLEDディスプレイを試す]
(https://qiita.com/jakalada/items/8f83d07291d984a31633) - Monochrome OLED Breakouts - Adafruit