是的,Arduino可以订阅Firebase Cloud消息通知。下面是基于Arduino ESP8266的示例代码:
#include
#include
#define FIREBASE_HOST "your_project_id.firebaseio.com"
#define FIREBASE_AUTH "your_firebase_auth_token"
#define WIFI_SSID "your_wifi_ssid"
#define WIFI_PASSWORD "your_wifi_password"
#define LED_PIN 2
FirebaseData firebaseData;
FirebaseAuth firebaseAuth;
FirebaseConfig firebaseConfig;
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.reconnectWiFi(true);
Firebase.setReadTimeout(firebaseData, 1000);
Firebase.setwriteSizeLimit(firebaseData, "tiny"); // Optional
Firebase.stream(firebaseData, "/notifications");
}
void loop() {
if (Firebase.streamTimeoutAvailable(firebaseData)) {
if (Firebase.failed(firebaseData)) {
Serial.print("streaming error: ");
Serial.println(firebaseData.errorReason());
return;
}
if (firebaseData.streamTimeout()) {
Serial.println("stream timeout, resume streaming...");
Firebase.streamResume(firebaseData);
}
if (firebaseData.dataAvailable()) {
FirebaseJson json;
FirebaseJsonArray jsonArr;
json.setJsonData(firebaseData.payload());
if (!json.getArray(jsonArr, "data")) {
Serial.println("data not found");
return;
}
for (size_t i = 0; i < jsonArr.size(); i++) {
FirebaseJsonData jsonData;
jsonArr.get(jsonData, i);
if (jsonData.typeNum == FirebaseJson::JSON_BOOL) {
bool value = jsonData.boolValue;
if (value) {
digitalWrite(LED_PIN, HIGH);
Serial.println("LED ON");
} else {
digitalWrite(LED_PIN, LOW);
Serial.println("LED OFF");
}
}
}
}
}
}
在代码中,你需要替换以下值:
FIREBASE_HOST
:替换为你的Firebase项目ID,例如your_project_id.firebaseio.com
。FIREBASE_AUTH
:替换为你的Firebase身份验证令牌。WIFI_SSID
:替换为你的Wi-Fi网络的名称。WIFI_PASSWORD
:替换为你的Wi-Fi网络的密码。LED_PIN
:替换为你连接LED的引脚。这段代码会连接到Wi-Fi网络并开始订阅Firebase Cloud的/notifications
路径下的消息。当收到新消息时,代码会解析消息中的数据,并根据其中的布尔值来控制LED的状态。