# #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 перед переходом в базу данных в реальном времени? Извините, если вы снова запутаетесь, я не привык использовать правильные термины с точки зрения программирования.