Google 使用方法
この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues
Wio Terminal を Google Cloud IoT Core に接続する
産業用センサーへのアップグレード可能
SenseCAP S2110 コントローラー と S2100 データロガー を使用することで、Grove を簡単に LoRaWAN® センサーに変えることができます。Seeed はプロトタイピングをサポートするだけでなく、SenseCAP シリーズの堅牢な産業用センサーを使用してプロジェクトを拡張する可能性も提供します。
IP66 ハウジング、Bluetooth 設定、グローバル LoRaWAN® ネットワークとの互換性、内蔵 19 Ah バッテリー、そしてアプリからの強力なサポートにより、SenseCAP S210x は産業用途に最適な選択肢となります。このシリーズには、土壌水分、空気温度と湿度、光強度、CO2、EC、そして 8-in-1 気象ステーション用のセンサーが含まれています。次の成功する産業プロジェクトに向けて、最新の SenseCAP S210x をお試しください。
SenseCAP 産業用センサー | |||
S2100 データロガー | S2101 空気温度 & 湿度 | S2102 光強度 | S2103 空気温度 & 湿度 & CO2 |
S2104 土壌水分 & 温度 | S2105 土壌水分 & 温度 & EC | S2110 LoRaWAN® コントローラー | S2120 8-in-1 気象ステーション |
はじめに
このチュートリアルでは、Wio Terminal を Google Cloud IoT Core に接続し、Wio Terminal から Google Cloud IoT Core にテレメトリデータを送信するプロセスを説明します。これを2つのセクションに分けて解説します。最初のセクションでは、既存のライブラリを使用してコード内で事前設定されたテレメトリデータを送信する方法について説明します。一方、2番目のセクションでは、独自のセンサーを Wio Terminal に追加してテレメトリデータを Google Cloud IoT Core に送信する方法について説明します。Google Cloud IoT Core は HTTP と MQTT の両方のプロトコルをサポートしていますが、このチュートリアルでは MQTT プロトコルを使用します。
Google Cloud とは?
Google Cloud は、コンピュータやハードディスクドライブなどの物理的な資産と、仮想マシン(VM)などの仮想リソースで構成されています。これらは、世界中の Google のデータセンターに配置されています。このリソースの分散により、障害時の冗長性や、クライアントに近い場所にリソースを配置することで遅延を削減するなど、いくつかの利点が得られます。
クラウドコンピューティングでは、従来ソフトウェアやハードウェア製品として考えられていたものがサービスとして提供されます。これらのサービスは、基盤となるリソースへのアクセスを提供します。利用可能な Google Cloud サービスの一覧 は非常に多く、さらに増え続けています。Google Cloud 上でウェブサイトやアプリケーションを開発する際には、これらのサービスを組み合わせて必要なインフラを構築し、その上にコードを追加して実現したいシナリオを構築します。
Google Cloud Platform とは?
Google Cloud Platform (GCP) は、クラウドコンピューティングサービスの集合体です。一連の管理ツールを備え、コンピューティング、データストレージ、データ分析、機械学習などのモジュール型クラウドサービスを提供します。GCP は、インフラストラクチャー・アズ・ア・サービス(IaaS)、プラットフォーム・アズ・ア・サービス(PaaS)、およびサーバーレスコンピューティング環境を提供します。
Google Cloud IoT Core とは?
Google Cloud Internet of Things (IoT) Core は、IoT デバイスを安全に接続および管理するための完全管理型サービスです。数台から数百万台のデバイスまで対応可能で、接続されたデバイスからデータを取り込み、Google Cloud Platform の他のビッグデータサービスと統合したリッチなアプリケーションを構築できます。
Google Cloud Console とは?
Google Cloud Console は、Google Cloud Platform のリソースを管理するためのウェブベースのグラフィカルユーザーインターフェースを提供します。Cloud Console を使用すると、新しいプロジェクトを作成するか、既存のプロジェクトを選択し、そのプロジェクトのコンテキストでリソースを使用できます。複数のプロジェクトを作成できるため、作業を適切に分離することが可能です。たとえば、特定のチームメンバーだけがそのプロジェクト内のリソースにアクセスできるようにしたい場合に新しいプロジェクトを開始し、他のプロジェクトではすべてのチームメンバーがリソースにアクセスできるようにする、といった使い方ができます。
Wio Terminal を Google Cloud IoT Core に MQTT 経由で接続する
前述の通り、Wio Terminal と Google Cloud IoT Core の間の通信には利用可能な MQTT ブリッジを使用します。ただし、必要に応じて HTTP ブリッジを使用することも可能です。
Google Cloud コンソールのセットアップ
まず、Google Cloud コンソールにアクセスし、Cloud IoT Core デバイスレジストリを作成してデバイスを登録します。
初期設定
- STEP 1: こちらにアクセスして新しいプロジェクトを作成します。
注意: ログインを求められた場合は、Google アカウントにログインしてください。
STEP 2: プロジェクトを選択メニューをクリックします。
STEP 3: 新しいプロジェクトをクリックし、プロジェクト名を入力します。
STEP 4: 作成をクリックします。
STEP 5: Cloud プロジェクトの課金を有効にします。これは、ロボットではないことを確認するために必要であり、課金されることはありません。ナビゲーションメニューで「課金」を選択し、設定を進めてください。
- STEP 6: こちらにアクセスして、Cloud IoT Core と Cloud Pub/Sub API を有効にします。
注意: ドロップダウンメニューから、先ほど作成したプロジェクトを選択してください。
デバイスレジストリを作成する
STEP 1: Cloud コンソールの Google Cloud IoT Core ページ にアクセスします。
STEP 2: レジストリを作成をクリックします。
STEP 3: レジストリ ID を入力します。
注意: これはレジストリの名前です。
- STEP 4: リージョンを選択します。
注意: 米国にいる場合は、リージョンとして us-central1 を選択します。米国外の場合は、希望するリージョンを選択してください。
STEP 5: Cloud Pub/Sub トピックを選択ドロップダウンリストで、トピックを作成を選択し、希望するトピック IDを入力します。
STEP 6: トピックを作成をクリックします。
STEP 7: 詳細オプションを表示をクリックします。
STEP 8: デバイス状態トピックと証明書値フィールドはオプションなので、空白のままにします。
STEP 9: プロトコルとして MQTT を選択します。
STEP 10: Cloud IoT Core ページで 作成 をクリックします。
これで、デバイスのテレメトリイベントを公開するための Cloud Pub/Sub トピックを持つデバイスレジストリが作成されました。
デバイスキーのペアを生成する (EC キー)
Cloud IoT Core は公開鍵 (または非対称) 認証を使用します。
- デバイスは秘密鍵を使用して JSON Web Token (JWT) を署名します。このトークンはデバイスのアイデンティティの証明として Cloud IoT Core に渡されます。
- サービスは、JWT が送信される前にアップロードされたデバイス公開鍵を使用してデバイスのアイデンティティを検証します。
Cloud IoT Core は RSA と楕円曲線アルゴリズムをサポートしており、このチュートリアルでは楕円曲線キーを使用します。
STEP 1: PC 上に新しいフォルダを作成します。
STEP 2: ターミナルウィンドウからフォルダに移動し、以下のコマンドを入力して P-256 楕円曲線キーのペアを生成します。
openssl ecparam -genkey -name prime256v1 -noout -out ec_private.pem
openssl ec -in ec_private.pem -pubout -out ec_public.pem
注意: このリンクに従って openssl をインストールし、ディレクトリの場所を PATH に追加してください。
上記のコマンドは以下の公開/秘密鍵ペアを生成します:
- ec_private.pem: デバイス上で安全に保存され、認証 JWT を署名するために使用される秘密鍵。
- ec_public.pem: Cloud IoT Core に保存され、認証 JWT の署名を検証するために使用される公開鍵。
秘密鍵を抽出する
秘密鍵のバイトを抽出し、後で作成する Arduino プロジェクトの秘密鍵文字列にコピーする必要があります。これらの鍵を保存して後で使用します。
STEP 1: ターミナルウィンドウを開き、以前生成した楕円曲線キーのペアを含むフォルダに移動します。
STEP 2: 以下のコマンドを入力します。
openssl ec -in ec_private.pem -noout -text
- STEP 3: priv: の下に生成された秘密鍵バイトをコピーして、メモ帳に貼り付けて保存します。
レジストリにデバイスを追加する
STEP 1: レジストリページにアクセスし、以前作成したレジストリを選択します。
STEP 2: デバイスタブを選択し、デバイスを作成をクリックします。
STEP 3: デバイス ID を入力します。
STEP 4: デバイスメタデータフィールドはオプションなので、空白のままにします。
STEP 5: 通信、クラウドログ、認証ドロップダウンメニューをクリックします。
STEP 6: デバイス通信で 許可 を選択します。
STEP 7: 認証フィールド内の 入力方法で アップロード を選択します。
STEP 8: 公開鍵形式ドロップダウンメニューから ES256 を選択します。
STEP 9: 公開鍵値の下で 参照ボタンを押し、以前作成した楕円曲線キーのペアフォルダに移動して ec_public.pem を選択します。
STEP 10: 作成をクリックします。
これで、レジストリにデバイスを追加しました。デバイスの詳細ページに ES256 キーが表示されます。
サブスクライバーを設定する
デバイスレジストリを作成し、トピックを作成し、そのレジストリにデバイスを追加したので、次に進んで、作成したトピックを購読するサブスクライバーを作成し、Wio Terminal からテレメトリデータを取得します。
- STEP 1: Google Cloud コンソールの検索バーに Pub と入力し、結果から Pub/Sub を選択します。
STEP 2: ナビゲーションメニューで サブスクリプション をクリックします。
STEP 3: CREATE SUBSCRIPTION をクリックします。
STEP 4: 任意の Subscription ID を入力します。
STEP 5: Select a Cloud Pub/Sub topic ドロップダウンメニューから、以前作成した Pub/Sub topic を選択します。
STEP 6: 配信タイプとして Pull を選択します。
STEP 7: Create をクリックします。
これで Google Cloud IoT Core の設定が完了しました。次に、Arduino IDE を使用して Wio Terminal の設定に進みます。
Arduino IDE を使用した Wio Terminal のセットアップ
必要なライブラリ
このチュートリアルでは、以下の2つのライブラリが必要です。
- lwMQTT MQTT Arduino ライブラリ
- Google Cloud IoT Arduino ライブラリ
これらのライブラリをダウンロードする手順:
- STEP 1: Arduino IDE を開きます。
- STEP 2:
Sketch > Include Library > Manage Libraries
に移動します。 - STEP 3: 検索ボックスに lwMQTT と Google Cloud IoT を入力し、ライブラリをインストールします。
資格情報とアカウント情報の設定
次に、ciotc_config.h ファイルに Wi-Fi の資格情報と Google Cloud IoT Core の情報を設定します。
STEP 1: Arduino IDE 内で、
File > Examples > Google Cloud IoT JWT > Esp32-lwmqtt
に移動します。STEP 2: ciotc_config.h を開きます。
STEP 3: Wi-Fi ネットワークの詳細 を変更します。
const char *ssid = "Enter_SSID";
const char *password = "Enter_Password";
- STEP 4: Google Cloud IoT の詳細 を変更します。
const char *project_id = "Enter_Project_ID";
const char *location = "Enter_location";
const char *registry_id = "Enter_Registry_ID";
const char *device_id = "Enter_Device_ID";
- STEP 5: ec_private.pem から取得したプライベートキーのバイトをコピーし、事前に保存した内容を入力します。
const char *private_key_str =
"6e:b8:17:35:c7:fc:6b:d7:a9:cb:cb:49:7f:a0:67:"
"63:38:b0:90:57:57:e0:c0:9a:e8:6f:06:0c:d9:ee:"
"31:41";
注意: キーの長さは 32 ペアの 16 進数である必要があります。
NTP 時間取得方法の変更
esp32-mqtt.h を開き、以下のコードでファイル全体を置き換えます。ここでは、UDP を使用して NTP 時間を取得する実装に configTime 関数を置き換えています。
#include <Client.h>
#include <rpcWiFi.h>
#include <WiFiClientSecure.h>
#include <MQTT.h>
#include <CloudIoTCore.h>
#include <CloudIoTCoreMqtt.h>
#include "ciotc_config.h" // このファイルを設定内容で更新してください
// !!REPLACEME!!
// コマンドと設定更新のための MQTT コールバック関数
// メッセージハンドラーコードをここに記述してください。
void messageReceived(String &topic, String &payload){
Serial.println("incoming: " + topic + " - " + payload);
}
///////////////////////////////
// このボード用の WiFi と MQTT の初期化
//Client *netClient;
CloudIoTCoreDevice *device;
CloudIoTCoreMqtt *mqtt;
MQTTClient *mqttClient;
unsigned long iat = 0;
String jwt;
WiFiUDP udp;
unsigned int localPort = 2390;
unsigned long devicetime;
const int NTP_PACKET_SIZE = 48; // NTP タイムスタンプはメッセージの最初の 48 バイトに含まれています
byte packetBuffer[NTP_PACKET_SIZE]; // 受信および送信パケットを保持するバッファ
// 指定されたアドレスのタイムサーバーに NTP リクエストを送信
unsigned long sendNTPpacket(const char* address) {
// バッファ内のすべてのバイトを 0 に設定
for (int i = 0; i < NTP_PACKET_SIZE; ++i) {
packetBuffer[i] = 0;
}
// NTP リクエストを形成するために必要な値を初期化
packetBuffer[0] = 0b11100011; // LI, Version, Mode
packetBuffer[1] = 0; // Stratum, or type of clock
packetBuffer[2] = 6; // Polling Interval
packetBuffer[3] = 0xEC; // Peer Clock Precision
// Root Delay & Root Dispersion のための 8 バイトのゼロ
packetBuffer[12] = 49;
packetBuffer[13] = 0x4E;
packetBuffer[14] = 49;
packetBuffer[15] = 52;
// すべての NTP フィールドに値が設定されたので、
// タイムスタンプを要求するパケットを送信できます:
udp.beginPacket(address, 123); // NTP リクエストはポート 123 に送信されます
udp.write(packetBuffer, NTP_PACKET_SIZE);
udp.endPacket();
}
unsigned long getNTPtime() {
// モジュールは Jan 1, 1970 以降の秒数として unsigned long 型の時間値を返します
// 問題が発生した場合は 0 を返します
// 接続されている場合のみデータを送信
if (WiFi.status() == WL_CONNECTED) {
// UDP 状態を初期化
udp.begin(WiFi.localIP(), localPort);
sendNTPpacket(ntp_primary); // タイムサーバーに NTP パケットを送信
// 応答が利用可能かどうかを確認するために待機
delay(1000);
if (udp.parsePacket()) {
udp.read(packetBuffer, NTP_PACKET_SIZE); // パケットをバッファに読み込み
unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
unsigned long secsSince1900 = highWord << 16 | lowWord;
const unsigned long seventyYears = 2208988800UL;
unsigned long epoch = secsSince1900 - seventyYears;
long tzOffset = 0UL;
unsigned long adjustedTime;
return adjustedTime = epoch + tzOffset;
}
else {
udp.stop();
return 0; // 失敗を示す 0 を返します
}
udp.stop();
}
else {
return 0;
}
}
///////////////////////////////
// このボード固有のヘルパー
///////////////////////////////
String getDefaultSensor(){
return "Wifi: " + String(WiFi.RSSI()) + "db";
}
String getJwt(){
Serial.println("Refreshing JWT");
iat = getNTPtime();
Serial.println(iat);
jwt = device->createJWT(iat, jwt_exp_secs);
Serial.println(jwt);
return jwt;
}
void setupWifi(){
Serial.println("Starting wifi");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED){
delay(100);
}
Serial.println("Waiting on time sync...");
while (getNTPtime() < 1510644967){
delay(10);
}
}
void connectWifi(){
Serial.print("checking wifi...");
while (WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(1000);
}
}
///////////////////////////////
// さまざまなメソッドを統合
///////////////////////////////
bool publishTelemetry(String data){
return mqtt->publishTelemetry(data);
}
bool publishTelemetry(const char *data, int length){
return mqtt->publishTelemetry(data, length);
}
bool publishTelemetry(String subfolder, String data){
return mqtt->publishTelemetry(subfolder, data);
}
bool publishTelemetry(String subfolder, const char *data, int length){
return mqtt->publishTelemetry(subfolder, data, length);
}
void connect(){
connectWifi();
mqtt->mqttConnect();
}
WiFiClientSecure netClient;
void setupCloudIoT(){
device = new CloudIoTCoreDevice(
project_id, location, registry_id, device_id,
private_key_str);
setupWifi();
mqttClient = new MQTTClient(512);
mqttClient->setOptions(180, true, 1000); // keepAlive, cleanSession, timeout
mqtt = new CloudIoTCoreMqtt(mqttClient, &netClient, device);
mqtt->setUseLts(true);
mqtt->startMQTT();
}
Esp32-lwmqtt.ino にマクロ定義を追加
Esp32-lwmqtt.ino 内に Wio Terminal ボードをマクロ定義に追加します。
#if defined(ESP32) || defined(WIO_TERMINAL)
#define __ESP32_MQTT_H__
#endif
これで Arduino IDE の設定が完了しました。最後に、このコードを Wio Terminal にアップロードする必要があります。シリアルモニターを開くと、以下の内容が表示されます。
テレメトリデータの表示
次に、Wio Terminal から送信されるテレメトリデータを表示する必要があります。この例では、Wi-Fi 信号強度がテレメトリデータとして送信されます。
- STEP 1: Google Cloud Console の Pub/Sub にアクセスします。
注意: Google Cloud Console の検索バーで Pub を検索できます。
STEP 2: ナビゲーションメニュー内の Subscriptions に移動します。
STEP 3: 以前に作成したサブスクリプション ID を選択します。
STEP 4: VIEW MESSAGES をクリックします。
STEP 5: PULL をクリックすると、以下のように受信したテレメトリデータが表示されます。
他のセンサーを追加する方法
Wio Terminal に任意のセンサーを追加して、Google Cloud IoT Core にテレメトリデータを送信することができます。簡単にするために、Wio Terminal に内蔵されている光センサーを使用して、光の強度レベルを Google Cloud IoT Core に送信します。
Google Cloud IoT の設定
- STEP 1: Google Cloud Console の IoT Core にアクセスします。
注意: Google Cloud Console の検索バーで IoT Core を検索できます。
STEP 2: 以前に作成したレジストリを選択します。
STEP 3: Cloud Pub/Sub topics の下で Add or edit topics を選択します。
STEP 4: ADD ADDITIONAL TOPIC をクリックします。
STEP 5: Select a Cloud Pub/Sub topic のドロップダウンメニューから CREATE A TOPIC をクリックします。
STEP 6: Topic ID を入力し、CREATE TOPIC をクリックします。
STEP 7: Subfolder 列内に Subfolder name を入力します。
注意: サブフォルダ名は Arduino コード内でトピックに関連付けるために使用されます。
STEP 8: UPDATE をクリックします。
STEP 9: 以前説明したように新しいサブスクリプションを作成します。
Arduino の設定
Esp32-lwmqtt.ino に移動し、以下を追加します。
- STEP 1: ループの後に、内蔵光センサー用の以下を追加します。
void loop() {
int light = analogRead(WIO_LIGHT); // 光センサー値を格納する変数を割り当てる
light = map(light,0,1023,0,100); // センサー値をマッピングする
- STEP 2: サブフォルダ名を含むトピックを追加します。
publishTelemetry(getDefaultSensor());
publishTelemetry("/light",String(light));
注意: サブフォルダ名が追加されない場合、テレメトリデータはデフォルトトピックに送信されます。この場合、以前説明した Wi-Fi 信号強度のテレメトリデータは、デフォルトトピックとして作成した最初のトピックに送信されます。
コードを Wio Terminal にアップロードした後、新しく作成したトピックからサブスクライバーとしてプルすると、以下の結果が表示されます。
他のセンサーを追加してダッシュボードでデータを可視化する方法
Google Cloud IoT Core はセンサーからのデータを可視化するための既製のダッシュボードを提供していませんが、InfluxDB と Grafana を使用してこれを実現する方法を説明します。
InfluxDB は時系列データベースであり、各データは特定のタイムスタンプに関連付けられています。タイムスタンプは特定のデータに関連する日付と時刻を示します。一方、Grafana はオープンソースのソリューションであり、大量のデータを分析し、意味のあるメトリクスを引き出し、カスタマイズ可能なダッシュボードを使用してアプリを監視するために使用されます。
基本的には、温度/湿度センサーを Wio Terminal に接続し、Google Cloud Function を使用して Pub/Sub から GKE (Google Kubernetes Engine) クラスター内の InfluxDB にデータを送信し、Grafana のインタラクティブなダッシュボードを使用して InfluxDB からデータを表示します。
Arduino のハードウェア設定
Grove - Temperature and Humidity Sensor (DHT11) を Wio Terminal の Grove - Digital/Analog Port (D0) に接続します。
Arduino のソフトウェア設定
STEP 1: Grove - Temperature and Humidity Sensor repo にアクセスし、zip ファイルとしてダウンロードします。
STEP 2: Arduino を開き、
Sketch > Include Library > Add .ZIP Library
に移動して、ダウンロードしたライブラリを選択してインストールします。
以前使用した Esp32-lwmqtt.ino に移動し、以下を追加します。
- STEP 1: #include "esp32-mqtt.h" の後に以下を追加します。
#include "DHT.h" //DHT ライブラリ
#define DHTPIN 0 //DHT の信号ピンを定義
#define DHTTYPE DHT11 //DHT センサータイプを定義
DHT dht(DHTPIN, DHTTYPE); //DHT センサーを初期化
- STEP 2: setup 内に以下を追加して DHT センサーを開始します。
dht.begin();
- STEP 3: void loop() 内の if loop に以下を追加します。
int temperature = dht.readTemperature(); // 温度を格納する変数を割り当てる
int humidity = dht.readHumidity(); // 湿度を格納する変数を割り当てる
String payload = String("{\"timestamp\":") + getNTPtime() +
String(",\"temperature\":") + temperature +
String(",\"humidity\":") + humidity +
String("}");
publishTelemetry(payload);
注意: ここでは、すべてのデータを文字列として influxDB に解析します。influxDB は時系列データベースであるため、time の解析が重要です。また、pushTelemetry 関数は、このチュートリアルの最初に作成したデフォルトのトピックにデータを送信します。
- STEP 4: コードを Wio Terminal にアップロードします。
Google Cloud IoT のセットアップ
STEP 1: こちら のリポジトリを訪問し、ZIP ファイルとしてダウンロードします。
STEP 2: ダウンロードした ZIP ファイルを解凍します。
STEP 3: Google Cloud Console を開き、Google Kubernetes Engine に移動し、システムの初期化を待ちます。
STEP 4: 右上のボタンを押して Cloud Shell を起動します。
- STEP 5: 以下のコマンドを入力して、gcloud コマンドラインツールのデフォルトを設定します。
export ZONE=<enter_zone> # 例: us-central1-a, 詳細は https://cloud.google.com/compute/docs/regions-zones/#available を参照
export PROJECT_ID=<enter_project-id> # プロジェクト ID 名
gcloud config set project $PROJECT_ID
gcloud config set compute/zone $ZONE
- STEP 6: 以下のコマンドを入力して、n1-standard-1 ノードを 1 つ持つ GKE クラスターを作成します。
gcloud container clusters create influxdb-grafana \
--num-nodes 1 \
--machine-type n1-standard-1 \
--zone $ZONE
- STEP 7: 以下のコマンドを入力して、InfluxDB と Grafana の認証情報を保存するシークレットを作成します。
kubectl create secret generic influxdb-grafana \
--from-literal=influxdb-user=admin \
--from-literal=influxdb-password=passw0rd \
--from-literal=grafana-user=admin \
--from-literal=grafana-password=passw0rd
注意: influxdb / grafana のユーザー名とパスワードはお好みに応じて変更できます。
STEP 8: Google Shell 内で Open Editor をクリックします。
STEP 9: 先ほどダウンロードして解凍したフォルダを Cloud Shell Editor にドラッグ&ドロップします。
STEP 10: Open Terminal をクリックしてターミナルに戻ります。以下を入力して 05-influxdb_grafana_k8s ディレクトリに移動します。
cd esp32-cloud-iot-core-k8s-master/05-influxdb_grafana_k8s
- STEP 11: 以下のコマンドを入力して、InfluxDB と Grafana を Kubernetes にデプロイします。
kubectl create -f k8s/
Grafana のセットアップ
- STEP 1: 以下を入力して、サービスの外部 IP / ポートを確認します。
kubectl get services
STEP 2: Grafana の外部 IP をコピーします。
STEP 3:
http://<grafana service external ip>:3000
にアクセスします。
注意: コピーした Grafana の外部 IP を <grafana service external ip>
に貼り付けます。
STEP 4: 先ほど設定した認証情報で Grafana にログインします。
STEP 5: 歯車アイコンをクリックし、
Configuration > Data Sources
に移動します。STEP 6: Add data source をクリックし、influxDB を選択します。
STEP 7: URL フィールドに以下を入力します。
http://influxdb:8086
- STEP 8: Database フィールドに以下を入力し、Save & Test をクリックします。
iot
注意: InfluxDB データソースを Grafana に正常に設定できた場合、Data source is working というメッセージが表示されます。
Google Cloud Function の作成
次に、Pub/Sub のトピックから InfluxDB にデータを送信し、InfluxDB のデータを Grafana のインタラクティブなダッシュボードで表示するための Google Cloud Function を作成します。
STEP 1: Google Cloud Console に戻り、Cloud Shell を開きます。
STEP 2: 以下を入力して Cloud Functions API を有効にします。
gcloud services enable cloudfunctions.googleapis.com
- STEP 3: 以下を入力して 06-cloud_function ディレクトリに移動します。
cd esp32-cloud-iot-core-k8s-master/06-cloud_function
- STEP 4: vim テキストエディタで main.py を開きます。
cd esp32-cloud-iot-core-k8s-master/06-cloud_function
STEP 5: キーボードで i を押して 編集モード に入ります。
STEP 6: _get_influxdb_client 関数内の InfluxDB 変数(ホスト、ポート、ユーザー名、パスワード)を変更します。
注意: 以下を Cloud Shell で入力して外部 IP をコピーし、InfluxDB ホストを取得します。
kubectl get services
STEP 7: :wq を入力してファイルを保存します。
STEP 8: 以下を入力して Cloud Function をデプロイします。
export PUBSUB_TOPIC="enter_topic-name>"
export REGION="enter_region" # https://cloud.google.com/functions/docs/locations
gcloud functions deploy iotcore_pubsub_to_influxdb --runtime python37 --trigger-topic $PUBSUB_TOPIC --region $REGION
Grafana のセットアップに戻る
STEP 1: Grafana を開き、
Dashboards > Manage
に移動します。STEP 2: New Dashboard をクリックし、Add new panel をクリックします。
STEP 3: Visualization に移動し、Graph をクリックします。
STEP 4: Query の FROM タブで select measurement をクリックし、ドロップダウンメニューから temperature を選択します。
STEP 5: + Query をクリックし、step 12 と同じ手順を humidity に対して繰り返します。
STEP 6: 他の設定をお好みに応じて変更します。
STEP 7: Apply をクリックします。
STEP 8: Add panel をクリックし、Add new panel をクリックします。
STEP 9: Visualization に移動し、Gauge をクリックします。
STEP 10: Query の FROM タブで select measurement をクリックし、ドロップダウンメニューから temperature を選択します。
STEP 11: Field タブで、Unit の下にあるドロップダウンメニューから
Temperature > Celcius
を選択します。STEP 12: ゲージの最小値と最大値を Min と Max に入力します。
STEP 13: Display name に
Temperature
と入力します。STEP 14: humidity に対して step 15 以降を繰り返します。
STEP 15: Apply をクリックします。
これで Grafana に作成したダッシュボードが表示されます。
技術サポートと製品ディスカッション
弊社製品をお選びいただきありがとうございます!製品をご利用いただく際に、できる限りスムーズな体験を提供するため、さまざまなサポートをご用意しております。お客様の好みやニーズに応じた複数のコミュニケーションチャネルをご利用いただけます。