首页 > 解决方案 > 为什么我不能直接从我的 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

非常感谢所有帮助我的人!

标签: firebase-realtime-databasearduino

解决方案


推荐阅读