NefryBTからセンサーの値をSlackに投稿する
はじめに
先日行われた IoT x Pepper のハッカソン IoT x Pepper縛り! Pepperハッカソン@アトリエ秋葉原 に参加してきました。
IoTということで、前から気になっていた Nefry BT をお借りすることができましたので、その時作成した Nefry BT側のソースを公開したいと思います。
Nefry BTとは
dotstudio株式会社が開発された「初心者向け小型IoTデバイス」です。ねふりーびーてぃ と読みます。
初心者向け小型IoTデバイス「Nefry BT」
Nefry BT と Nefry V2.0 の違い
1つ前の製品で Nefry V2.0 も発売されています。
Nefry BTは、搭載ICがESP-WROOM-32となったことにより、Bluetooth Low Energyが搭載されています。また、Nefry BT専用小型ディスプレイがオプションで接続可能です。このディスプレイもお借りできたのですが、これが意外と便利でした。
Nefry BT | Nefry | |
---|---|---|
電源供給方法 | USB給電 | USB給電 |
搭載IC | ESP-WROOM-32 | ESP8266 |
Wi-Fi | 搭載 | 搭載 |
Bluetooth | Bluetooth Low Energy搭載 | 非搭載 |
ディスプレイ | オプションあり | なし |
初期設定の流れ
初期設定は、公式サイトにて詳しく解説されていますので、割愛します。
設定した順にリンクで掲載します。
ディスプレイの取り付け
Nefry BTのWi-Fiセットアップ
Nefry BT向けのArduino IDEセットアップ方法
Arduino IDEをPCにインストール
参考
slackへの投稿に関して、こちらの記事を参考にさせていただきました。
NodeMcu Lua ESP8266 CP2102でSlackにメッセージを送ってみる
使用したGROVEセンサー
GROVEジョイスティックを使用しました。
アナログコネクタ[A2] に接続しています。
サンプルソース
サンプルソースです。slackの #nefry チャンネルにジョイスティックの Y軸、X軸の値が1秒おきに投稿されます。Y軸、X軸にしたのは、PepperのX軸が前方なので、この順番にしました。
WiFiClientSecureライブラリ
WiFiClientSecureライブラリを使用しています。Adruino IDEのライブラリ管理からインストールしてください。 (訂正:あらかじめ入っているので、インストールは不要です)
レガシートークンについて
実際に使用する際は、ソース中の""にレガシートークンを設定してください。
#include <Nefry.h>
#include <WiFiClientSecure.h>
WiFiClientSecure client;
const char* host = "slack.com";
void setup()
{
}
void slackmes(String message) {
// Use WiFiClient class to create TCP connections
WiFiClientSecure client;
const int httpPort = 443;
if (!client.connect(host, httpPort)) {
Nefry.println("connection failed");
return;
}
// We now create a URI for the request
String url = "/api/chat.postMessage?token=<token>&channel=%23nefry&pretty=1&username=nefry";
url +="&text=" + message;
Nefry.print("Requesting URL: ");
Nefry.println(url);
// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
int timeout = millis() + 5000;
while (client.available() == 0) {
if (timeout - millis() < 0) {
Nefry.println(">>> Client Timeout !");
client.stop();
return;
}
}
// Read all the lines of the reply from server and print them to Serial
while(client.available()){
String line = client.readStringUntil('\r');
Nefry.print(line);
}
Nefry.println("");
Nefry.println("closing connection");
}
void loop()
{
/* joy stick */
int sensorValue1 = analogRead(A2); /* y */
int sensorValue2 = analogRead(A3); /* x */
Nefry.print(sensorValue1);
Nefry.print(" ");
Nefry.println(sensorValue2);
String joyY = String(sensorValue1);
String joyX = String(sensorValue2);
String message = String(joyY + "," + joyX);
slackmes(message);
delay(1000);
}
実行結果
Pepper側のアプリについて
Pepper側は、Slackの投稿をPepperで発話させてみたで作成したボックスを使って、websocketで受信したメッセージの数値を元に移動する方向を決めて MoveToでそれぞれ移動するというアプリにしました。
Nefry BT を使ってみて
dotstudio株式会社さんの公式ドキュメントがあったおかげで導入部分は初心者の私でもすんなり進みました。実際にセンサーを使おう、値を読もうとするとスキル不足で大変でした。今回のハッカソンをきっかけに勉強したいと思います。
また、Nefry BTはBLEも搭載されているので、センサーでイベントが発生したら、ビーコンの電波を飛ばすといったことができそうですし、データの送信もMQTTやWebSocketでやってみたいです。
最後に今回のハッカソンにてdotstudio株式会社のスタッフの皆様には色々とご教授いただき大変勉強になりました。ありがとうございました。
[2017/10/11 追記]
PubSubClientを使用したMQTTの利用例がワンフットシーバスさんから公開されています!
Node-RED MQTTブローカー経由でNefryBT+フルカラーテープLEDを動かすメモ
おまけ
Nefry BTにはあらかじめプログラムが書き込まれています。当たり前なのですが、自分のプログラムを書き込んでしまうと、このアプリは消えちゃいます。元の状態に戻したいといった場合は、こちらのアプリで書き換えてください。
付録: デフォルトプログラム
Author And Source
この問題について(NefryBTからセンサーの値をSlackに投稿する), 我々は、より多くの情報をここで見つけました https://qiita.com/HiroyukiYasui/items/7b3ec17636c2b91263e2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .