LoginSignup
20
21

More than 5 years have passed since last update.

小さなLine simple beaconを作る (nRF51822使用)

Last updated at Posted at 2017-02-19

概要

  • 17mm * 7mm * 2mmくらいのサイズのモジュールでLine Simple beaconを実現できました。
  • 使ったBLEモジュールはBVMCN5103 (Braveridge社製)です。
  • githubにソースおきました。

IMG_2329.JPG

はじめに

2017年2月17日に、LINEがLine beaconの仕様を公開し、だれでもLine beaconを作ることができるようになりました。

LINE Engineer Blogの記事ではRaspberry PiやOSXでのbeaconの作成方法が紹介されています。しかし、これらのデバイスは少し大きいですよね。物理的にも大きいですし、消費電力も大きいですし、お値段も高価です。

そこで、もう少し小さなLine Beaconを作ることができないかと考えました。

Line Simple Beaconとは

公式ブログに詳しい記載があります。以下の流れでLINE simple beaconを使ってイベントを発生させることができます。

  1. [開発者] LINE botと紐付いたLINE simple beaconを設置する。
  2. [ユーザ] LINE botと友達になる。
  3. [ユーザ] LINE simple beaconが設置されている場所に移動する。
  4. [開発者] 3をトリガにして、LINE botがwebhookを投げる。
  5. [開発者] webhookを受けて、メッセージを送ったりデータを取得したり...

小さなBLEモジュール

BLE搭載のモジュールは様々な物がありますが、今回はBraveridge社から発売されているBVMCN5103を使用しました。
このモジュールにはNordic Semiconductor社製のnRF51822というBLEチップが搭載されており、モジュールとして技適を取得しています。
開発にはNordic社のSDKを使用します。

ただ、このモジュールは基板に実装することを前提に開発されており、そのまま使用するには細かいはんだ付けが必要です。このモジュールを使いやすくしたブレークアウトボードが発売されています。また、Braveridge社製以外のnRF51822搭載開発ボードでも開発が可能です。(今回ははんだづけをして、必要な線を直接引き出しました)

例:
Brageridgeのブレークアウトボード
Hoshidenのブレークアウトボード
Nordicの評価ボード

OSXでの開発方法

nRF51822をOSXで開発するためにSegger Embedded StudioというIDEと、Nordic社のマイコン用のSDKを使用しました。開発環境を作る詳細はNordic社のブログに従います。(nRF51822前提のブログではないので、ところどころ読み替える必要があります。それは別途Qiitaに書きたいです、、、)

ひとまずLINE beaconをビルドしたいだけであれば、以下の手順でビルドできます。
1. Segger Embedded Studioをダウンロードする。
2. JLink開発環境をインストールする。
3. Nordic社のSDK(ver12.2)をダウンロードする。
4. githubからLine Simple Beaconのソースコードをダウンロードし、<nRF5 SDK>/examples/ble_peripheral/ble_app_line_simple_beaconに配置する。
5. ble_app_line_simple_beacon/pca10028/s130/ses/ble_app_template_pca10028_s130.emProjectを開き、ビルド。

モジュールへの書き込み方法

書き込みにはJLink Liteという書き込み用ボードが必要です。このあたりが面倒ですね。。
このあたりが参考になるかもしれません。
BLEデバイスの開発環境を構築する(nRF51822 & MacOS編)

BLEのadvertiseをLINE仕様に合わせる。

LINE simple beaconの仕様はこちらに記載されています。
https://github.com/line/line-simple-beacon/blob/master/README.ja.md

ポイントはこんな感じです。
1. アドバタイズのUUIDを0xFE6Fにする。
2. アドバタイズに含めるServiceDataについて、Service UUIDを0xFE6Fにする。
3. アドバタイズに含めるServiceDataのDataについて以下のようにする。

  • 1byte目: 0x02 (LINE Simple Beacon FrameのFrame Type)
  • 2byte目-7byte目: Line Botから発行されたLINE Simple Beacon FrameのHWID
  • 8byte目: 0x7F (Beaconの強さ。0x7F固定)
  • 9byte目以降: Beaconにメッセージを含めることができる。現在は使われていない。

上記に従ってbyte列を定義し、

#define APP_ADV_DATA_LENGTH      0x0E /* m_beacon_info全体のbyte長 */
#define APP_LINE_FRAME_TYPE      0x02 /* 固定 */
#define APP_LINE_HWID            0xXX, 0xXX, 0xXX, 0xXX, 0xXX /* LINEbotから払い出される値 */
#define APP_LINE_TXPOWER         0x7F /* 固定 */
#define APP_LINE_MESSAGE         0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde  /* メッセージ。ただし、現時点では特に処理されない */

static uint8_t m_beacon_info[APP_ADV_DATA_LENGTH] = 
{
    APP_LINE_FRAME_TYPE,
    APP_LINE_HWID,
    APP_LINE_TXPOWER,
    APP_LINE_MESSAGE
};

advertise dataのservice_uuidとして設定します。

static void advertising_init(void)
{
    uint32_t               err_code;
    ble_advdata_t          advdata;

    memset(&advdata, 0, sizeof(advdata));

    ble_advdata_service_data_t service_data;
    service_data.data.p_data = (uint8_t *) m_beacon_info; /* 上で設定したbyte列を入れる */
    service_data.service_uuid = 0xFE6F; /* service UUIDを 0xFE6Fに設定する*/
    service_data.data.size   = APP_ADV_DATA_LENGTH;

    ...
}

LINE beaconをwebhookにつなげる

LINE botにwebhookを設定した上で、スマホをLINE beaconの近くに置くとwebhookが発動します。
以下のようなjsonが飛んで来るので、適宜処理します。

[ { type: 'beacon',
replyToken: 'xxxxxxxxxxxxxxxxxxx',
source: { userId: 'Uxxxxxxxxxxxxxxxxxxxxxxxxxx', type: 'user' },
timestamp: xxxxxxxxx,
beacon: { hwid: 'XXXXXXXXXX', type: 'enter' } } ]

LINE botの設定方法はここが参考になると思いました。
http://qiita.com/n0bisuke/items/60523ea48109320ad4a5

今後

  • まだ使われていませんが、LINE beaconのMessageプロパティが使えるようになると、beaconを通じて様々なデータをbotに送ることができるので色々おもしろいことができそうです。
  • 書き込み機を使わなくてもmbed仕様に従ってUSBで書き込めるデバイスもあるので、そっちのほうがお手軽に使えそうです。そちらも試してみてもいいかも。。
20
21
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
21