Skip to main content

Wio Terminal を Google Cloud IoT Core に接続する

note

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

Wio Terminal を Google Cloud IoT Core に接続する

はじめに

このチュートリアルでは、Wio Terminal を Google Cloud IoT Core に接続し、Wio Terminal から Google Cloud IoT Core にテレメトリデータを送信するプロセスを説明します。このチュートリアルは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 Console のセットアップ

まず、Google Cloud Console にアクセスし、Cloud IoT Core デバイスレジストリを作成してデバイスを登録します。

初期セットアップ

  • STEP 1: こちらにアクセスして新しいプロジェクトを作成します。

注意: ログインを求められた場合は、Google アカウントにログインしてください。

  • STEP 2: プロジェクトを選択メニューをクリックします。

  • STEP 3: 新しいプロジェクトをクリックし、プロジェクト名を入力します。

  • STEP 4: 作成をクリックします。

  • STEP 5: Cloud プロジェクトの課金を有効にします。これは、ロボットではないことを確認するために必要であり、課金されることはありません。ナビゲーションメニューで「課金」を選択し、セットアップを進めてください。

pir

  • STEP 6: こちらにアクセスして、Cloud IoT Core と Cloud Pub/Sub API を有効にします。

注意: ドロップダウンメニューから、先ほど作成したプロジェクトを選択してください。

デバイスレジストリを作成する

  • STEP 1: Cloud Console の 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 Console の検索バーに Pub と入力し、結果から Pub/Sub を選択します。

pir

  • STEP 2: ナビゲーションメニューで サブスクリプション をクリックします。

  • STEP 3: サブスクリプションを作成をクリックします。

  • STEP 4: 任意の サブスクリプション ID を入力します。

  • STEP 5: 以前作成した Pub/Sub topicSelect a Cloud Pub/Sub topic ドロップダウンメニューから選択します。

  • STEP 6: 配信タイプとして Pull を選択します。

  • STEP 7: Create をクリックします。

これで Google Cloud IoT Core の設定が完了しました。次に、Wio Terminal と Arduino IDE の設定に進みます。

Arduino と Wio Terminal のセットアップ

必要なライブラリ

このチュートリアルでは以下の2つのライブラリが必要です。

  1. lwMQTT MQTT Arduino ライブラリ
  2. Google Cloud IoT Arduino ライブラリ

これらのライブラリをダウンロードする手順:

  • STEP 1: Arduino IDE を開きます。
  • STEP 2: Sketch > Include Library > Manage Libraries に移動します。
  • STEP 3: 検索ボックスに lwMQTTGoogle Cloud IoT を入力し、ライブラリをインストールします。

認証情報とアカウント情報の設定

次に、Wi-Fi の認証情報と Google Cloud IoT Core の情報を ciotc_config.h ファイルに設定します。

  • 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() {

// モジュールは1970年1月1日以降の秒数として 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; // 失敗を示すゼロを返す
}
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 にアップロードする必要があります。シリアルモニターを開くと、以下の内容が表示されます。

pir

テレメトリデータの表示

次に、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 をクリックすると、以下のように受信したテレメトリデータが表示されます。

pir

他のセンサーを追加する方法

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 にアップロードした後、新しく作成したトピックからサブスクライバーとしてプルすると、以下の結果が表示されます。

pir

他のセンサーを追加してダッシュボードでデータを可視化する方法

Google Cloud IoT Core はセンサーからのデータを可視化するための既製のダッシュボードを提供していませんが、InfluxDB と Grafana を使用してこれを実現する方法を説明します。

InfluxDB は時系列データベースであり、InfluxDB の各データは特定のタイムスタンプに関連付けられています。これにより、特定のデータに関連する日付と時刻が表示されます。一方、Grafana はオープンソースのソリューションであり、大量のデータを分析し、アプリケーションを監視するためのカスタマイズ可能なダッシュボードを提供します。

基本的には、温度/湿度センサーを Wio Terminal に接続し、Google Cloud Function を使用して Pub/Sub から GKE (Google Kubernetes Engine) クラスター内の InfluxDB にデータを送信し、Grafana のインタラクティブなダッシュボードを使用して InfluxDB からデータを表示します。

Arduino のハードウェア設定

Grove - 温度と湿度センサー (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 ループ に以下を追加します
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を開始してください。

pir

  • 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にデータを送信し、Grafanaでインタラクティブなダッシュボードを使用してInfluxDBのデータを表示する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: QueryFROMタブでselect measurementをクリックし、ドロップダウンメニューからtemperatureを選択してください。

  • STEP 5: + Queryをクリックし、humidityについてもstep 12と同じ手順を繰り返してください。

  • STEP 6: 他の設定をお好みに応じて変更してください。

  • STEP 7: Applyをクリックしてください。

  • STEP 8: Add panelをクリックし、Add new panelをクリックしてください。

  • STEP 9: Visualizationに移動し、Gaugeをクリックしてください。

  • STEP 10: QueryFROMタブでselect measurementをクリックし、ドロップダウンメニューからtemperatureを選択してください。

  • STEP 11: FieldタブのUnitで、ドロップダウンメニューからTemperature > Celciusを選択してください。

  • STEP 12: ゲージの最小値と最大値をMinMaxに入力してください。

  • STEP 13: Display nameTemperatureと入力してください。

  • STEP 14: humidityについてもstep 15から同じ手順を繰り返してください。

  • STEP 15: Applyをクリックしてください。

これでGrafanaにダッシュボードが作成されます。

pir

技術サポートと製品ディスカッション

技術的な問題がある場合は、フォーラムに問題を投稿してください。
弊社製品をお選びいただきありがとうございます!製品の使用体験がスムーズになるよう、さまざまなサポートを提供しております。お客様の好みやニーズに応じた複数のコミュニケーションチャネルをご用意しています。

Loading Comments...