Почему я не могу просто подключиться напрямую к базе данных Firebase в реальном времени с моего Arduino?

# #firebase-realtime-database #arduino

Вопрос:

Поэтому сегодня я хотел бы попросить помощи в объяснении того, как работает этот код, и, возможно, дать подсказку

Приведенный ниже код не мой, и я только что получил его отсюда. Библиотеки-это GSM-GPRS-GPS-щит от Марко Мартинеса и 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("------------------------------------------------- rn"));
Serial.println(F("Starting App Arduino"));
Serial.print(F("------------------------------------------------- rn"));

// 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("rnrn"));
  Serial.print(F("------------------------------------------------- rn"));
  Serial.print(F(" GET GEOLOCATION amp; SEND TO API rn"));
  Serial.print(F("------------------------------------------------- rn"));
  // get geolocation
  String geo;
  geo.concat("lat="   String(gps.location.lat(), 6));
  geo.concat("amp;lng="   String(gps.location.lng(), 6));
  geo.concat("amp;spd="   String(gps.speed.kmph()));
  geo.concat("amp;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) amp;v - (__brkval == 0 ? (int) amp;__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: ATamp;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 amp; SEND TO API 
------------------------------------------------- 

    http://10.190.86.139/geolocationslat=0.000000amp;lng=0.000000amp;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
 

Огромное спасибо всем, кто мог бы мне помочь!

Комментарии:

1. Вопрос не очень ясен. Полученный вами код предназначен для использования SIM900 и NEO-6M. Вы хотите сказать, что на самом деле не используете эти устройства? Что вы подразумеваете под «прямой» связью с базой огня? Вам нужно сетевое подключение.

2. я прошу прощения за то, что не был ясен в своем вопросе. я не являюсь носителем английского языка. на самом деле у меня были модули(arduino uno, sim900 и GPS-модуль ne06m.) под рукой. я просто хочу знать, почему он не подключается к базе данных firebase в реальном времени и есть ли у них какие-либо обходные пути для отправки данных о местоположении в firebase?

3. Может быть множество причин, по которым это не работает. Код, который вы показываете, использует GSM-модуль для настройки сети. Возможно, ваш nit подключен правильно. Вы можете сначала это проверить? Возможно, они подключаются к известному серверу. Для firebase я рекомендую проверить учебник по firebase, чтобы настроить его для ваших собственных нужд. Если вы скопировали этот код, он будет адаптирован для чужой настройки.

4. Насколько я понимаю код, мне нужно было только изменить APN, URL и ПОРТ. Я что-то читал, что Firebase принимает сообщения только по протоколу HTTPS. И я думаю, что библиотека или сам GSM-модуль поддерживают только HTTP. Возможно ли, чтобы модуль отправлял данные через облачные функции Firebase и выполнял какое-то преобразование HTTP в HTTPS перед переходом в базу данных в реальном времени? Извините, если вы снова запутаетесь, я не привык использовать правильные термины с точки зрения программирования.