SpresenseでBLE1507 (BLE for Spresense)を使い、peripheralとしてBLE接続を行います。また、ILI9341搭載2.8インチSPI制御タッチパネル付TFT液晶 MSP2807に文字を表示します。

SpresenseとBLE1507の接続

BLE1507はSpresenseに次のようにAdd-onします。拡張ボードを使用しているため拡張ボードのJP10の1-2番ピンジャンパーピンを挿入しています。

現象: peripheralとして動作させたところ、bt_enable()で次のエラーが戻されました。

[NRF_LOG_SEVERITY_ERROR][nrf_sdh_ble] sd_ble_cfg_set() returned NRF_ERROR_TIMEOUT when attempting to set BLE_CONN_CFG_GAP.

原因と処置: Spresenseではメインボードと拡張ボードにそれぞれUART接続に使用できる端子が1系統用意されています。メインボードと拡張ボードを組み合わせた場合は、出荷時には自動的に拡張ボードのUARTを使用します。組み合わせた状態でメインボード側のUARTを使用する場合、拡張ボードのJP10の1-2番ピンに2.54mmピッチのジャンパーピンを挿入します。

peripheralスケッチの作成

peripheralスケッチは「TomonobuHayakawa/Spresense-Playground」を使用します。ファイルの名称は「Spresenseble_peripheral.ino」としました。BLE関連のSDKは「Spresense SDK Library」を参照します。

android携帯とBLE1507とのBLE接続

Android携帯でアプリ「LightBlue」とBLE1507とでBLE接続を行います。peripheralコードを実行すると次のようなプロパティで接続されます。

  • Advertised name: SPR-PERIPHERAL
  • Device Address: CD:AB:14:06:84:19
  • Service UUID: 00003802-0000-1000-8000-00805f9b34fb
  • Characteristic UUID: 00004a02-0000-1000-8000-00805f9b34fb

BLE1507に接続するとアプリ「LightBlue」には次のように表示されます。

Characteristic UUIDをタップすると次のように表示されます。

Arduino IDEのシリアルポートには次のメッセージが表示されます。

SpresenseとTFT液晶の接続

Spresense拡張ボードとILI9341搭載2.8インチSPI制御タッチパネル付TFT液晶 MSP2807を次のように接続します。Spresense拡張ボードのジャンパーピン「JP1」を3.3Vに接続します。3.3Vにレベルシフトされます。

拡張ボード TFT液晶
AREF LED
D13 (SCK) SCK
D12 (CIPO) SDO(MISO)
D11 (COPI) SDI(MOSI)
D10 (SS) CS
D9 RESET
D8 DC
3.3V Power VCC
Ground GND

SpresenseとILI9341搭載2.8インチSPI制御タッチパネル付TFT液晶 MSP2807との接続画像を次に示します。

表示スケッチの作成

  1. ArduinoIDEにAdafruit_ILI9341ライブラリをインストールするために、メニュー「ツール」→「ライブラリを管理」を選択します。
  2. 表示されたライブラリマネージャで「Adafruit_ILI9341」を検索して、「Adafruit_ILI9341」をインストールします。
  3. 表示スケッチは次に示すスケッチ例「graphicstest」を参照して作成します。
  4. 作成した表示スケッチ「SpresenseILI9341.ino」を次に示します。
  5. SpresenseILI9341.ino

    #include "SPI.h"
    #include "Adafruit_ILI9341.h"
    
    #define TFT_CS 10
    #define TFT_RST 9
    #define TFT_DC 8
    Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
    
    void setup() {
      Serial.begin(115200);
      Serial.println("ILI9341 text start!");
    
      tft.begin();
      tft.setRotation(3);
      testText();
    }
    
    void loop(void) {
    }
    
    unsigned long testText() {
      tft.fillScreen(ILI9341_BLACK);
      unsigned long start = micros();
      tft.setCursor(0, 0);
      tft.setTextColor(ILI9341_WHITE);  tft.setTextSize(1);
      tft.println("Hello World!");
      tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2);
      tft.println(1234.56);
      tft.setTextColor(ILI9341_RED);    tft.setTextSize(3);
      tft.println(0xDEADBEEF, HEX);
      tft.println();
      tft.setTextColor(ILI9341_GREEN);
      tft.setTextSize(5);
      tft.println("Groop");
      tft.setTextSize(2);
      tft.println("I implore thee,");
      tft.setTextSize(1);
      tft.println("my foonting turlingdromes.");
      tft.println("And hooptiously drangle me");
      tft.println("with crinkly bindlewurdles,");
      tft.println("Or I will rend thee");
      tft.println("in the gobberwarts");
      tft.println("with my blurglecruncheon,");
      tft.println("see if I don't!");
      return micros() - start;
    }
    
    

表示スケッチの実行

作成した表示スケッチを実行するとILI9341搭載2.8インチSPI制御タッチパネル付TFT液晶に次のテキストが表示されます。