LoginSignup
8
0

More than 5 years have passed since last update.

IoT開発合宿でNefryを触ってみた

Last updated at Posted at 2017-12-18

この記事は、NIFTY Advent Calendar 2017の19日目の記事です

ニフティのエンジニア2年目の @5_21maimai@sbyh52moc1 です。
入社した去年から、週に1回同期数人で集まって技術勉強会をしたり、開発合宿をしたりしています。(新入社員の間でRuby勉強会をやっている話参照)
今年は、1年目エンジニアや3年目の先輩も交えて、会社近くの会議室を借りて行っています。

先日、その勉強会メンバーでIoTがテーマの開発合宿を行いました。
各チーム2~3人でひとつのものを開発するのですが、私たちのチームはNefryというデバイスを使って開発したので、そのことについて2人でまとめていこうと思います。
IoT初挑戦の2人で開発したため、拙い内容ですがご容赦ください。

Nefryとは?

Nefryとは、手のひらサイズの小さなIoTデバイスです。
Wi-Fiモジュールが標準搭載されているので、Wi-Fiモジュールを追加せずにインターネットに接続できます。
また、ArduinoIDEが使えたり、スイッチやLEDライトが標準でついていたり、ドキュメントが豊富(しかも日本語!)なので、デバイス初挑戦の人でも挑戦しやすいデバイスです。
MilkcocoaやIFTTTなどとも連携可能です!
Nefryv2.0とNefryBTの2つのバージョンが発売されており、NefryBTの方が新しいバージョンです。

作ったもの

雨お知らせくん
スイッチを押すと、今雨が降っているかどうかをLEDライトで通知してくれます。
玄関に置いて、出かけるときに傘が必要か簡単に調べることができます。

使ったもの

  • NefryBT

    • 付属のスイッチとLEDライトも使用
    • Nefryv2.0を最初に購入したが壊してしまったため、急遽別バージョンのNefryBTを使用
  • WeatherAPI

実装

NefryはArduinoIDEで開発していきます。
以下、実装内容をソースコードから抜粋して紹介します。

現在の天気を判定する

Weather APIから、現在の天気を取得します。
取得したい地域のIDを事前に調べておき、Nefry環境変数として設定しておきます。
ライブラリは HTTPClient.h ArduinoJson.h を利用しました。

  // Nefry環境変数から、地域IDやAPI keyを取得
  String id = Nefry.getStoreStr(0);
  String appid = Nefry.getStoreStr(1);

  String body = "";
  HTTPClient http;

  // APIを叩く
  http.begin(String("http://") + host + url + String("?id=") + id + String("&APPID=") + appid);
  int httpCode = http.GET();
  Nefry.ndelay(100);

  if (httpCode < 0) {
    body = http.errorToString(httpCode);
  } else {
    body = http.getString();
  }
  http.end();

  // jsonデコード
  const int BUFFER_SIZE = JSON_OBJECT_SIZE(50) + JSON_ARRAY_SIZE(1);
  StaticJsonBuffer<BUFFER_SIZE> jsonBuffer;
  int len = body.length()+1;
  char* json = new char[len];

  body.toCharArray(json, len);
  JsonObject& root = jsonBuffer.parseObject(json);
  if (!root.success()) {
    Nefry.println("parseObject() failed");
  }

  // 現在の天気を取得
  String weather = root["weather"][0]["main"];

NefryのLEDを制御する

天気が雨かどうかによって、NefryのLEDの挙動を変化させます。
Nefry関数を利用することで、簡単に付属のLEDを制御することができます。
フルカラーLEDなので、RGB値で様々な色を指定できます。

void turnOnLed(int isRain){
  // 雨かどうかの引数によって、LEDの色が変わる
  if(isRain){
      // isRain = 1(true)の時、青色で点滅
      Nefry.setLed(0,0,255);
      Nefry.ndelay(100);
      Nefry.setLed(0,0,0);
      Nefry.ndelay(100);
    }else{
      // isRain = 0(false)の時、オレンジで点灯
      Nefry.setLed(255,165,0);
      Nefry.ndelay(100);
    }
}

雨の時
雨.png

晴れの時
晴れ.jpeg

Nefry関数やライブラリが充実しているため、
外部サービスとの連携、LEDや各種センサー等の制御を簡単に実現することができます。
また、上記の通り外部APIも比較的簡単に利用できるため、多くのアイディアをNefryで実現できそうだと感じました。

詰まったこと

  • Nefryv2.0を壊してしまった
    • オンライン上でバイナリファイルをアップロードする時に接続が切れてしまい、その後電源が入らなくなってしまった
    • 急遽別メンバーのNefryBTを借りることに
  • NefryのWi-fi接続がうまくいかない
    • バイナリファイルをNefryに書き込むたびに、Wi-fi接続が切れてしまい、セットアップからやり直さないといけなかった
    • 会議室のWi-fiからテザリングに変更すると安定したが、原因は最後まで謎のまま...
      • 会議室のWi-fi接続数が多すぎた?

最後に

IoT初心者でしたが、調べれば割と簡単にAPIを叩いて処理をすることができました。
NefryはGroveセンサの規格に対応しているようなので、今後は人感センサーなどの別のセンサーも使ってみたいです。
明日は @RPcat さんです。お楽しみに!

8
0
0

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
8
0