スマートウォッチ

2021年04月16日

SPI接続のスマートウォッチ用ディスプレイをnRF52840 Express で動かす

Aliexpress で見つけたスマートウォッチ用のディスプレイをAdafruit ItsyBitsy nRF52840 Express にて動かす方法です。

Evernote にいろいろと調べてやり方などをメモしていますが、Blog に書くのもたまには良いかと思って書いていきます。

前提

Adafruit ItsyBitsy nRF52840 Express を使うために必要な設定はここでは触れませんので、適宜インストールなどを行ってください。

使用するディスプレイ

Aliexpress で見つけたスマートウォッチ用のディスプレイです。外観は下記のようなものとなっています。
SPI 接続で使える状態のものなのでお手軽に使うことができます。

20210412_1



このディスプレイはコントローラーにGC9A01 を使っておりそれに対応したライブラリを使うと楽に操作が行えるでしょう。 入力電圧については3.3V をそのまま接続できるため、下記ボードの3.3V を配線しました。

Adafruit ItsyBitsy nRF52840 Express で使うにあたって

Arduino IDE やその他の方法でライブラリのインストールを行います。
今回使うライブラリはArduino GFX Graphics library です。
もし、ライブラリマネージャーからインストールする場合には下記のライブラリを検索してください。


20210412_2



Adafruit にもAdafruit GFX Library がありますが、Arduino の方がソースコードが分かりやすかったためこちらを使うことになりました。とはいってもソースコードをたどるとAdafruit のライブラリを参考にしていたりそこにたどり着くのですが……

各ピンの接続

Adafruit ItsyBitsy nRF52840 Express ディスプレイ(GC9A01)
GND GND
3V VCC
SCK(4) SCL
MOSI(3) SDA
空いているIO(RESとして使う) RES
空いているIO(DCとして使う) DC
空いているIO(CSとして使う) CS
空いているIO BLK

BLK はバックライトのオンオフのためのピンとなっています。面倒なときは解放状態でも問題ありません。
今回はCS を7ピンに、DC を10ピンにRES を9ピンにそれぞれ繋ぎました。

ソースコード

下記のソースコードはArduino GFX Graphics library を入れると一緒に手に入るサンプルコードのHelloWorld を今回の接続に合わせて変えたものです。
出力フォントについては今回は触れません。詳しく知りたい方はArduino_GFX クラスにあるsetFont まわりを調べてください。

/******************************************************************************* * Start of Arduino_GFX setting ******************************************************************************/ #include <Arduino_GFX_Library.h> // Definition for GPIO. #define TFT_CS 7 #define TFT_DC 10 #define TFT_RST 9 // #define TFT_BL 6 // General hardware SPI Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS); // GC9A01 IPS LCD 240x240 Arduino_GC9A01 *gfx = new Arduino_GC9A01(bus, TFT_RST, 0 /* rotation */, true /* IPS */); /******************************************************************************* * End of Arduino_GFX setting ******************************************************************************/ void setup(void) { gfx->begin(); gfx->fillScreen(BLACK); #ifdef TFT_BL pinMode(TFT_BL, OUTPUT); digitalWrite(TFT_BL, HIGH); #endif gfx->setCursor(10, 10); gfx->setTextColor(RED); gfx->println("Hello World!"); delay(5000); // 5 seconds } void loop() { gfx->setCursor(random(gfx->width()), random(gfx->height())); gfx->setTextColor(random(0xffff)); gfx->setTextSize(random(9) /* x scale */, random(9) /* y scale */, random(3) /* pixel_margin */); gfx->println("Hello World!"); delay(1000); // 1 second }

表示されるもの


20210412_3



こんな感じに表示されます。サンプル通りです。

続きを読む

rabbitcats at 18:00|PermalinkComments(0)