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

如何用AT指令实现GSM模块向ESP32传数据及连接Firebase?

使用AT指令通过GSM模块向Firebase发送数据的解决方案

ThingSpeak支持通过简单的HTTP GET请求上传数据,但Firebase(Realtime Database/Firestore)的上传逻辑不同——它通常需要HTTP POST请求(携带JSON格式的请求体),且必须包含身份验证信息,这就是你直接用AT+HTTPGET无法成功的核心原因。以下是具体实现方案:

1. 确认GSM模块的HTTP指令支持

先确认你的GSM模块(如SIM800L、SIM900A)支持POST相关AT指令,比如AT+HTTPPARA、AT+HTTPDATA、AT+HTTPACTION=1(1代表POST方法),这些是实现POST请求的基础。

2. Firebase上传的核心配置

Firebase Realtime Database的上传接口格式为:
https://<你的项目ID>.firebaseio.com/<目标节点路径>.json?auth=<你的API密钥/身份令牌>
需要发送的请求体是合法JSON,比如{"field1":25.6,"field2":62}

3. ESP32中完整的AT指令流程示例

以下是适配SIM800L的代码,你可以根据自己的模块调整指令细节:

// Firebase配置参数
String firebaseProjectUrl = "https://your-project-id.firebaseio.com/sensor-data.json";
String firebaseAuthKey = "your-web-api-key";
String fullUrl = firebaseProjectUrl + "?auth=" + firebaseAuthKey;

// 构建JSON请求体
String jsonPayload = "{\"field1\":" + String(temperatura) + ",\"field2\":" + String(humitat) + "}";

// 1. 初始化HTTP连接
sendATCmd("AT+HTTPPARA=\"URL\",\"" + fullUrl + "\"", 1000);
// 2. 设置请求内容类型为JSON
sendATCmd("AT+HTTPPARA=\"CONTENT\",\"application/json\"", 1000);
// 3. 告知模块要发送的数据长度(超时时间10秒)
sendATCmd("AT+HTTPDATA=" + String(jsonPayload.length()) + ",10000", 1000);
// 4. 发送JSON数据(模块收到上一条指令后会输出'>',此时直接发payload)
Serial.println(jsonPayload);
delay(2000);
// 5. 执行POST请求
sendATCmd("AT+HTTPACTION=1", 5000);
// 6. 读取响应并关闭连接
sendATCmd("AT+HTTPREAD", 2000);
sendATCmd("AT+HTTPTERM", 1000);

// 辅助函数:发送AT指令并打印响应
void sendATCmd(String cmd, unsigned long timeout) {
  Serial.println(cmd);
  unsigned long startMs = millis();
  while (millis() - startMs < timeout) {
    if (Serial.available()) {
      Serial.println(Serial.readStringUntil('\n'));
    }
  }
}

4. 常见问题排查

  • 身份验证失败:确保auth参数使用的是Firebase项目的Web API密钥(在项目设置→通用→Web应用中获取),如果需要更高安全性,可生成ID令牌替代。
  • JSON格式错误:检查payload是否符合JSON规范,比如数值不需要加引号,字符串必须用双引号包裹。
  • GSM网络异常:先验证模块已注册网络(AT+CREG?返回+CREG: 0,1或0,5),并已附着GPRS(AT+CGATT?返回+CGATT: 1)。
  • 指令顺序错误:严格遵循初始化参数→设置内容类型→发送数据→执行POST的顺序,不同模块的指令细节可能有差异,务必参考模块官方手册。

5. 简易GET上传方案(仅作临时测试)

如果你的模块不支持POST请求,可临时用GET方式上传(不推荐生产环境,安全性低),需先开放Firebase数据库的写入权限:

String cmdString = "AT+HTTPGET=\"" + firebaseProjectUrl + "?auth=" + firebaseAuthKey + "&field1=" + String(temperatura) + "&field2=" + String(humitat) + "\"";

内容的提问来源于stack exchange,提问作者Carles Casademunt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:32:29