AE-TYBLE16 について
秋月電子通商で販売されている、超小型 (DIP16 300mil とほぼ同じ) の Bluetooth LE (BLE) モジュールです。
http://akizukidenshi.com/catalog/g/gK-12339/
中身は、Nordic の nRF51822 (BBC micro:bit とかと同じ) が使われていて、電源電圧も 1.6V からと、電池駆動には最適なモジュールとなっています。
何より、すごく小さい。色んな所に押し込めて、CR2032 とかで動かしてみたくなっちゃう大きさ。
ただ、AE-TYBLE16 で使われている 太陽誘電の EYSGJNAWY-WX というモジュールは、本来 UART を経由して使うものであって、単体でファームウェアを書き換えたりできるものではなさそうですね。
nRF51822 + Arduino
このモジュールを使って、LINE Things 対応デバイスを作れたら面白いなと思って少し調べてみました。
できたら、お手軽に Arduino とか mBed で開発できるような環境が良いなと...
nRF51 が乗ってるということは、すでに Arduino のボードライブラリ (arduino-nRF5) もあるし、ご丁寧にボード上に JTAG の端子まででているので、きっとできるんだろうなーと思ってたら、ありました。
秋月電子の BLE モジュール AE-TYBLE16 を Hack - Qiita
この通り動かしたら、あっさりLチカ出来てしましいました。
ちなみに、mBed 方面でも hack されているようで、こちらに結構詳しい情報が乗っています。
TYBLE16 Module / Akizuki | Mbed
arduino-nRF5 + BLEPeripheral
しかしですよ、BLEPeripheral というライブラリ を使って、BLE の電波を飛ばそうとしたら、一向に電波が飛んでくれないんですよ。
いろいろいじっているうちに、以下のことがわかりました
- HF クロックが 32MHz で、Nordic の評価ボードの 16MHz と異なる
- LF クロックは外付けクロックは乗っていないので、内部 RC オシレーターを使う
- Nordic のチップは SoftDevice と言われる BLE スタック+いろいろを使うことができるが、バージョンが S130 じゃないと BLEPeripheral の bonding がうまく動かない
まあ、躓いたのはこのあたりで、これらをちゃんと設定してあげたら、無事に Arduino で BLE の電波を飛ばしてスマホからつなぐことができるファームウェアを書くことが出来ました。
以下に、動いた感じの動画があります。
https://twitter.com/hktechno/status/1078175674311925760
ちなみに、nRF51822 なので、RAM は 32kB で Cortex-M0 なので結構非力です。
BLE で強力なことやりたい人は、nRF52 系のモジュールとか ESP32 を使うことをおすすめします。
Arduino-nRF5 + BLEPeripheral を動かすまでの手順
⚠注意 以下の手順を行うと、初期状態で書き込まれていたオリジナルのファームウェアに戻すことは出来ません。
必要なもの
- Segger J-Link (一度 UICR の設定をしたあとは ST-Link でも可)
- nRF5x Command Line Tools
Board Settings
- Board: Generic nRF51
- Chip: 32 kB RAM, 256 kB flash (xxac)
- Low Frequency Clock: RC Ocillator
- SoftDevice: S130
- Programmer: J-Link
SoftDevice の書き込み
ボードマネージャーから、arduino-nRF5 をインストールして、GitHub の README に乗ってる手順通りに nRF5FlashSoftDevice.jar
を導入します。
しかし、エラーになって書き込めないはずなので、Nordic のサイト から S130 の SoftDevice をダウンロードしてきて、中身の s130_nrf51_2.0.1_softdevice.hex
を ~/Library/Arduino15/packages/sandeepmistry/hardware/nRF5/0.6.0/cores/nRF5/SDK/components/softdevice/s130/hex
に入れてください。
そうすると、Arduino のツールから SoftDevice が書き込めるようになります。Bonding が必要な場合 (LINE Things の場合必須) は、必ず S130 を使ってください。
UICR の設定
AE-TYBLE16 は、前述の通りクロックが開発ボードと違うので、UICR を書き換えておく必要があります。
-
nrfjprog -i
で J-Link のシリアル番号を取得して - 以下のコマンドを実行
nrfjprog --snr <serial_number> --memwr 0x10001008 --val 0xFFFFFF00
- Set HFCLK: XTALFREQ to 32MHz
これをしないと、Arduino で普通のスケッチは動くけど、BLE Peripheral を有効にしても正しく動かない状態になります。
LINE Things Starter for AE-TYBLE16
以下の GitHub に置いておきます。README の手順に従って書き込むと、LINE Things Starter が動きます。
LED とスイッチが必要です。
LIFF は、オリジナルの LINE Things Starter を使ってください。
さいごに
⚠注意 以上の手順を一度実行すると、最初に書き込まれていた UART で遊べるファームウェアに戻せなくなるので気をつけてください。
また、明らかに非正規の方法でファームウェアを書き換えているので、誰も何も保証してくれないので、自己責任で行ってください。
それでもよければ、楽しく Arduino IDE で BLE の開発ができます。
LINE Things Developer Trial を使うと簡単にスマホ側のアプリも開発できるので、是非試してみてください。
追記 (2018/01/30)
面実装用のユニバーサル基板を使って、ボタン電池 CR2032 で動作する LINE Things Starter 向けのボードを作ってみました。
スイッチ、LED、あと SOP-8 の温度計 IC を載せてみました。
デバッグ用のピンフレームも出したので、このままプログラムの書き換えができます。
この小ささで、BLE 通信ができるのはいろいろ用途が広がりそうです。