AE-TYBLE16 とは
先日、秋月で見つけた小型Bluetoothモジュールです。
https://akizukidenshi.com/catalog/g/gK-12339/
どうやら、Nordic社のnRF51822マイコンが搭載されており、
太陽誘電独自のファームウェアが書き込まれているらしいです。
太陽誘電独自のファームウェアを用いることで、UART経由でBluetoothを使うことができ、
Arudino(atmega328P)などと接続できるBluetoothモジュールとして使用できます。
参考記事:小型 Bluetooth LE モジュール AE-TYBLE16とボタン電池でビーコンを作る
なぜArduinoIDEで開発するのか
当初は普通にArduinoと接続して遊ぼうと思ったおり、
太陽誘電のサイトに登録してUARTの詳細仕様を取得しようとしたのですが、
会員登録がうまく進まず、詳細仕様が見れないという状況に陥ってしまいました。
(会員登録フォームがどう見ても企業向けで、自分のアドレスがgmailだからはじかれた?)
仕方なく、本来想定されていないと思いますが、ArduinoIDEを使ってAE-TYBLE16を使い倒そうと思います。
参考にさせたいただいたサイト
秋月電子の BLE モジュール AE-TYBLE16 を Hack
準備
この記事で使用するもの一覧
品名 | 購入先 | 説明 |
---|---|---|
AE-TYBLE16 | https://akizukidenshi.com/catalog/g/gK-12339/ | 今回の主役 |
ST-LinkV2 | https://www.amazon.co.jp/gp/product/B084VMYNF7 | 書き込みのために必要です amazonにはほかにも色違い |
USBシリアル変換器 | https://akizukidenshi.com/catalog/g/gK-14745/ | PCとUART接続を行うために使います。Arduinoなどで代用可。 |
その他、必要なもの(一般的なもの)
品名 | 説明 |
---|---|
ブレッドボード | 回路作成のためには必須 |
ジャンパ線 | オス-オス メス-オス 両方必要です |
はんだ付けセット | はんだ、はんだごて、錫メッキ銅線 |
LED | 今回は抵抗内蔵のLEDを使用しました |
適当な抵抗 | 1kΩ,3.3kΩ,10kΩ の三種類あれば大丈夫でしょう |
WindowsのPC | おそらく皆さん1台くらい持っているでしょう。ST-Linkをつなげるために、USB-Aポートが必要です。 |
Androidスマホ | 正しくBluetooth信号が出ているか確認するためのものです |
使用するソフトウェア
名称 | ダウンロード先 | 説明 |
---|---|---|
ArduinoIDE | https://www.arduino.cc/en/software | 個人的な慣れの問題でv1.8.19を使用しています |
作業手順
ArduinoIDEをインストール
参考手順:https://www.kkaneko.jp/tools/win/arduinoide.html
arduinoIDEにarduino-nRF5を導入
【概要】
AE-TYBLE16の内部モジュール「RF51822」のコンパイラを導入します。
【手順】
- ArduinoIDEで「ファイル」メニューより「環境設定」を開き、「追加のボードマネージャのURL」に
「 https://sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.json 」を追加する。 - ArduinoIDEで「ツール」メニューより「ボード:"Arduino Uno"(選択されているボードは異なる場合あり)」に進み
「ボードマネージャー」を開く - 「Nordic Semiconductor nRF5 Boards」のボードをインストールする。(今回はv0.7.0をインストールしました)
- ボード一覧に「Nordic Semiconductor nRF5 Boards」が追加されるので、その中の「Generic nRF51」を選ぶ
nRF5FlashSoftDeviceの書き込みの準備を行う
【概要】
SoftDeviceとはnRF51822マイコン向けのfirmwareのようです。
arduino-nRF5ではv130が対応しているので、このversionのものをインストールします。
【手順】
-
https://github.com/sandeepmistry/arduino-nRF5/releases/download/tools/nRF5FlashSoftDevice.jar
をダウンロードする。 -
C:\Users\ユーザー名\Documents\Arduino フォルダ内に、tools\nRF5FlashSoftDevice\tool フォルダを作ります。
-
ダウンロードしたjarファイルを、
C:\Users\ユーザー名\Documents\Arduino\tools\nRF5FlashSoftDevice\tool\nRF5FlashSoftDevice.jar
の場所にコピーします -
ArduinoIDEを再起動します。
-
「nRF5 Flash SoftDevice」ボタンを押す
すると、次のようなエラーが出ると思います。
Downloading 'https://www.nordicsemi.com/-/media/Software-and-other-downloads/SoftDevices/S130/s130nrf51201.zip' ...
Error while flashing SoftDevice.
java.io.IOException: Server returned HTTP response code: 403 for URL: https://www.nordicsemi.com/-/media/Software-and-other-downloads/SoftDevices/S130/s130nrf51201.zip
ArduinoIDE内からだとDLできないようなので、
ブラウザでエラー内のURL(https://www.nordicsemi.com/-/media/Software-and-other-downloads/SoftDevices/S130/s130nrf51201.zip )にアクセスし、手動ダウンロードします。
- ダウンロードしたzipを解凍し、「s130_nrf51_2.0.1_softdevice.hex」を
C:\Users\ユーザー名\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.7.0\cores\nRF5\SDK\components\softdevice\s130\hex
フォルダにコピーします。 - 再度、「nRF5 Flash SoftDevice」を選択します。「Error while flashing SoftDevice.」というエラーが出ますが、まだデバイスをつないでいないためなので、問題ありません。
STLinkV2のドライバーをインストールする
https://www.st.com/en/development-tools/stsw-link009.html
にアクセスしてドライバーをダウンロードします。(会員登録が必要です)
ダウンロードができたら、展開し、「dpinst_amd64.exe」を実行します。
AE-TYBLE16をPCと接続し、コードを書きこむ
【AE-TYBLE16に足をつける】
そのままではブレッドボードに差せないので、錫メッキ銅線等をはんだづけして、足を生やします。
【接続回路を作成する】
以下の回路図に従って、STLink-V2と接続します。
【SoftDeviceを書き込む】
「nRF5 Flash SoftDevice」を選択し、書き込みを行います。
【Lチカを書き込む】
ArduinoIDEに以下のコードを入力し、書き込みを行います。
#define LED 4
void setup() {
pinMode(LED,OUTPUT);
}
void loop() {
digitalWrite(LED,HIGH);
delay(1000);
digitalWrite(LED,LOW);
delay(1000);
}
無事にLEDが点滅すればOKです。
Bluetoothを使ってみる
- Arduino IDEで「スケッチ」メニューの「ライブラリをインクルード」「ライブラリを管理」 を開きます。
- BLEPeripheralで検索
- 表示された項目を選択し、Installを押す(今回はv0.4.0)を選択しました
- スケッチ例からiBeaconを選択して開きます
このままでも書き込みは完了しますが、Bluetoothは有効になりません。
これは外部クリスタルの周波数の違いに起因するもので、レジスタの値を書き換える必要があります。
参考:AE-TYBLE16をHack
参考先に従って、
"C:\Users\ユーザー名\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.7.0\cores\nRF5\SDK\components\toolchain\system_nrf51.c"に、外部クリスタルの周波数を変更するコードを追加します。
void SystemInit(void)
{
/* 既存コード省略 */
/* =======ここから追加部分=========*/
if (*(uint32_t *)0x10001008 == 0xFFFFFFFF)
{
NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos;
while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
*(uint32_t *)0x10001008 = 0xFFFFFF00;
NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos;
while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
NVIC_SystemReset();
while (true){}
}
/* =======ここまで追加部分=========*/
SystemCoreClockUpdate();
}
この状態でArduinoIDEに戻り、書き込みを行います。
Bluetooth発信確認
Bluetoothが正しく発信されているか確認するために、Androidスマホを使います。
「nRF Connect」というアプリをインストールし、SCANを開始します。
次の画像のように、UUID=[a196c876-de8c-4c47-ab5a-d7afd5ae7127]のiBeaconが見つかれば成功です。
UART接続
ArduinoIDEで以下のソースコードをコンパイルして書き込みます。
#define LED 4
void setup() {
Serial.begin(9600);
Serial.println("TX test");
pinMode(LED,OUTPUT);
}
void loop() {
if(Serial.available() > 0) {
int data = Serial.read();
Serial.println(data);
if(data=='1'){
digitalWrite(LED,HIGH);
}
if(data=='0'){
digitalWrite(LED,LOW);
}
}
delay(10);
}
USBシリアル変換器とAE-TYBLE16を接続します。
今回使っているCH-340Eは5Vレベルなので、本来は3.3Vに変換しなければなりませんが、5Vのままでも動くのでヨシ!! という考えていきます。
接続出来たらArduinoIDEのシリアルモニタを開き、
ボーレート9600bpsを選びます。
そして、「1」や「0」と入力してEnterキーを押して、
LEDが点滅することを確認しましょう。