firebase-realtime-database - 为什么我不能直接从我的 Arduino 连接到 Firebase 实时数据库?
问题描述
所以今天,我想请求帮助解释这段代码是如何工作的,也许还有一个提示
下面的代码不是我的,我只是从这里得到的。这些库是 Marco Martines 的 GSM-GPRS-GPS-Shield 和同时提供的 TinyGPSPlus。
我可以在代码中理解一点。我只是想知道为什么我不能直接连接到 Firebase 实时数据库以及我能做些什么变通方法?
代码:
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
#include <inetGSM.h>
InetGSM inet;
TinyGPSPlus gps;
SoftwareSerial serialGps(11, 10);
void setup() {
// Serial connection.
Serial.begin(19200);
Serial.print(F("------------------------------------------------- \r\n"));
Serial.println(F("Starting App Arduino"));
Serial.print(F("------------------------------------------------- \r\n"));
// Start configuration of shield GPS NEO-6M with baudrate.
serialGps.begin(9600);
// Turn on GPRS
powerUpGprs();
// Start configuration of shield SIM900 with baudrate and connect to internet.
if (gsm.begin(9600))
Serial.println(F("\nstatus=READY"));
else Serial.println(F("\nstatus=IDLE"));
// Mensure and show memory usage
Serial.println(F("\nMemory usage"));
Serial.print(freeRam());
void loop() {
serialGps.listen();
while (serialGps.available() > 0) {
if (gps.encode(serialGps.read())) {
// Get GPS position and send To API through inet.httpPOST()
gsm.listen();
// GPRS attach, put in order APN, username and password.
if (inet.attachGPRS("internet", "", ""))
Serial.println("status=ATTACHED");
else Serial.println("status=ERROR");
gsm.SimpleWriteln("AT+CIFSR");
Serial.print(F("\r\n\r\n"));
Serial.print(F("------------------------------------------------- \r\n"));
Serial.print(F(" GET GEOLOCATION & SEND TO API \r\n"));
Serial.print(F("------------------------------------------------- \r\n"));
// get geolocation
String geo;
geo.concat("lat=" + String(gps.location.lat(), 6));
geo.concat("&lng=" + String(gps.location.lng(), 6));
geo.concat("&spd=" + String(gps.speed.kmph()));
geo.concat("&uid=gb1");
// send2Api
Serial.print(F("\nhttp://192.168.1.1/"));
Serial.println(geo.c_str());
Serial.print(F("\n"));
gsm.SimpleWriteln("AT+CIFSR");
inet.httpPOST("https://testdb-ec830-default-rtdb.asia-southeast1.firebasedatabase.app/", 443,
"/geolocations", geo.c_str(), "", 100); // set url and port
}
}
}
int freeRam() {
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
void powerUpGprs() {
pinMode(9, OUTPUT);
delay(100);
digitalWrite(9, HIGH);
Serial.println(F("\nPower Up SIM900!"));
}
输出:
-------------------------------------------------
Starting App Arduino
-------------------------------------------------
Power Up SIM900!
ATT: OK
RIC: AT
OK
DB:ELSE
ATT: OK
RIC: AT
OK
DB:ELSE
ATT: OK
RIC: AT
OK
DB:ELSE
ATT: OK
RIC: AT
OK
DB:CORRECT BR
ATT: OK
RIC: AT
OK
ATT: OK
RIC: AT&F
OK
ATT: OK
RIC: ATE0
OK
ATT: OK
RIC:
OK
ATT: OK
RIC:
OK
ATT: OK
RIC:
OK
ATT: OK
RIC:
OK
ATT: +CPMS:
RIC:
+CPMS: 0,35,0,35,0,35
OK
ATT: OK
RIC:
OK
ATT: SHUT OK
RIC:
SHUT OK
status=READY
Memory usage
256ATT: ERROR
RIC:
ERROR
DB:STARTING NEW CONNECTION
ATT: SHUT OK
RIC:
SHUT OK
DB:SHUTTED OK
ATT: OK
RIC:
OK
DB:APN OK
ATT: OK
RIC:
OK
DB:CONNECTION OK
ATT: ERROR
RIC:
10.186.213.49
DB:ASSIGNED AN IP
status=ATTACHED
-------------------------------------------------
GET GEOLOCATION & SEND TO API
-------------------------------------------------
http://10.190.86.139/geolocationslat=0.000000&lng=0.000000&uid=gb1
ATT: OK
RIC:
10.186.213.49
DB:NOT CONN
ATT: OK
RIC:
ERROR
DB:NOT CONN
ATT: OK
RIC:
ERROR
DB:NOT CONN
ATT: ERROR
RIC:
10.186.213.49
DB:ALREADY HAVE AN IP
ATT: ERROR
RIC:
ERROR
ATT: ERROR
RIC:
ERROR
status=ATTACHED
非常感谢所有帮助我的人!
解决方案
推荐阅读
- vue.js - this.$auth.loggedIn 返回 false
- latex - 如何在 tikzposter 上更改 LaTeX 块中的书面部分颜色?
- node.js - 枚举数组文本不使用 $text 搜索
- slurm - slurmctld.service:无法打开PID文件没有这样的文件或目录
- javascript - 在反应中创建后控制父级内可拖动组件的边界?
- python - 在 Django 中渲染数据透视表
- ruby-on-rails - 缺少参数或值为空但 param.require(:event).permit 已定义
- javascript - Vue - 如何在渲染时访问 $refs?
- java - 无法为 Gmail API 运行 gradle build
- angular - 如何检查下一条路线上是否存在警卫