You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Firebase推送数据同步到Arduino并适配动态新增设备

解决方案

你需要把硬编码读取固定设备ID的逻辑,改为遍历JSON根节点的所有键值对即可适配动态新增的设备场景,修改后的代码如下:

// String input;

// 若后续设备数量增加,可适当调大文档容量,或改用DynamicJsonDocument
StaticJsonDocument<1024> doc;

DeserializationError error = deserializeJson(doc, input);

if (error) {
  Serial.print(F("deserializeJson() failed: "));
  Serial.println(error.f_str());
  return;
}

// 遍历所有设备节点
for (JsonPair deviceItem : doc.as<JsonObject>()) {
  // 获取设备唯一ID(即Firebase自动生成的push ID)
  const char* deviceId = deviceItem.key().c_str();
  // 获取当前设备的详情对象
  JsonObject deviceInfo = deviceItem.value().as<JsonObject>();
  
  // 读取设备属性
  const char* devicePlace = deviceInfo["Place"];
  const char* deviceState = deviceInfo["State"];
  const char* deviceTitle = deviceInfo["Title"];
  
  // 此处替换为你自己的业务逻辑,例如存储到本地数组、打印日志、控制硬件等
  Serial.printf("设备ID:%s\r\n", deviceId);
  Serial.printf("设备名称:%s\r\n", deviceTitle);
  Serial.printf("安装位置:%s\r\n", devicePlace);
  Serial.printf("运行状态:%s\r\n", deviceState);
  Serial.println("------------------------");
}

补充说明

  • 上述代码不需要提前知道任何设备的ID,Firebase新增设备后返回的JSON里的新节点会自动被遍历到
  • 如果你的设备最大数量超过10台,建议把StaticJsonDocument的容量从1024调大到合适值,或者直接使用DynamicJsonDocument自动分配内存
  • 如果你需要本地持久化存储所有设备数据,可以自定义结构体存储遍历得到的属性,示例参考:
// 定义设备结构体
typedef struct {
  char id[32];
  char title[32];
  char place[32];
  char state[8];
} DeviceInfo;

// 最多存储20台设备,可根据需求调整
DeviceInfo deviceList[20];
uint8_t deviceTotal = 0;

遍历的时候把数据存入deviceList数组即可随时调用。

内容的提问来源于stack exchange,提问作者Sajith Madhubashana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:15:04