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」を選択してコンパイルしてみます。

最初は、いつものお約束ですが、コンパイルエラーに出くわします。エラーメッセージを見ると次のような内容が出力されています。



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