RSSIの取得(ThingSpeak使用)
目次
はじめに
先日製作した洗濯物 取り込み忘れ防止機器を製作する際に屋外にあるか、屋内にあるか判別するため電波強度(RSSI)のしきい値を決めました。その際に屋内、屋外に機器がある状態のRSSI測定を行いました。今回はその時の構成と方法について説明していきます。
測定構成
場所を移動しながら、RSSIを記録し、スマホで確認したいと考えました。そこで、取得したRSSIをWIFI経由で何処かのクラウドデータサービスに送信しようと考えました。クラウドデータサービスについては、無料で使用でき、グラフ表示もできるため、ThingSpeakを用いました。
ThingSpeak
ThingSpeakはIoT向けのクラウドデータサービスです。デバイスから送られた来たデータを貯めて、グラフに表示したり、データをトリガに何かのアクションを起こすことができます。下記制限がありますが、無料で使用することができます。制限としては以下になります。
・メッセージ間隔15秒以上
・年間300万メッセージまで
・商用利用禁止
ThingSpeakの登録
①下記リンクをクリックし、「Get Started For Free」をクリックする
②ログインするかアカウントを作成するか を選択するので、左下の
「Create One!」をクリック
③下記画面の項目を記載し、登録する
・メールアドレス
・国
・パスワード
・名前
・名前(英字)
全項目を埋め、「Continue」をクリック
④入力したEmailアドレスが記載されているので、Continueをクリック
⑤メールが届いているので確認し、「Verify email」をクリック
⑥下記のContinueをクリック
⑦Passwordを入力し、「I accept theOnline Services Agreement Online Services Agreement」にチェックを入れ、Continueをクリックする
⑧「Sign-up successful」と表示されるので、「OK」をクリックする
⑨利用目的を聞かれているので、「Personal,non-commercial projects」を選択し、「OK」をクリックする
ThingSpeak Channel作成
①「New Channel」をクリックする
②Name:測定プロジェクト名, Field1:測定項目を入れて、右へチェックを付ける
その他の項目は入力しなくても大丈夫
「Save Channel」をクリック
③Channelが作成される
④「Channel Setting」タブを選択し、「Channel ID」を確認する
⑤「API Keys」タブを選択し、「Write API Key」を確認する
Arduinoプログラムコード
#include <ThingSpeak.h>
#include <ESP8266WiFi.h>
//ネットワーク情報
char* ssid = "********"; //””で囲まれた中にWiFiルーターのssid
char* password = "*******"; //””で囲まれた中にWiFiルーターのpassword
WiFiServer server(80);//webサーバーをポート80に設定する
String header;//HTTPリクエストのヘッダーを格納する変数
// ThingSpeak設定(チャンネルIDと書き込み用APIキーを変更してください)
const unsigned long myChannelNumber = ********; //********にChannel ID
const char * myWriteAPIKey = "********"; //””で囲まれた中にWriteAPIKey
// ThingSpeak接続用
WiFiClient client;
void setup(void)
{
Serial.begin(115200);
Serial.print("Connecting to ");
Serial.println(ssid);
//Wi-Fi接続を開始する
WiFi.begin(ssid, password);
//接続が開始するのを待つ
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
yield(); //WDTを動作させるために必要
}
//通信ができたら、ESP32に割り当てられたIPアドレスを表示する
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
//WiFiServer server(80);で作成したサーバーを開始
server.begin();
}
void loop(void)
{
//無線の強さ
long rssi = WiFi.RSSI();
// センサーデータアップロード開始
ThingSpeak.begin(client);
// フィードに値を設定
ThingSpeak.setField(1, rssi);
// ThingSpeakに送信
Serial.println();
Serial.print("Write fields...");
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
Serial.println("done");
}
ThingSpeak設定の部分にThingSpeak Channel作成の項で確認したチャンネルIDと書き込み用APIキーを入力して、ThingSpeakへデータを送信できます。
測定結果
上記のように測定結果が取得できました。
屋外にある場合は-67を下回り、屋内にある場合は-67を上回ったため、しきい値を-67としました。
おわりに
ThingSpeakは無料で使用することができ、グラフ表示もできるので、移動しながらのRSSIの測定には便利でした。