Back to tech

Arduinoイーサネットシールド2を使ってThingSpeakへセンサーデータを送信する

2 min read
Table of Contents

以前にイーサネットシールド2の使い方をメモ程度にまとめました

Arduinoのイーサネットシールド2を使ってみる | Autumn-Color.com/ちょっとそこまで旅をします。
autumn-color.com
image

本題はイーサネットシールド2を使ってセンサーデータをインターネットへなげることです

いろいろ調べて中でThingSpeakというものがやりたいことができそうだったのでこのサービスを利用しました

ThingSpeakの準備からセンサーデータをなげるところまでを書いていきます

ThingSpeakとは

ThingSpeakとはMatlab等の製品を開発しているMathWorksのIoTプラットフォームです

クラウドでセンサーのデータを収集や保存ができるため、IoT アプリケーションを開発をすることができます

jp.mathworks.com
jp.mathworks.com

無料版と有料版(商業版)があり、今回は無料版を使います

無料版と有料版の違いは下記のサイトがわかりやすいためご参考にしてください

iwathiの/var/log http://iwathi3.hatenablog.com/entry/Data-to-Graph-ThingSpeak

準備

ThingSpeakアカウントの作成

下記のサイトへ行き”Sign Up”を押し、アカウントを作成します

thingspeak.com
thingspeak.com

Arduinoにライブラリをインポート

Arduinoでイーサネットシールド2が動作している前提で書いていきます

Arduinoを起動後、スケッチ->ライブラリをインクルード->ライブラリを管理 と進んでいきます

ライブラリマネージャーにて検索ワードに”ThingSpeak”と記入しでてきたライブラリをインストールします(画像ではインストール済みとなっています)

イーサネットシールド2の他にもESP8266とESP32にも対応しています(2018/06/24時点)

これで準備はOKです

一応、公式にも導入方法がありますので参考程度に読んでみてください

GitHub - mathworks/thingspeak-arduino: ThingSpeak Communication Library for Arduino, ESP8266 and ESP32
github.com
image

新しいChannelの作成とChannel ID, API Keyの取得

新しいChannelの作成

ThingSpeakに戻り、新しくChannelを作成します

Channlelsから”New Channnel”を選択し、チャンネルをつくります

NameやDescriptionとかとかを記入し、“Save Channel”にて作成されます

作成すると下記のような画面になります(私はすでにセンサーデータを取得しているため、グラフがでています)

Channel ID, API Keyの取得

Channelが作成できたところで次はChannel IDとAPI Keyの取得に移ります

これらを取得することでArduinoから取得したセンサーデータを作成したChannelへ送信することができます

はじめにChannel IDですがChannelの名前の下らへんに”Channel ID”というものがあります

これがIDです

次にAPI Keysの取得です

API Keysのタブに移り、Write API Keyを取得します

これで必要なものは揃いました

プログラム

今回作成したプログラムは光センサーで取得したデータをThingSpeakへ投げるというプログラムです

アナログPIN A0で光センサーの値を取得しています

取得した値に対して÷3をして多少値を小さくしています(特に意味はない)

mac[]にてイーサーネットシールドが持っているMacAddressを記入してください

myChannelNumberにはChannel IDを記入してください

myWriteAPIKeyにはWrite API Keyを記入してください

また、無料版だとセンサーデータを送信してから最低15秒間の待ち時間が必要です(プログラムでは20秒の待ちをしています)

#include <SPI.h>
#include <Ethernet2.h>
#include "ThingSpeak.h"


byte mac[] = {0x90, 0xA2, 0xDB, 0x10, 0x35, 0xFF };
EthernetClient client;

//light ensor
int light=0;

//ThingSpeak
unsigned long myChannelNumber = ******;
const char* myWriteAPIKey = "***********";

void setup() {
  Serial.begin(115200);
  Serial.println("Connectiong...");

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
  Serial.println("Connected IP!!");
  Serial.print("IP = ");
  Serial.println(Ethernet.localIP());

  ThingSpeak.begin(client);
}

void loop() {
    light = analogRead(0);
    light = light/3;
    Serial.println(light);

    ThingSpeak.writeField(myChannelNumber, 1, light, myWriteAPIKey);

    delay(20000);//mini delay 15000
}

実行するとThingSpeakにてグラフ化されています

しかもセンサーデータを受け取ると自動で更新されます