ESP32にFirebaseからの信号が届いているか確認する

今回は、FirebaseからESP32にちゃんと信号が届いているかを確認するコードの紹介です。

このコードはFirebaseを使って遠隔地にある水道栓を開閉させるために作ったArduinoコードです。

まずは全体コード

#include <WiFi.h>
#include <FirebaseESP32.h>

const char* ssid = "******";
const char* password = "******";
#define VALVE1_PIN 14

FirebaseData firebaseData;
FirebaseConfig config;
FirebaseAuth auth;

bool isOn = false;

void setup() {
  Serial.begin(115200);
  pinMode(VALVE1_PIN, OUTPUT);

  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  config.host = "△△△△△.firebasedatabase.app";
  config.api_key = "******";
  auth.user.email = "abcde@lunchtown.jp"; // Firebase Authentication で登録したユーザーのメールアドレス
  auth.user.password = "12345";

  Serial.println("\nConnected to WiFi");
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());

  Firebase.begin(&config, &auth);
  Firebase.reconnectWiFi(true);

  if (!Firebase.beginStream(firebaseData, "/devices/△△△△△/*****/valves/valve1")) {
    Serial.printf("Firebase begin stream failed: %s\n", firebaseData.errorReason().c_str());
  } else {
    Serial.println("Firebase stream started successfully");
  }
}

void loop() {
  if (!Firebase.readStream(firebaseData)) {
    Serial.printf("Stream read failed: %s\n", firebaseData.errorReason().c_str());
  }

  if (firebaseData.streamTimeout()) {
    Serial.println("Stream timeout, reconnecting...");
    if (!Firebase.beginStream(firebaseData, "/devices/******/△△△△△/valves/valve1")) {
      Serial.printf("Firebase begin stream failed: %s\n", firebaseData.errorReason().c_str());
    } else {
      Serial.println("Firebase stream restarted successfully");
    }
  }

  if (firebaseData.streamAvailable()) {
    Serial.println("Stream data available");

    if (firebaseData.dataType() == "json") {
      FirebaseJson &json = firebaseData.jsonObject();
      FirebaseJsonData jsonData;
      if (json.get(jsonData, "isOn")) {
        if (jsonData.type == "boolean") {
          isOn = jsonData.boolValue;
          Serial.printf("Valve 1 state changed. %s\n", isOn ? "ON" : "OFF");
          digitalWrite(VALVE1_PIN, isOn ? HIGH : LOW);
        } else {
          Serial.println("isOn is not a boolean value");
        }
      } else {
        Serial.println("Failed to get isOn value");
      }
      }
  }
}