Arduino環境でAE-TYBLE16のBLEを始める(その1:接続/非接続)

目的

AE-TYBLE16こと太陽誘電製EYSGJNAWY-WX(SoCはNordic Semiconductor製nRF51822)のBLE機能のステップ1として,接続と非接続確認を実施する.

  1. 事前にSoftDevice書込み等,Arduino IDEで作成したArduinoスケッチが書込みできる環境の整備:
    STM32 Nucleoを用いたnRF51向けのArduino開発環境をつくる
  2. GPIOやADC,シリアルインターフェースの機能確認:
    Arduino環境でAE-TYBLE16のピンファンクションを確かめる
  3. BLEの接続/非接続の確認(本記事)
  4. BLE経由のLチカ確認:
    Arduino環境でAE-TYBLE16のBLEを始める(その2:BLE経由のLチカ)
  5. 照度センサー明暗判定原理試作:
    Arduino環境でAE-TYBLE16のBLEペリフェラルデバイス~明暗判定編~
  6. リードスイッチドア開閉判定原理試作:
    Arduino環境でAE-TYBLE16のBLEペリフェラルデバイスを作る~ドア開閉判定編~

結論

BLEPeripheralライブラリーのExampleのstarterスケッチと,Nordic SemiconductorのiOSアプリnRF Connect for Mobile を用いて,ペリフェラルとして動作しているAE-TYBLE16に接続/非接続の動作が確認できた.

接続/非接続時のコンソールログ出力

起動時画面 接続中画面

本記事で紹介するおもな環境は下表のとおり:

ハードウェア名称 規格 製造会社 備考
BLEモジュール AE-TYBLE16 秋月電子通商 購入時1,280JPY
太陽誘電製EYSGJNAWY-WX(SoCはNordic Semiconductor製nRF51822)
デバッガー NUCLEO-L053R8STSW-LINK009 2.0.2 STMicroelectronics タダ
201X年にSTの営業が会社に来たときのもの,ST-Link/V2-1として使用する
BLEモジュール用ソケット 2227P-16G-03 寬德 購入時100JPY
ハンダ不要でブレッドボード挿入に使える
ブレッドボード BB-801 万捷电子 ブレッドボードなら何でもよい
ジャンパーケーブル(オス・メス) DG01032-0024-RD-015など 協威亞洲 間違えないように色をわけたほうがよい
C-17228のほうが安い
USBケーブル(mini B) LDUC1011-1.5m EverU Electronics 充電専用でなければ何でもよい
ホストPC マザーボードB450 AORUS M,CPU:Ryzen 7 3700X,メモリー:32[GB] -
iPhone MXD22J/A A2296 Apple
IDE Arduino IDE 1.8.19 ARDUINO
nRF5ライブラリー Nordic Semiconductor nRF5 Boardsパッケージ Sandeep Mistry
BLEライブラリー BLEPeripheralパッケージ 0.4.0 Sandeep Mistry
Nordic SoftDevice S130 2.0.1 Nordic Semiconductor BLEプロトコルスタック
BLE確認アプリ nRF Connect for Mobile 2.5.3 Nordic Semiconductor ASA
ホストPCのOS Windows 10 Pro 64ビット版 Microsoft 英語版(インターナショナル)
iOS 16.1.1 Apple

また,nRF5ライブラリーの設定は以下のとおり:

項目名 設定値 備考
ボード Generic nRF51
Chip 32kB RAM, 256kB flash (xxac) データシートよりEYSGJNZWYは32kB
SoftDevice S130
Low Frequency RC Oscillator データシートよりEYSGJNZWYは水晶振動子が未実装で内蔵RC発振回路で代替指示
ポート COMn 環境による
Programmer ST-Link V2-1 (ST-Link On-Board) ☞以前の私の記事参照

詳細

ハードウェア

動作確認で,コンソールログ(UARTのTX,AE-TYBLE16が送信側)が接続されているほうが望ましい.

前回のAE-TYBLE16のピンファンクションを確かめるのUART確認時と同じく,UARTのTX(AE-TYBLE16が送信側)を接続する.接続ポートは,デフォルトの%USERPROFILE%\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.7.0\variants\Generic\variant.hに定義されている

/*
 * Serial interfaces
 */
// Serial
#define PIN_SERIAL_RX       (0) // P0.00
#define PIN_SERIAL_TX       (1) // P0.01

のとおり,P0.01(DIP6)とし,ST-Link/V2-1のCN3のRXに接続して確認した.

結線写真 結線図

ソフトウェア

BLEライブラリーのインストール

Sandeep Mistry氏のライブラリーを使用する.追加方法は,ほかのライブラリー追加方法と同じ.

  1. ツールメニューのライブラリを管理...から,ライブラリマネージャを起動する
    ライブラリマネージャの起動
  2. bleperiなどで検索して,BLEPeripheralライブラリーを検索してインストールする
    BLEPeripheralライブラリーの検索とインストール

starterスケッチの実行

BLEPeripheralライブラリーで用意されているスケッチのうち,一番簡単なstarterでBluetoothの接続/非接続を試みる.

BLEPeripheralライブラリーで用意されているExamples

starterは以下のとおり,Bluetoothでの接続/非接続時にコンソールにその結果を表示するように作られている.

// Copyright (c) Sandeep Mistry. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

// Import libraries (BLEPeripheral depends on SPI)
#include <SPI.h>
#include <BLEPeripheral.h>

// define pins (varies per shield/board)
#define BLE_REQ   10
#define BLE_RDY   2
#define BLE_RST   9

// create peripheral instance, see pinouts above
BLEPeripheral blePeripheral = BLEPeripheral(BLE_REQ, BLE_RDY, BLE_RST);

// uuid's can be:
//   16-bit: "ffff"
//  128-bit: "19b10010e8f2537e4f6cd104768a1214" (dashed format also supported)

// create one or more services
BLEService service = BLEService("fff0");

// create one or more characteristics
BLECharCharacteristic characteristic = BLECharCharacteristic("fff1", BLERead | BLEWrite);

// create one or more descriptors (optional)
BLEDescriptor descriptor = BLEDescriptor("2901", "value");

void setup() {
  Serial.begin(115200);
#if defined (__AVR_ATmega32U4__)
  delay(5000);  //5 seconds delay for enabling to see the start up comments on the serial board
#endif

  blePeripheral.setLocalName("local-name"); // optional
  blePeripheral.setAdvertisedServiceUuid(service.uuid()); // optional

  // add attributes (services, characteristics, descriptors) to peripheral
  blePeripheral.addAttribute(service);
  blePeripheral.addAttribute(characteristic);
  blePeripheral.addAttribute(descriptor);

  // set initial value
  characteristic.setValue(0);

  // begin initialization
  blePeripheral.begin();
}

void loop() {
  BLECentral central = blePeripheral.central();

  if (central) {
    // central connected to peripheral
    Serial.print(F("Connected to central: "));
    Serial.println(central.address());

    while (central.connected()) {
      // central still connected to peripheral
      if (characteristic.written()) {
        // central wrote new value to characteristic
        Serial.println(characteristic.value(), DEC);

        // set value on characteristic
        characteristic.setValue(5);
      }
    }

    // central disconnected
    Serial.print(F("Disconnected from central: "));
    Serial.println(central.address());
  }
}

nRF Connect for Mobileを使用して接続/非接続すると,コンソールにログが出力される.

接続/非接続時のコンソールログ出力

nRF Connect for Mobileのインストール

BLE確認アプリとして,Nordic SemiconductorのnRF Connect for Mobileを使用する*1

  1. App StoreにてnRF Connect for Mobileを検索してインストールする
    App StoreでのnRF Connect for Mobile
  2. インストール後にnRF Connect for Mobile起動時にBluetoothのアクセスを許可する
  3. nRF Connect for Mobile起動後,Scanner画面になるため,starterスケッチを書き込んだAE-TYBLE16を探す(starterスケッチのとおり名称:local-name,サービス:FFF0が該当する)
    local-nameかつServices: FFF0を探す
  4. Connectをタップして接続すると,AE-TYBLE16のコンソールログに接続情報が出るとともに,nRF Connect for Mobileに以下のような画面が出る
    接続情報
  5. Disconnectをタップして非接続とすると,AE-TYBLE16のコンソールログに接続情報が出るとともに,nRF Connect for Mobileに以下のような画面が出る
    非接続情報

また,情報は以下の5つの画面から構成され,接続時には以下のような表示となった.

クライアント情報 サーバー情報
ログ情報 DFU(デバイスファームウェアアップデート)情報

改訂履歴

# 日付 内容
1 2023/01/04 誤記修正

データシート等

  1. 秋月電子通商AE-TYBLE16商品添付カード,2017/10/23発行

参考サイト

  1. AE-TYBLE16をArduinoとしてBLE通信 - Qiita

リンク先はすべて2023/01/03現在のもの

*1:今回はiOS版を使用するが,AndroidnRF Connect for Mobileももちろん存在する.