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との接続画像を次に示します。
表示スケッチの作成
- ArduinoIDEにAdafruit_ILI9341ライブラリをインストールするために、メニュー「ツール」→「ライブラリを管理」を選択します。
- 表示されたライブラリマネージャで「Adafruit_ILI9341」を検索して、「Adafruit_ILI9341」をインストールします。
- 表示スケッチは次に示すスケッチ例「graphicstest」を参照して作成します。
- 作成した表示スケッチ「SpresenseILI9341.ino」を次に示します。
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液晶に次のテキストが表示されます。