BOCCOをmyThingsを使ってしゃべらせてみた


みなさんこんにちは!

ユカイ工学の角田です.
もうすぐクリスマスですね。

さて、myThingsとBOCCOの連携が11月より開始されました。
そこで、本記事ではBOCCOとmyThingsを連携させて、raspberry piのボタンを押したらBOCCOが喋る、というデバイスを作ってみたいと思います.
今回は簡単にBOCCOと連携を行う為、IDCFサービスを使って実装します.

# BOCCOとは?
BOCCOはこちらのムービーのような感じで、家族をつなぎます。
子供が返ってきた情報を玄関のドアにくっつけたセンサを使って、離れて仕事をするお父さんのスマホに通知します。お父さんとしては、子供が帰ってきた時間がわかって安心ですね。また、BOCCOロボットに対して仕事中でも簡単にメッセージを送ることができます。逆にスマホをまだ持っていない子でも、ロボット経由で家族にメッセージを送ることができます。

BOCCO紹介動画
[![BOCCO紹介動画](http://img.youtube.com/vi/qiWEhdBeQmA/0.jpg)](https://www.youtube.com/watch?v=qiWEhdBeQmA)


# BOCCOとmyThingsの連携例

BOCCOをリビングなど家族が集まる場所に置いて、
・天気
・Gmail
などと連携すると便利です.

以下のようにmyThingsアプリで天気とのセットを作成すると、BOCCOが今日の天気や、気温をしゃべってくれます!

<img width="320" alt="thumb_IMG_3329_1024 2.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/73059/9fa914cb-44a7-0f55-f333-cc548a6b1033.jpeg">


myThingsとBOCCOで天気予報を喋らせてみた(動画)
[![BOCCOとmyThingsを連携](http://img.youtube.com/vi/vhzcMsPKx-I/0.jpg)](https://www.youtube.com/watch?v=vhzcMsPKx-I)

# 今回作成したもの

今回作成したデバイスは、下の写真に写っている木製の入れ物です。
筐体にある、BOCCOの鼻を押したら、myThings経由でBOCCOが定型文を喋ってくれるというものです。
先日、筐体を、Yahoo!のmyThingsチームにも見ていただいたのですが、カワイイと好評でした。よかった！

![thumb_DSC08971_1024.jpg](https://qiita-image-store.s3.amazonaws.com/0/73059/4a422382-aded-bbde-1568-566ad0b4c350.jpeg)

鼻を押した時、筐体のBOCCOの目が光ります。

![thumb_DSC08972_1024.jpg](https://qiita-image-store.s3.amazonaws.com/0/73059/b7e80348-9514-8a5d-9bdd-d5d7bd486310.jpeg)

以下イメージ動画です。
[![myThingsとIDCFでBOCCOを喋らせてみた](http://img.youtube.com/vi/_S4C7Di36Js/0.jpg)](https://www.youtube.com/watch?v=_S4C7Di36Js)


# IDCFとの連携

　　　　　　　　　　　　　　　**全体構成**

![mythings.png](https://qiita-image-store.s3.amazonaws.com/0/73059/296c4c29-22ce-eeb2-7c67-b558e3a4d472.png)
# 必要なもの

- myThings,BOCCOアプリがインストールされたスマホ
- [raspberry pi B](https://www.switch-science.com/catalog/1268/)
- [BOCCO本体](http://www.ux-xu.com/product/bocco)
- [LED](http://akizukidenshi.com/catalog/g/gI-00562/) 
- [タクトスイッチ](http://akizukidenshi.com/catalog/g/gP-03647/)
- [抵抗10kΩ](http://akizukidenshi.com/catalog/g/gR-25103/)
- 開発環境
<ul>
<li>今回使用した環境は下記の通り</li>
<li>MacBook Pro(MacOSX 10.10.5)</li>
<li>raspberry pi B([Debian jessie](https://www.raspberrypi.org/downloads/raspbian/))
<li>IDCF開発環境
<ul>

# IDCF環境構築
IDCFの開発環境構築は以下の記事を参考にさせていただきました。
http://qiita.com/masato/items/f9be4a15216fe29de7fb
ありがとうございます.

今回は「trigger-1」と「action-1」を使いメッセージを送受信します。
以下のコマンドで、tokenとuuidを確認します。
`docker-compose run --rm iotutil show -- --keyword action-1`

uuidとtokenが表示できたらそれをメモしておきます。
raspberry pi側で設定をするときに使います。

# raspberry piプログラム
raspberry pi側ではpythonで、HTTPポストするためのコードを書きます。
こちらの記事を参考にしました
http://qiita.com/masato/items/152870ff7fd2f5d96cf1

まず、raspberry piにログインして、idcf用に適当なディレクトリを作ります
`mkdir Documents/bocco/idcf && cd Documents/bocco/idcf`

次に、raspberry piから、IDCFでHTTPポストするコードを書きます。
タクトスイッチを押すとLEDが点滅し、trigger1情報がポストされる仕組みです。


```py:bocco.py
from time import sleep
import json
import requests
import RPi.GPIO as GPIO
from config import conf

#pin setting
BUTTON = 18
LED = 23

#HTTP setting
url = "http://{0}/data/{1}".format(conf["IDCF_CHANNEL_URL"],
                                       conf["TRIGGER_1_UUID"])
payload = {"trigger":"on"}
headers = {
        "meshblu_auth_uuid": conf["TRIGGER_1_UUID"],
        "meshblu_auth_token": conf["TRIGGER_1_TOKEN"]
    }

#GPIO Setting
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON, GPIO.IN)
GPIO.setup(LED,GPIO.OUT)

# LED blink
def blink():
  count = 0
  while count < 3:
    GPIO.output(LED,True)
    sleep(0.3)
    GPIO.output(LED,False)
    sleep(0.3)
    count += 1

def main():
  while True:
    if GPIO.input(BUTTON):
      print("Button Pressed")
      r = requests.post(url, headers=headers, data=payload)
      blink()
    else:
      GPIO.output (LED,False)

if __name__ == '__main__':
    main()  
```

ここに先ほど、メモを取ったtriggerと　tokenを埋めていきます。
今回使用した環境では以下のようになりました。

```py:config.py
conf = {
     "IDCF_CHANNEL_URL": "xxx.xxx.xx.xxx",#仮想マシンのIPアドレスを入力
     "TRIGGER_1_UUID": "23da0f87-8528-457a-a6e1-5e8eb169c2cf",
     "TRIGGER_1_TOKEN": "ad7556d4",
     "TRIGGER_2_UUID": "a40489e2-fd46-4eae-9838-d5fc497a62d3",
     "TRIGGER_2_TOKEN": "a43e7341",
}
```


 

# タッチセンサとLEDの実装
以下のように配線しました。
raspberry piの電源は、microUSBからとっています。
<img width="344" alt="raspberry pi.png" src="https://qiita-image-store.s3.amazonaws.com/0/73059/e67e0964-1208-ce23-9169-7ae9dfdf17b3.png">

# myThingsセットアップ
IDCF仮想サーバと、raspberry piのアクションが終わったら最後に、myThingsアプリの方で、BOCCOとの組み合わせを作成します。

myThingsの右上の+ボタンからトリガーとアクションの組み合わせを作成します。

<img width="320" alt="thumb_IMG_3352_1024.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/73059/b5b207fa-6f97-0bc1-c2ea-5c2dea3dc579.jpeg">


ここにトリガーとしてIDCF、アクションとして、BOCCOを入れていきます。

<img width="320" alt="thumb_IMG_3353_1024.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/73059/3f74e98b-e74e-f59f-8fb5-c8e8fa604d8f.jpeg">

まずトリガーとしてIDCFを認証します。
認証が完了すると、以下のようにIDCFのチャンネルに、チェックマークがつきます

<img width="320" alt="thumb_IMG_3354_1024.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/73059/e4cbbbd6-1eb6-ef39-8ff5-ef9c6162580e.jpeg">

IDCFチャンネルをタップすると、トリガー選択画面に移ります。先ほどの設定で、「trigger-1」を設定していたので、「trigger-1」を選択します。

<img width="320" alt="thumb_IMG_3356_1024.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/73059/1f7ae719-2c2d-4527-6fe8-f70b260869d8.jpeg">

次にアクションを選択します。
BOCCO認証のためには、BOCCOアプリでアカウントを作成しておく必要があるので、事前にアカウントを作成します。

BOCCOアプリを立ち上げて左上の歯車マークを押します

<img width="320" alt="IMG_3368.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/73059/3528113e-f063-39fb-388e-f7ae430dfa6b.jpeg">

「sign up」でアカウント登録ができます。
ここでBOCCOチャンネル認証のために、登録しておきます。

BOCCOの
<img width="320" alt="IMG_3366.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/73059/903053e6-33d7-32eb-c363-c0e60464bde1.jpeg">








BOCCOアプリでアカウントが作成できたら、myThingsアプリに戻り、BOCCOチャンネルを認証します。
認証に成功すると、IDCFと同様にチェックマークがつきます

<img width="320" alt="thumb_IMG_3357_1024.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/73059/762dbe0e-e4fa-873a-8849-2ee414568f9a.jpeg">


自分のBOCCOの名前と、喋らせたい内容を入力します。終えたら下のOKを押します
<img width="320" alt="thumb_IMG_3359_1024.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/73059/dfe4abbe-0e71-0e9b-8030-53c1ce615d54.jpeg">

今回は例として以下のように登録しました。最後に一番下の「作成」を押して登録完了です

<img width="320" alt="thumb_IMG_3361_1024.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/73059/9e022697-abc8-d913-83e5-1b50b34783f7.jpeg">

これで準備完了です

# 動作
BOCCOに通知がいくと以下のようにmyThingsに通知がきます

<img width="320" alt="thumb_IMG_3363_1024.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/73059/09ed4571-9e22-db6e-46ec-56de4f45f45c.jpeg">

# まとめ
myThings経由でBOCCOを喋らせることができました。

今回は簡易的に、タクトスイッチでしたが、この記事をみて、他のセンサ等で、応用して頂けたら幸いです。

#参考にしたサイト
以下のサイトを参考にさせていただきました。
ありがとうございます。
http://qiita.com/masato/items/152870ff7fd2f5d96cf1#raspberry-pi%E4%B8%8A%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%99%E3%82%8Bpython%E3%81%8B%E3%82%89%E3%83%88%E3%83%AA%E3%82%AC%E3%83%BC%E3%82%92%E3%81%A0%E3%81%99

http://www.idcf.jp/cloud/iot/detail01.html