Edited at

小型 Bluetooth LE モジュール AE-TYBLE16 で LINE Things Starter してみる


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 を動かすまでの手順

⚠注意 以下の手順を行うと、初期状態で書き込まれていたオリジナルのファームウェアに戻すことは出来ません。


必要なもの


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 とスイッチが必要です。

https://github.com/techno/line-things-snippets/tree/master/tyble16/arduino

LIFF は、オリジナルの LINE Things Starter を使ってください。

https://github.com/line/line-things-starter


さいごに

⚠注意 以上の手順を一度実行すると、最初に書き込まれていた UART で遊べるファームウェアに戻せなくなるので気をつけてください。

また、明らかに非正規の方法でファームウェアを書き換えているので、誰も何も保証してくれないので、自己責任で行ってください。

それでもよければ、楽しく Arduino IDE で BLE の開発ができます。

LINE Things Developer Trial を使うと簡単にスマホ側のアプリも開発できるので、是非試してみてください。


追記 (2018/01/30)

面実装用のユニバーサル基板を使って、ボタン電池 CR2032 で動作する LINE Things Starter 向けのボードを作ってみました。

スイッチ、LED、あと SOP-8 の温度計 IC を載せてみました。

デバッグ用のピンフレームも出したので、このままプログラムの書き換えができます。

この小ささで、BLE 通信ができるのはいろいろ用途が広がりそうです。