reTerminal 用 Grafana
この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues
Grafana を使用して独自の天気 ダッシュボード を構築する
はじめに
ここでは、Grafana を使用して reTerminal 上で独自の天気ダッシュボードを作成する方法を紹介します。このプロジェクトは Michaelm Klementsk によるものです。
InfluxDB は、オープンソースの時系列データベース (TSDB) で、InfluxData 社によって開発されました。Go プログラミング言語 で記述されており、運用監視、アプリケーションメトリクス、モノのインターネット (IoT) センサーデータ、リアルタイム分析などの分野での時系列データの保存と取得を目的としています。また、Graphite からのデータ処理もサポートしています。
Grafana は、マルチプラットフォーム対応のオープンソース分析およびインタラクティブな可視化ウェブアプリケーションです。サポートされているデータソースに接続すると、ウェブ上でチャート、グラフ、アラートを提供します。追加機能を備えたライセンス版の Grafana Enterprise も、セルフホスト型インストールまたは Grafana Labs クラウドサービスのアカウントとして利用可能です。プラグインシステムを通じて拡張可能であり、エンドユーザーはインタラクティブなクエリビルダーを使用して複雑な監視ダッシュボードを作成できます。Grafana はフロントエンドとバックエンドに分かれており、それぞれ TypeScript と Go で記述されています。
私たちは ESP32 を使用して温度、湿度、気圧の測定値を収集します。これらのデータは InfluxDB の時系列データベースに投稿されます。InfluxDB は Raspberry Pi 上でローカルに実行することも、クラウドサーバー上で実行することも可能です。今回はクラウドサーバーを使用します。その後、Grafana という分析および可視化アプリケーションを使用して、データベースに保存された情報を表示します。Grafana も Raspberry Pi(または今回の場合は reTerminal)上でローカルに実行することも、クラウドサーバー上で実行することも可能です。今回は reTerminal 上でローカルにインストールして実行します。InfluxDB と Grafana を別々の Pi で使用する必要はなく、両方を reTerminal 上でローカルに実行することも可能です。ただし、データを収集するために reTerminal を常時稼働させる必要がないようにしたいと考えています。
必要な材料
- reTerminal
- 電源
- ESP32
- Grove Sensor’s From Beginner Kit
- ブレッドボード
- ブレッドボードジャンパー
Azure と InfluxDB のセットアップ
まず、仮想マシンを作成する必要があります。
- ステップ 1. 以下のページを開き、Microsoft Azure サービスにログインします。
Virtual machines
をクリックし、Create
をクリックします。
- ステップ 2. 仮想マシンのデフォルトシステムとして Ubuntu 18.04 を選択します。
Review + create
をクリックして次のページに進みます。
- ステップ 3. すべての設定を選択したら、
Create
をクリックします。
進行には少し時間がかかります。完了したら、Go to resource
ボタンをクリックします。
その後、以下のページに移動します。Networking
をクリックし、Add inbound port rule
を選択して、任意の宛先でポート 8086
を追加します。

- ステップ 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
- ステップ 5. 以下のコマンドを使用して InfluxDB イメージをプルします。
sudo docker pull influxdb:2.1.1
- ステップ 6. 以下のコマンドを適用して InfluxDB をバックグラウンドで実行します。
sudo docker run -d --name influxdb -p 8086:8086 influxdb:2.1.1
- ステップ 7. ブラウザを開き、
http://yourip:8086
(あなたの IP)を入力します。"Get Started" をクリックして使用を開始します。
- ステップ 8.
Organization Name
とBucket Name
を記録し、"Continue" をクリックします。
- ステップ 9.
Data > API Tokens
をクリックします。
これで Azure と InfluxDB のセットアップが完了しました。次に ESP32 の設定に進みます。
ESP32 のセットアップ
天気データを収集するために、ESP32 を使用し、DHT11 センサーをピン 4 に接続し、BMP280 圧力センサーを I2C インターフェース(ピン 21 と 22)に接続します。この例では、beginner kit の 2 つの Grove センサーモジュールを使用しています。このキットには必要な電子部品(追加の抵抗など)がすべて組み込まれています。
- ステップ 1. Arduino IDE を開き、ライブラリをインストール します。以下の 2 つの方法を提供します。
- ライブラリマネージャーを使用
1. Arduino IDE を開き、"Sketch" メニューをクリックして Include Library > Manage Libraries を選択します。
2. 検索ボックスに 'influxdb' と入力します。
3. 'InfluxDBClient for Arduino' ライブラリをインストールします。
- 手動インストール
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 インターフェースページで生成されたコードには、すでに正しい設定情報が含まれています。そのため、コードにコピーするだけで済みます。
- ステップ 3. コードをアップロードして結果を確認します。
しばらくすると、情報が InfluxDB データベースに表示されるのが確認でき、ESP32 が正しく動作していることがわかります。次に、reTerminal に Grafana をインストールし、データベースの情報を表示するように設定します。
reTerminal に Grafana をインストールして設定する
次に、Debian または Ubuntu にインストールする手順に従って、ターミナルで Grafana をインストールします。その後、Grafana を起動し、起動時に再起動するように設定します。
- ステップ 1. ブラウザで新しいタブを開き、localhost のポート 3000 にアクセスして Grafana の Web インターフェースにアクセスします。reTerminal 上のブラウザを開き、
http://localhost:3000
と入力します。
次に、InfluxDB からデータを読み取るように設定します。サーバーと認証情報を入力します。これらはすべて InfluxDB の Web インターフェースで確認でき、ESP32 がデータを送信している情報と非常に似ています。
- ステップ 2.
Setting
ボタンをクリックし、Data sources
を選択します。
- ステップ 3. フィルターに
InfluxDB
と入力し、InfluxDB
を選択します。
これで、reTerminal に Grafana をインストールして設定が完了しました。
Grafana を Flux に設定する
InfluxDB データソースでクエリ言語として Flux を選択した状態で、InfluxDB 接続を設定します。
ステップ 1. Connection を設定し、Save & Test をクリックします。それぞれの情報は以下の通りです:
URL: あなたの InfluxDB URL。
http://yourip:8086/
Organization: あなたの InfluxDB 組織名または ID。
Token: あなたの InfluxDB API トークン。
Default Bucket: Flux クエリで使用するデフォルトの バケット。
Min time interval: Grafana の最小時間間隔。
Grafana は InfluxDB 2.0 データソースに接続し、テスト結果を返します。
- ステップ 2. パネルを追加します。
- ステップ 3.
InfluxDB
に戻り、以下の手順に従ってスクリプトを作成します。
- ステップ 4. スクリプトをコピーして reTerminal に貼り付けます。
- ステップ 5. reTerminal で結果を確認し、以下のように情報が表示されるはずです。