読者です 読者をやめる 読者になる 読者になる

Mana Blog Next

ガジェット好きIT系母ちゃんが二人の子どもを育てながらIoTに挑戦するブログ。

スポンサーリンク

「さくらのIoT Platform β」でイチゴを育てる(2)

IoT 母ちゃんArduino

f:id:mana-cat:20161223020330j:plain

サーバーワークス Advent Calendar 2016 、12月23日分の記事です。

サーバーワークス Advent Calendar 2016 - Qiita

こんばんは。週末はノロウィルスで寝込んでしまい、完全にイチゴを枯らしてしまいました。これは早急に対策しないと!と思い立って、水やりを忘れないような仕組みを作るため、さくらのIoT Platform β を検証してみました。

用意するもの

  • Arduino Uno
  • さくらのIoT Platform β Arduino シールド
  • さくらのIoT Platform β 通信モジュール
  • 土壌湿度センサー [M-SMS393]
  • ブレッドボード
  • ジャンパーピン(オスxオス) 3本
  • イチゴの鉢植え

今回はWindows10にArduinoIDEをインストール済みであることを前提としています。

あと、Arduino用の電源を用意します。通信モジュールを動かすのでPCのUSB給電だけでは電力が足りません。

土壌湿度センサーの繋ぎ方については以前のエントリーを参照してみてね。

さくらのIoT Platform β の繋ぎ方

マニュアルの通り行うだけでOKですが、一通りこちらでも紹介します。

f:id:mana-cat:20161223004131j:plain

まずは、アンテナを取り付けて通信モジュールとArduinoシールドを繋げます。

f:id:mana-cat:20161223004220j:plain

その後大事なのが、I2Cを使うため付属のジャンパーピンをSCL,SDAの2箇所にはめ込みます。

小さくて分かりづらいので拡大します。 f:id:mana-cat:20161223004224j:plain

さくらのIoT Platform βの初期設定をする

f:id:mana-cat:20161223012248p:plain

さくらのIoT Platform βコントロール画面にログインし、連携サービスで「サービス追加」をし、 WebSocketを追加します。そうすると受信したデータを画面上でリアルタイムに確認することができるようになります。

その次に、通信モジュールを登録します。「モジュール登録」を選択して、ID、パスワード、名称を入力して登録して下さい。ちなみに、通信モジュールのIDとパスワードは通信モジュール本体の目隠しシールの中に記載されています。そーっと剥がしてID,PASSを確認してみましょう。

Arduino IDEにライブラリーをインポートする

以下にアクセスし、git cloneで公開されているライブラリーをダウンロードします。以下スクリーンショットのように、ブラウザでZIPファイルをダウンロードする方法でもOK。

https://github.com/sakura-internet/SakuraIOArduino

f:id:mana-cat:20161223004914p:plain

PCでArduino IDEを開き、先ほどダウンロードしたZIP形式のライブラリーをインポートします。「スケッチ」→ include libraryAdd.Zip libraryで追加できます。

f:id:mana-cat:20161223013305p:plain

ダウンロードしたサンプルプログラム Standard.ino を開き、コンパイルしてArduinoに書き込んでみます。それで動作が問題無いか確認してみましょう。

さくらのIoT Platform βにセンサーデータを送る

さて、ここからが本題です。土壌湿度センサーで取得した値を、さくらのIoT Platform βへ送信します。公式データシートによると、送信したいデータはキューにいったん溜めて、送信するような仕様のようです。詳細については本家データシートを参照してください。

以下プログラムをスケッチして、コンパイルした後Arduinoに書き込みます。

#include <Arduino.h>
#include <Wire.h>
#include <SPI.h>
#include <SakuraIO.h>
int sensorPin = A0;    // select the input pin for the potentiometer
int ledPin = 13;      // select the pin for the LED
int sensorValue = 0;  // variable to store the value coming from the sensor

SakuraIO_I2C sakuraio;
// SakuraIO_SPI sakuraio(10);

#define SEND_INTERVAL 5000 // ms

void setup() {
    Wire.begin();
    Serial.begin(9600);
    pinMode(ledPin, OUTPUT);

    int error;
    uint8_t c;

    Serial.print("Waiting to come online");
    for (;;) {
        if ((sakuraio.getConnectionStatus() & 0x80) == 0x80) {
            Serial.println("");
            Serial.println("connected");
            break;
        }
        Serial.print(".");
        delay(1000);
    }

    Serial.println("***********************");
}

void loop() {
  int error;
  int32_t sensorValue;
//  read the value from the sensor:
  sensorValue = analogRead(sensorPin);
  Serial.print("Value: ");
  Serial.println(sensorValue);

    sakuraio.enqueueTx(0, sensorValue);

    sakuraio.send();
    Serial.println("***********************");
    delay(SEND_INTERVAL);
}

データが取得できているか確認する

そして、Arduino実行中に「ツール」 → 「シリアルモニタ」でセンサーの数値が取得できているか確認します。

f:id:mana-cat:20161223015026p:plain

予め登録しておいたWebSocket を開き、センサーの値が送信されているのか確認してみましょう。

f:id:mana-cat:20161223014827p:plain

これで、問題無く土壌湿度センサーの値をさくらのIoT Platform βで取得することができました!

次回予告

次回は、IoT Platform β をAWS IoTと連携させ、水やりを忘れないような仕組みを作ってきます。お楽しみに!

余談

実は5歳の長男も別の鉢植えでイチゴを育てています。長男は毎日水やりを忘れず、大事に育てているのに、私は忙しすぎると ついうっかり忘れてしまう傾向にあったり・・・。水やりの仕組みを作る方法以外に、長男に水やりを頼む方法が一番スマートかもしれません。

関連ページ

【永久保証付き】Arduino Uno

【永久保証付き】Arduino Uno

Prototyping Lab 第2版 ―「作りながら考える」ためのArduino実践レシピ (Make: PROJECTS)

Prototyping Lab 第2版 ―「作りながら考える」ためのArduino実践レシピ (Make: PROJECTS)

© Manami Taira