みんなでダァシエリイェス!遅延すると光るガジェットをつくるIoTハンズオンを開催しました!
どうも、ポキオです。9月27日に、Nefry BTを使ったIoT初心者向けハンズオンを開催しました。
今回、ハンズオンのお題は遅延すると光るガジェット。IoTLTでおなじみ(?)のガジェットをみんなで作りました!
イベント概要
ゆっきんさんのハンズオンと同じく、デジタルハリウッド大学のLabProtoをお借りしてハンズオンを開催しました。色々なツールが所狭しと並び、机や椅子もまさにラボな雰囲気を醸し出してる、お洒落な会場でした。
IoTLTでは、私はもっぱら京急ネタで登壇させていただきましたが、今回は参加者の好きな路線を設定して、その路線が遅延したらNefry BTのLEDが光るようなガジェットを作成してみました。
Nefry BTって?
Nefry BTとは、ESP32というWi-FiとBLEと搭載したチップが載った、フリスクサイズの開発ボードのこと。過去に行われたクラウドファンディングでは437%を達成した、今話題のモジュールです。
大切なものはすべて実装済み
IoTなガジェットを作る上で、ハードウェアの知識が無いと困ることも多いと思います。
Nefry BTは開発ボードでよくあるGPIOはもちろん搭載していて、さらにフルカラーのLEDやディスプレイ、そして半田ごて不要で様々なセンサーを接続できるGroveシステムにも対応。買ってすぐLチカや開発が始められる上に、Groveのセンサーを接続すれば色々なガジェットを作ることができます。
便利な関数で楽々プログラミング
Nefry BTは設定がWebブラウザ上からできるなど、初心者にも非常に優しい作りになっています。
さらにドキュメントでは、便利な関数が多数公開されています。たとえば実装済みのフルカラーLEDは、コード上で複雑な初期化不要で、簡単に色を指定できます。
準備
用意するもの
- 電車のおもちゃ(ダイソーで売ってるプチ電車シリーズ)
- Nefry BT
- USB延長ケーブル
- トレーシングペーパー
- 両面テープ
筆者の環境
- MacBook Air (13-inch, Mid 2013)
- OS X Yosemite 10.10.5
- Arduino IDE 1.8.4
電車の中にNefry BTをセット
そんなNefry BTですが、実はダイソーで売っている電車のおもちゃの内部にピッタリ入ります。
Nefry BTのUSBコネクター部分が電車の外に出るように、電車のおもちゃには少し加工をしています。USBコネクターにはUSB延長ケーブルを接続して、給電を行います。
また、LEDの光が拡散するように、電車の窓部分には内側からトレーシングペーパーを貼り付けています。Nefry BTに実装されているLEDだけでも、こんな感じで電車を光らせる事ができます!
皆さん、もくもくと作成中!
肝心のコーディング
ハンズオンでは特定の路線に遅延が発生したら光らせるプログラムを書き込みました。書き込みはArduino IDEより行いました。ちなみに、このページを参考にNefry BTのセットアップを済ませておくと、コード上でWi-Fi接続のシーケンスを実装しなくて済むので、非常に便利です。
#include <Nefry.h>
#include <WiFiClientSecure.h> // HTTPS通信のために必要
void setup() {
// 何もしない
}
void loop() {
// JSONを取得する
String trainDelayJson = getTrainDelayJson();
// JSONに特定の路線名が含まれているか確認する
if (trainDelayJson.indexOf("(好きな路線名)") > 0) {
blinkFor30Sec(255, 0, 0); // 赤く光らせる
} else {
blinkFor30Sec(0, 0, 255); // 青く光らせる
}
}
// 鉄道遅延情報のjsonさんから、遅延情報(JSON)を取得する
String getTrainDelayJson() {
WiFiClientSecure client; // 変数を宣言
// サーバーにHTTPSのデフォルトポート(443)でアクセスしてみる
if ( !client.connect("rti-giken.jp", 443) ) {
Nefry.println("接続失敗");
return "";
}
client.print(String("GET /fhc/api/train_tetsudo/delay.json HTTP/1.1\r\n") +
"Host: rti-giken.jp\r\n" +
"Connection: close\r\n\r\n"); // HTTP-GETのリクエストメッセージを書く
// レスポンスが来るまでちょっと待つ
Nefry.ndelay(1000);
// HTTP-GETのレスポンスを保存しておく変数
String response = "";
// レスポンスを変数に格納する
while (client.available()) {
response += client.readStringUntil('\r');
}
Nefry.println("接続成功");
Nefry.println(response);
return response;
}
// 30秒間、500msecおきに点灯と消灯を繰り返します
void blinkFor30Sec(int r, int g, int b) {
for (int i = 0; i < 30; i++) {
Nefry.setLed(r, g, b);
Nefry.ndelay(500);
Nefry.setLed(0, 0, 0);
Nefry.ndelay(500);
}
}
Nefry BTから定期的にWi-Fi経由で鉄道の遅延情報を取得し、特定の路線が遅れているかどうかを監視するようにしています。遅延情報は鉄道遅延情報のjsonさんより、JSON形式のデータを受信することで実現しています。
拡張性で広がるIoT工作
今回は、Nefry BTに乗っているハードウェアを使って工作をしました。前途の通り、Nefry BTにはGPIOとGroveシステムにも対応しているので、LEDを増設したり、センサーを追加するなどして、簡単に拡張できます。
みなさんもNefry BTでIoT工作に踏み出してみませんか?