Skip to main content

reTerminal 用 Grafana

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

Grafana を使用して独自の天気 ダッシュボード を構築する

image-20220124151124558

はじめに

ここでは、Grafana を使用して reTerminal 上で独自の天気ダッシュボードを作成する方法を紹介します。このプロジェクトは Michaelm Klementsk によるものです。

InfluxDB は、オープンソース時系列データベース (TSDB) で、InfluxData 社によって開発されました。Go プログラミング言語 で記述されており、運用監視、アプリケーションメトリクス、モノのインターネット (IoT) センサーデータ、リアルタイム分析などの分野での時系列データの保存と取得を目的としています。また、Graphite からのデータ処理もサポートしています。

Grafana は、マルチプラットフォーム対応のオープンソース分析およびインタラクティブな可視化ウェブアプリケーションです。サポートされているデータソースに接続すると、ウェブ上でチャート、グラフ、アラートを提供します。追加機能を備えたライセンス版の Grafana Enterprise も、セルフホスト型インストールまたは Grafana Labs クラウドサービスのアカウントとして利用可能です。プラグインシステムを通じて拡張可能であり、エンドユーザーはインタラクティブなクエリビルダーを使用して複雑な監視ダッシュボードを作成できます。Grafana はフロントエンドとバックエンドに分かれており、それぞれ TypeScriptGo で記述されています。

私たちは ESP32 を使用して温度、湿度、気圧の測定値を収集します。これらのデータは InfluxDB の時系列データベースに投稿されます。InfluxDB は Raspberry Pi 上でローカルに実行することも、クラウドサーバー上で実行することも可能です。今回はクラウドサーバーを使用します。その後、Grafana という分析および可視化アプリケーションを使用して、データベースに保存された情報を表示します。Grafana も Raspberry Pi(または今回の場合は reTerminal)上でローカルに実行することも、クラウドサーバー上で実行することも可能です。今回は reTerminal 上でローカルにインストールして実行します。InfluxDB と Grafana を別々の Pi で使用する必要はなく、両方を reTerminal 上でローカルに実行することも可能です。ただし、データを収集するために reTerminal を常時稼働させる必要がないようにしたいと考えています。

ESP32 と Grafana 間のデータ処理

必要な材料

Azure と InfluxDB のセットアップ

まず、仮想マシンを作成する必要があります。

  • ステップ 1. 以下のページを開き、Microsoft Azure サービスにログインします。Virtual machines をクリックし、Create をクリックします。

image-20220124131855082

  • ステップ 2. 仮想マシンのデフォルトシステムとして Ubuntu 18.04 を選択します。Review + create をクリックして次のページに進みます。

image-20220124132225793

  • ステップ 3. すべての設定を選択したら、Create をクリックします。

image-20220124132800871

進行には少し時間がかかります。完了したら、Go to resource ボタンをクリックします。

image-20220124133101855

その後、以下のページに移動します。Networking をクリックし、Add inbound port rule を選択して、任意の宛先でポート 8086 を追加します。

image-20220124133706479
  • ステップ 4. 以下のコマンドをコピーして Docker をインストールし、有効化します。
sudo apt udpate
sudo apt install docker docker-compose -y
sudo systemctl enable --now docker && sudo systemctl start docker
sudo systemctl status docker

image-20220124134313484

  • ステップ 5. 以下のコマンドを使用して InfluxDB イメージをプルします。
sudo docker pull influxdb:2.1.1

image-20220124134409253

  • ステップ 6. 以下のコマンドを適用して InfluxDB をバックグラウンドで実行します。
sudo docker run -d --name influxdb -p 8086:8086 influxdb:2.1.1

image-20220124135326814

  • ステップ 7. ブラウザを開き、http://yourip:8086(あなたの IP)を入力します。"Get Started" をクリックして使用を開始します。

image-20220124135533274

  • ステップ 8. Organization NameBucket Name を記録し、"Continue" をクリックします。

image-20220124135632177

  • ステップ 9. Data > API Tokens をクリックします。

image-20220124140028985

これで Azure と InfluxDB のセットアップが完了しました。次に ESP32 の設定に進みます。

ESP32 のセットアップ

天気データを収集するために、ESP32 を使用し、DHT11 センサーをピン 4 に接続し、BMP280 圧力センサーを I2C インターフェース(ピン 21 と 22)に接続します。この例では、beginner kit の 2 つの Grove センサーモジュールを使用しています。このキットには必要な電子部品(追加の抵抗など)がすべて組み込まれています。

ESP32 Circuit Diagram

  1. ライブラリマネージャーを使用
1. Arduino IDE を開き、"Sketch" メニューをクリックして Include Library > Manage Libraries を選択します。
2. 検索ボックスに 'influxdb' と入力します。
3. 'InfluxDBClient for Arduino' ライブラリをインストールします。
  1. 手動インストール
1. cd <arduino-sketch-location>/library
2. git clone https://github.com/tobiasschuerg/InfluxDB-Client-for-Arduino
3. Arduino IDE を再起動します。
  • ステップ 2. 以下のコードをスケッチにコピーします。
#include <Wire.h>                                                   // 必要なライブラリをインポート
#include "DHT.h"
#include "Seeed_BMP280.h"
#include <WiFiMulti.h>
WiFiMulti wifiMulti;
#define DEVICE "ESP32"

#include <InfluxDbClient.h>
#include <InfluxDbCloud.h>

#define WIFI_SSID "xxxxxxxx" // ネットワーク名
#define WIFI_PASSWORD "xxxxxxxxxx" // ネットワークパスワード
#define INFLUXDB_URL "http://xxxxxxxx:8086" // InfluxDB v2 サーバー URL
#define INFLUXDB_TOKEN "xxxxxxxxx" // InfluxDB v2 サーバーまたはクラウド API トークン
#define INFLUXDB_ORG "xxxxxxx" // InfluxDB v2 組織 ID
#define INFLUXDB_BUCKET "xxxxxxx" // InfluxDB v2 バケット名
#define TZ_INFO "JST-9" // InfluxDB v2 タイムゾーン

DHT dht(4,DHT11); // DHT と BMP センサーのパラメータ
BMP280 bmp280;

int temp = 0; // センサーの読み取り値を格納する変数
int humid = 0;
int pressure = 0;

//InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN, InfluxDbCloud2CACert); // InfluxDB クライアントインスタンス(事前構成済みの InfluxCloud 証明書付き)
InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN);

Point sensor("weather"); // データポイント

void setup()
{
Serial.begin(115200); // シリアル通信を開始

dht.begin(); // DHT センサーに接続
if(!bmp280.init()) // 圧力センサーに接続
Serial.println("bmp280 init error!");

WiFi.mode(WIFI_STA); // WiFi 接続を設定
wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);

Serial.print("Connecting to wifi"); // WiFi に接続
while (wifiMulti.run() != WL_CONNECTED)
{
Serial.print(".");
delay(100);
}
Serial.println();

sensor.addTag("device", DEVICE); // タグを追加(必要に応じて繰り返し)
sensor.addTag("SSID", WIFI_SSID);

timeSync(TZ_INFO, "pool.ntp.org", "time.nis.gov"); // 証明書の検証とバッチ書き込みに必要な正確な時刻を設定

if (client.validateConnection()) // サーバー接続を確認
{
Serial.print("Connected to InfluxDB: ");
Serial.println(client.getServerUrl());
}
else
{
Serial.print("InfluxDB connection failed: ");
Serial.println(client.getLastErrorMessage());
}
}

void loop() // ループ関数
{
temp = dht.readTemperature(); // 温度を記録
humid = dht.readHumidity(); // 湿度を記録
pressure = bmp280.getPressure()/100; // 圧力を記録

sensor.clearFields(); // ポイントを再利用するためにフィールドをクリア。タグはそのまま

sensor.addField("temperature", temp); // 測定値をポイントに格納
sensor.addField("humidity", humid); // 測定値をポイントに格納
sensor.addField("pressure", pressure); // 測定値をポイントに格納


if (wifiMulti.run() != WL_CONNECTED) // WiFi 接続を確認し、必要に応じて再接続
Serial.println("Wifi connection lost");

if (!client.writePoint(sensor)) // データポイントを書き込み
{
Serial.print("InfluxDB write failed: ");
Serial.println(client.getLastErrorMessage());
}

Serial.print("Temp: "); // シリアルモニターに読み取り値を表示
Serial.println(temp);
Serial.print("Humidity: ");
Serial.println(humid);
Serial.print("Pressure: ");
Serial.println(pressure);
delay(1000); // 60 秒待機
}

注意: コードは完成していません。API トークンとバケットを設定すると、InfluxDB ダッシュボードからアクセスできる Arduino インターフェースページで生成されたコードには、すでに正しい設定情報が含まれています。そのため、コードにコピーするだけで済みます。

InfluxDB Arduino インターフェースの手順

  • ステップ 3. コードをアップロードして結果を確認します。

image-20220124140133524

しばらくすると、情報が InfluxDB データベースに表示されるのが確認でき、ESP32 が正しく動作していることがわかります。次に、reTerminal に Grafana をインストールし、データベースの情報を表示するように設定します。

reTerminal に Grafana をインストールして設定する

次に、Debian または Ubuntu にインストールする手順に従って、ターミナルで Grafana をインストールします。その後、Grafana を起動し、起動時に再起動するように設定します。

Grafana のインストール

  • ステップ 1. ブラウザで新しいタブを開き、localhost のポート 3000 にアクセスして Grafana の Web インターフェースにアクセスします。reTerminal 上のブラウザを開き、http://localhost:3000 と入力します。

Grafana Web インターフェース Localhost3000

次に、InfluxDB からデータを読み取るように設定します。サーバーと認証情報を入力します。これらはすべて InfluxDB の Web インターフェースで確認でき、ESP32 がデータを送信している情報と非常に似ています。

  • ステップ 2. Setting ボタンをクリックし、Data sources を選択します。

image-20220124144300849

  • ステップ 3. フィルターに InfluxDB と入力し、InfluxDB を選択します。

image-20220124144322352

これで、reTerminal に Grafana をインストールして設定が完了しました。

Grafana を Flux に設定する

InfluxDB データソースでクエリ言語として Flux を選択した状態で、InfluxDB 接続を設定します。

img

Grafana は InfluxDB 2.0 データソースに接続し、テスト結果を返します。

  • ステップ 2. パネルを追加します。

image-20220124143542830

  • ステップ 3. InfluxDB に戻り、以下の手順に従ってスクリプトを作成します。

image-20220124143752559

  • ステップ 4. スクリプトをコピーして reTerminal に貼り付けます。

image-20220124143812005

image-20220124151052928

  • ステップ 5. reTerminal で結果を確認し、以下のように情報が表示されるはずです。

image-20220124164221791

image-20220124151124558

Loading Comments...