今回は、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");
}
}
}
}
コメントを残す