SPRESENSE で小型OLEDディスプレイを使ってみた! [SPRESENSE]
SPRESENSEにカメラと小さなディスプレイをつけて、カメラを対象に向けたら写ったものが何か表示する、というよくあるAIカメラのデモを作ってみたいなと思い試しに小型OLEDディスプレイをつけてみました。
なんと、あっけなく1.8V IO で動いてしまいました。レベルシフター不要なのは助かるー♪
使用したライブラリは Adafruit のものです。2つ必要です。一つはSPRESENSE用のGFXライブラリ。次の github から入手できます。
https://github.com/kzhioki/Adafruit-GFX-Library
もうひとつは、Adafruit の OLED用ライブラリです。
https://github.com/adafruit/Adafruit_SSD1306
この2つのライブラリをZIPでダウンロードして、Arduino IDE を使ってインストール。「スケッチ例」 から「ssd1306 _128x32_i2c」を選択してコンパイルしてみます。
最初は、いつものお約束ですが、コンパイルエラーに出くわします。エラーメッセージを見ると次のような内容が出力されています。
Adafruit_SSD1306.cpp を開いて、485行目を見てみます。
どうも、HAVE_PORTREG が定義されているとマズイみたいです。
Adafruit_SSD1306.h 内に HAVE_PORTREG で定義されているところがないか探してみました。案の定あったので、試しに SPRESENSE の場合は定義を無効にするように追記してみました。(57~59行目)
これで無事にコンパイルが通り動作するようになりました。いやはや、なんともあっけない。Arduino は本当によくできたプラットフォームです。
このOLEDディスプレイは、SPRESENSEメインボードとちょうどよい大きさで、アドオンに載せるとコンパクトに可愛くまとまりそうなので、少しがんばってアドオンボードにしてみました。
なかなかいい感じです。これで小型のAIカメラができるかなー。
( ^ω^ )
なんと、あっけなく1.8V IO で動いてしまいました。レベルシフター不要なのは助かるー♪
使用したライブラリは Adafruit のものです。2つ必要です。一つはSPRESENSE用のGFXライブラリ。次の github から入手できます。
https://github.com/kzhioki/Adafruit-GFX-Library
もうひとつは、Adafruit の OLED用ライブラリです。
https://github.com/adafruit/Adafruit_SSD1306
この2つのライブラリをZIPでダウンロードして、Arduino IDE を使ってインストール。「スケッチ例」 から「ssd1306 _128x32_i2c」を選択してコンパイルしてみます。
最初は、いつものお約束ですが、コンパイルエラーに出くわします。エラーメッセージを見ると次のような内容が出力されています。
C:\Documents\Arduino\libraries\Adafruit_SSD1306-master\Adafruit_SSD1306.cpp: In member function 'boolean Adafruit_SSD1306::begin(uint8_t, uint8_t, boolean, boolean)': C:\Documents\Arduino\libraries\Adafruit_SSD1306-master\Adafruit_SSD1306.cpp:485:69: error: 'digitalPinToPort' was not declared in this scope dcPort = (PortReg *)portOutputRegister(digitalPinToPort(dcPin))
Adafruit_SSD1306.cpp を開いて、485行目を見てみます。
484 #ifdef HAVE_PORTREG 485 dcPort = (PortReg *)portOutputRegister(digitalPinToPort(dcPin)); 486 dcPinMask = digitalPinToBitMask(dcPin); 487 csPort = (PortReg *)portOutputRegister(digitalPinToPort(csPin)); 488 csPinMask = digitalPinToBitMask(csPin); 489 #endif
どうも、HAVE_PORTREG が定義されているとマズイみたいです。
Adafruit_SSD1306.h 内に HAVE_PORTREG で定義されているところがないか探してみました。案の定あったので、試しに SPRESENSE の場合は定義を無効にするように追記してみました。(57~59行目)
43 #if defined(__AVR__) 44 typedef volatile uint8_t PortReg; 45 typedef uint8_t PortMask; 46 #define HAVE_PORTREG 47 #elif defined(__SAM3X8E__) 48 typedef volatile RwReg PortReg; 49 typedef uint32_t PortMask; 50 #define HAVE_PORTREG 51 #elif (defined(__arm__) || defined(ARDUINO_FEATHER52)) && !defined(ARDUINO_ARCH_MBED) 52 typedef volatile uint32_t PortReg; 53 typedef uint32_t PortMask; 54 #define HAVE_PORTREG 55 #endif 56 57 #if defined(ARDUINO_ARCH_SPRESENSE) // added by taro 58 #undef HAVE_PORTREG 59 #endif // added by taro
これで無事にコンパイルが通り動作するようになりました。いやはや、なんともあっけない。Arduino は本当によくできたプラットフォームです。
このOLEDディスプレイは、SPRESENSEメインボードとちょうどよい大きさで、アドオンに載せるとコンパクトに可愛くまとまりそうなので、少しがんばってアドオンボードにしてみました。
なかなかいい感じです。これで小型のAIカメラができるかなー。
( ^ω^ )
SONY SPRESENSE メインボード CXD5602PWBMAIN1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
SONY SPRESENSE カメラモジュール CXD5602PWBCAM1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
コメント 0