SSブログ

SPRESENSE で小型OLEDディスプレイを使ってみた! [SPRESENSE]

SPRESENSEにカメラと小さなディスプレイをつけて、カメラを対象に向けたら写ったものが何か表示する、というよくあるAIカメラのデモを作ってみたいなと思い試しに小型OLEDディスプレイをつけてみました。


DSC_0917.JPG


なんと、あっけなく1.8V IO で動いてしまいました。レベルシフター不要なのは助かるー♪

使用したライブラリは Adafruit のものです。2つ必要です。一つはSPRESENSE用のGFXライブラリ。次の github から入手できます。


https://github.com/kzhioki/Adafruit-GFX-Library
Adafruit-GFX-Library-for-Spresense.png


もうひとつは、Adafruit の OLED用ライブラリです。


https://github.com/adafruit/Adafruit_SSD1306
2020-02-13 (1).png


この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

SONY SPRESENSE メインボード CXD5602PWBMAIN1

  • 出版社/メーカー: スプレッセンス(Spresense)
  • メディア: Tools & Hardware






SONY SPRESENSE カメラモジュール CXD5602PWBCAM1

SONY SPRESENSE カメラモジュール CXD5602PWBCAM1

  • 出版社/メーカー: スプレッセンス(Spresense)
  • メディア: Tools & Hardware




タグ:OLED Spresense
nice!(32)  コメント(0) 
共通テーマ:趣味・カルチャー