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