Nefry BTとLINE Notifyをサクッと連携


こんにちは、ちゃんとくです。この記事は[Nefry Advent Calendar 2018](https://qiita.com/advent-calendar/2018/nefry) 1日目の記事です。

毎年アドベントカレンダーの時期は時空が歪みがちですね！（すみません）

## やること
![Image from Gyazo](https://i.gyazo.com/db1009fe749935a7a055b15c5f587a54.png)

Nefry BTというマイコンボードのスイッチを押すと、LINEに通知がいく仕組みを作ります。これを応用して「**センサのデータが〜を超えたらLINE通知**」や「**人検知したらLINE通知**」などの仕組みを作ることができます。

短いコードでサクッとやれるので試してみてね！

※この記事は下記の**Nefry BT環境構築・初期設定が済んでいる前提**で進めます。

- [Arduino IDEをPCにインストール](https://dotstud.io/docs/arduinoide-setup/)
- [Nefry BTの環境構築（Arduino IDE）](https://dotstud.io/docs/nefrybt-setup-arduino-ide/)
- [Wi-Fi情報を設定](https://dotstud.io/docs/nefrybt-setup-wifi/)

## Nefry BTって？

[![Image from Gyazo](https://i.gyazo.com/7a03cd802d043a75ac63bcfd1e6820f9.png)](https://gyazo.com/7a03cd802d043a75ac63bcfd1e6820f9)

Nefry BTは「ESP-WROOM-32」というWi-Fi・BLE通信モジュールを搭載した、Arduinoと同じように開発できるマイコンボードです。

[Grove](https://dotstud.io/docs/grove/)という刺すだけで配線できるモジュール対応のコネクタを搭載していて、ハードウェアをあまり意識せずに開発できます。

## LINE Notifyって？
[![Image from Gyazo](https://i.gyazo.com/3fd283596af70526674c552bba9dc744.png)](https://gyazo.com/3fd283596af70526674c552bba9dc744)

[公式ページ](https://notify-bot.line.me/ja/)

LINEが提供している、簡単にLINE通知を作成することができるサービスです。LINE Notifyという公式アカウントから自分が設定したLINE通知がくる仕組みです。

## LINE Notifyの設定
### LINE Notifyと友達になる
![](https://i.gyazo.com/109f4aa667871bcdb82342d6e2ac3233.png)

まずはQRコードを読み取り、アカウントと友達になっておきましょう。

### トークンを作成
自分のLINEアカウントとLINE Notifyを紐付けるために、トークン（鍵のようなもの）を発行します。

![Image from Gyazo](https://i.gyazo.com/7f6676244c350dc8266d2272807ae7a1.png)
[LINE Notifyの設定ページ](https://notify-bot.line.me/my/)にいき、自身のアカウントでログインします。

メールアドレス・パスワードは、スマホアプリの「友だち > 設定（歯車） > アカウント」で確認・設定ができます。

![token_button.png](https://qiita-image-store.s3.amazonaws.com/0/119003/5c54cffa-3ecd-3477-5210-05a30d2e6fa2.png "token_button.png")

「トークンを発行する」ボタンを押します。

![Image from Gyazo](https://i.gyazo.com/7ccdb083a02b20d57b7f3e9db78d5f80.png)
上記のようなウィンドウが表示されます。「トークン名」にはLINE Notifyが何のサービスと連携したかわかる名前をつけましょう。通知するルームは、今回は「1:1」を選択します。

![token_create.png](https://qiita-image-store.s3.amazonaws.com/0/119003/bbc523e4-3d2e-1121-65a9-5080c4c24e6c.png "token_create.png")

トークンが発行されたら、コピーしてメモしておきます（**あとで使います**）。

## プログラム
以下のプログラムをNefry BTに書き込みます。

```
#include <Nefry.h>
#include <NefryLineNotify.h>

String auth, message;

void setup() {
    Nefry.setStoreTitle("LINE Auth",0);
    Nefry.setStoreTitle("LINEMessage",1);
    auth = Nefry.getStoreStr(0);   
    message = Nefry.getStoreStr(1);
    Nefry.enableSW(); // SWの有効化。SWを使わない場合は不要
}

void loop() {
    if(Nefry.readSW()) {
        if (!LineNotify.send(auth, message)) {
            Nefry.setLed(255, 0, 0);
        }
        Nefry.ndelay(1000*10); // 10秒間は再送しないようにする
    }
}
```

## Nefry BTにトークン情報を設定
![nefry_portal.png](https://qiita-image-store.s3.amazonaws.com/0/119003/8d1c5292-977e-1aa7-ef56-cd64453aa5e7.png "nefry_portal.png")

[Nefryポータル](https://dotstud.io/docs/nefrybt-basic-portal/)を開きます。

![nefry_portal.png](https://qiita-image-store.s3.amazonaws.com/0/119003/f8f3ffc5-a6a2-3abf-4c77-376ddc419ece.png "nefry_portal.png")

「DataStore」のページに行くと2つのフォームが用意されているので、「LINE Auth」には先ほどコピーしたトークン、「LINEMessage」には送りたいメッセージを入力します。

## 動作
![Image from Gyazo](https://i.gyazo.com/1bca5f64713bebf8dba0c4a202b4dfbd.gif)

## 雑な解説
### LineNotify.send()

`LineNotify.send("token", "メッセージ")`で、LINE Notifyで取得したトークンと送りたいメッセージを指定します。利用する時は `NefryLineNotify.h`ライブラリを読み込んでください。

ちなみにメッセージに特殊顔文字などは利用できません（この記事を書きながら発見しました）。

### Nefry.setStoreTitle()
`Nefry.setStoreTitle("フォーム名", 番号)`で、Nefryポータルで設定するためのフォームを作成しています。0番目にLINE Auth, 1番目にLINEMessageという名前をつけています。

利用する時は`Nefry.h`ライブラリを読み込んでください

### Nefry.getStoreStr()
`Nefry.getStoreStr(番号)`で、Nefryポータルで設定した指定番号の値を取得しています。

わざわざポータル側で設定することもないのですが、トークンやメッセージを変えるたびにプログラムを書き込む手間を考えるとオススメの方法です。