АРДУИНО: Как отправить данные GPS в Firebase? - PullRequest
0 голосов
/ 01 марта 2019

У меня есть модуль UBLOX Neo 6M для определения широты и долготы устройства.Я планирую отправить эти данные в Firebase.По моим исследованиям, для передачи данных в Firebase требуется модуль Wifi.Я планировал использовать SIM-карту, которая может предоставлять интернет-данные.

#include <FirebaseArduino.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>

#define FIREBASE_HOST "FIREBASE URL"
#define FIREBASE_AUTH "DB SECRET"

//SIM
#define APN "internet"

void setup() {
  Serial.begin(9600);
  ss.begin(GPSBaud); 

  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}

int n = 0;

void loop(){
  // This sketch displays information every time a new sentence is correctly encoded.
  while (ss.available() > 0){
    gps.encode(ss.read());
    if (gps.location.isUpdated()){
      Serial.print("Latitude= "); 
      Serial.print(gps.location.lat(), 6);
      Serial.print(" Longitude= "); 
      Serial.println(gps.location.lng(), 6);
    }
  }
}
  delay(1000);

  // set bool value
  Firebase.setBool("truth", false);
  // handle error
  if (Firebase.failed()) {
      Serial.print("setting /truth failed:");
      Serial.println(Firebase.error());  
      return;
  }
  delay(1000);

  // append a new value to /logs
  String name = Firebase.push("location", gps);
  // handle error
  if (Firebase.failed()) {
      Serial.print("pushing /location failed:");
      Serial.println(Firebase.error());  
      return;
  }
  Serial.print("pushed: /location/");
  Serial.println(name);
  delay(1000);
}

-

Я уверен, что этот блок кода не приведет меня к работающей системе.Но что я хочу знать, может ли эта последовательность привести меня куда-нибудь.Пожалуйста, напишите идеи о том, что мне не хватает, и я должен искать.Спасибо.

1 Ответ

0 голосов
/ 02 марта 2019

Я не уверен в том, как работает Firebase, но вам нужно сначала получить действительное местоположение, а затем передать его в Firebase, что-то вроде этого:

#include <FirebaseArduino.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>

#define FIREBASE_HOST "FIREBASE URL"
#define FIREBASE_AUTH "DB SECRET"

//SIM
#define APN "internet"

float lat, lng;

// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);

void setup()
{
    Serial.begin(9600);
    ss.begin(GPSBaud);

    Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
    unsigned long last_millis = millis();
}

void feed_gps()
{
    unsigned long last_millis = millis();
    if (ss.available() > 0)
    {
        //feed gps for 1 seconds
        while (millis() - last_millis < 1000)
        {
            gps.encode(ss.read());
            if (gps.location.isValid())
            {
                lat = gps.location.lat();
                lng = gps.location.lng();
                Serial.print("Latitude= ");
                Serial.print(lat, 6);
                Serial.print(" Longitude= ");
                Serial.println(lng, 6);
            }
            else
            {
                Serial.print("GPS still unavailable, Chars processed: ");
                Serial.println(gps.charsProcessed());
            }
        }
    }
}

void loop()
{
    feed_gps();
    // set bool value
    Firebase.setBool("truth", false);
    // handle error
    if (Firebase.failed())
    {
        Serial.print("setting /truth failed:");
        Serial.println(Firebase.error());
        return;
    }

    char location_str[25] = {0};
    // store string of lat,lng
    sprintf(location_str, "%f, %f", lat, lng);

    String name = Firebase.push("location", location_str);
    // handle error
    if (Firebase.failed())
    {
        Serial.print("pushing /location failed:");
        Serial.println(Firebase.error());
        return;
    }
    Serial.print("pushed: /location/");
    Serial.println(name);
}
...