Arduino-尝试使用Arduino Uno和GSM从GPS获得经度和纬度,并将数据发送到Firebase Cloud,但获得0.0000

发布于 2025-02-05 14:33:42 字数 4029 浏览 4 评论 0原文

我正在使用Arduino Uno R3,GSM SIM 800和GPS来获得纬度和经度,并发送到Firebase Cloud,但最终我只能在该位置获得0.0000,这是在尝试使用TinyGPS ++代码,而GPS则可以使用。有人可以帮助我看看错误的地方,我真的尝试了许多解决方案,但仍然无法工作

***解决了上述问题 但是现在,问题是关于HTTP与Firebase连接的。 HTTP连接问题的状态显示-2。

#define TINY_GSM_MODEM_SIM800    
#define TINY_GSM_RX_BUFFER 256
 
#include <TinyGsmClient.h>     
#include <ArduinoHttpClient.h>      
#include <TinyGPS++.h>    
#include <SoftwareSerial.h>

#define SerialMonitor Serial

#define ARDUINO_GPS_RX 11     
#define ARDUINO_GPS_TX 10    
TinyGPSPlus tinyGPS;    
SoftwareSerial ss(ARDUINO_GPS_TX , ARDUINO_GPS_RX);    
#define gpsPort ss
  
#define rxPin 3    
#define txPin 2    
SoftwareSerial sim800(txPin,rxPin);    
 
const char FIREBASE_HOST[]  = "my_firebase_host";    
const String FIREBASE_AUTH  = "my_firebase_auth";    
const String FIREBASE_PATH  = "/";    
const int SSL_PORT          = 443;    

char apn[]  = "internet";
char user[] = "";
char pass[] = "";
 
TinyGsm modem(sim800);    

TinyGsmClientSecure gsm_client_secure_modem(modem, 0);    
HttpClient http_client = HttpClient(gsm_client_secure_modem, FIREBASE_HOST, SSL_PORT);    
 
unsigned long previousMillis = 0;    
  
void setup()    
{    
  Serial.begin(9600);    
  gpsPort.begin(9600);    
  Serial.println(F("gps serial initialize"));    
 
  sim800.begin(9600);    
  Serial.println(F("SIM800A serial initialize"));    
 
  Serial.println(F("Initializing modem..."));    
  modem.init();    
  String modemInfo = modem.getModemInfo();   
  Serial.print(F("Modem: "));   
  Serial.println(modemInfo);    
 
  http_client.setHttpResponseTimeout(10 * 1000);     
}    
 
void loop()    
{
 
  Serial.print(F("Connecting to "));    
  Serial.print(apn);    
  if (!modem.gprsConnect(apn, user, pass))    
  {    
    Serial.println(F(" fail"));    
    //delay(1000);    
    return;    
  }    
  Serial.println(F(" OK"));    
 
  http_client.connect(FIREBASE_HOST, SSL_PORT);    
 
  while (true) {    
    if (!http_client.connected())    
    {    
      Serial.println();   
      http_client.stop();// Shutdown    
      Serial.println(F("HTTP  not connected"));    
      break;    
    }    
    else    
    {   
      gps_loop();    
    }   
  }   
}   

void PostToFirebase(const char* method, const String & path , const String & data, HttpClient* http)   
{
  String response;   
  int statusCode = 0;    
  http->connectionKeepAlive();    
  String url;   
  if (path[0] != '/')   
  {   
    url = "/";   
  }   
  url += path + ".json";   
  url += "?auth=" + FIREBASE_AUTH;    
  Serial.print("POST:");   
  Serial.println(url);    
  Serial.print("Data:");    
  Serial.println(data);   
 
  String contentType = "application/json";    
  http->put(url, contentType, data);    
  
  statusCode = http->responseStatusCode();    
  Serial.print(F("Status code: "));    
  Serial.println(statusCode);    
  response = http->responseBody();   
  Serial.print(F("Response: "));   
  Serial.println(response);    
  
  if (!http->connected())   
  {   
    Serial.println();   
    http->stop();// Shutdown   
    Serial.println(F("HTTP POST disconnected"));    
  }   
 
}

 void gps_loop()   
{
  boolean newData = false;   
  for (unsigned long start = millis(); millis() - start < 2000;){   
    while (ss.available()){   
      if (tinyGPS.encode(ss.read())){   
        newData = true;   
        break;  
      }  
    }  
  }    
  
  if(true){   
  newData = false;    
  
  String latitude, longitude;   
  
  latitude = String(tinyGPS.location.lat(), 6);    
  longitude = String(tinyGPS.location.lng(), 6);    
     
  
  Serial.print("Latitude= ");    
  Serial.print(latitude);   
  Serial.print(" Longitude= ");     
  Serial.println(longitude);   
      
  String gpsData = "{";   
  gpsData += "\"lat\":" + latitude + ",";   
  gpsData += "\"lng\":" + longitude + "";   
  gpsData += "}";   
  
  PostToFirebase("PATCH", FIREBASE_PATH, gpsData, &http_client);   
    
  }
 
}

I am using Arduino Uno R3, GSM SIM 800 and GPS to get the latitude and longitude and send to the Firebase cloud, but end up I only can get 0.0000 for the location, was trying for TinyGPS++ code before and the GPS is working. Can someone helps me to see where is the error, I really tried for many solutions but still can't work

*** solved for the above problems
But now comes with the problem is about the http connect with the firebase. The status showing -2 for the http connection problem.

#define TINY_GSM_MODEM_SIM800    
#define TINY_GSM_RX_BUFFER 256
 
#include <TinyGsmClient.h>     
#include <ArduinoHttpClient.h>      
#include <TinyGPS++.h>    
#include <SoftwareSerial.h>

#define SerialMonitor Serial

#define ARDUINO_GPS_RX 11     
#define ARDUINO_GPS_TX 10    
TinyGPSPlus tinyGPS;    
SoftwareSerial ss(ARDUINO_GPS_TX , ARDUINO_GPS_RX);    
#define gpsPort ss
  
#define rxPin 3    
#define txPin 2    
SoftwareSerial sim800(txPin,rxPin);    
 
const char FIREBASE_HOST[]  = "my_firebase_host";    
const String FIREBASE_AUTH  = "my_firebase_auth";    
const String FIREBASE_PATH  = "/";    
const int SSL_PORT          = 443;    

char apn[]  = "internet";
char user[] = "";
char pass[] = "";
 
TinyGsm modem(sim800);    

TinyGsmClientSecure gsm_client_secure_modem(modem, 0);    
HttpClient http_client = HttpClient(gsm_client_secure_modem, FIREBASE_HOST, SSL_PORT);    
 
unsigned long previousMillis = 0;    
  
void setup()    
{    
  Serial.begin(9600);    
  gpsPort.begin(9600);    
  Serial.println(F("gps serial initialize"));    
 
  sim800.begin(9600);    
  Serial.println(F("SIM800A serial initialize"));    
 
  Serial.println(F("Initializing modem..."));    
  modem.init();    
  String modemInfo = modem.getModemInfo();   
  Serial.print(F("Modem: "));   
  Serial.println(modemInfo);    
 
  http_client.setHttpResponseTimeout(10 * 1000);     
}    
 
void loop()    
{
 
  Serial.print(F("Connecting to "));    
  Serial.print(apn);    
  if (!modem.gprsConnect(apn, user, pass))    
  {    
    Serial.println(F(" fail"));    
    //delay(1000);    
    return;    
  }    
  Serial.println(F(" OK"));    
 
  http_client.connect(FIREBASE_HOST, SSL_PORT);    
 
  while (true) {    
    if (!http_client.connected())    
    {    
      Serial.println();   
      http_client.stop();// Shutdown    
      Serial.println(F("HTTP  not connected"));    
      break;    
    }    
    else    
    {   
      gps_loop();    
    }   
  }   
}   

void PostToFirebase(const char* method, const String & path , const String & data, HttpClient* http)   
{
  String response;   
  int statusCode = 0;    
  http->connectionKeepAlive();    
  String url;   
  if (path[0] != '/')   
  {   
    url = "/";   
  }   
  url += path + ".json";   
  url += "?auth=" + FIREBASE_AUTH;    
  Serial.print("POST:");   
  Serial.println(url);    
  Serial.print("Data:");    
  Serial.println(data);   
 
  String contentType = "application/json";    
  http->put(url, contentType, data);    
  
  statusCode = http->responseStatusCode();    
  Serial.print(F("Status code: "));    
  Serial.println(statusCode);    
  response = http->responseBody();   
  Serial.print(F("Response: "));   
  Serial.println(response);    
  
  if (!http->connected())   
  {   
    Serial.println();   
    http->stop();// Shutdown   
    Serial.println(F("HTTP POST disconnected"));    
  }   
 
}

 void gps_loop()   
{
  boolean newData = false;   
  for (unsigned long start = millis(); millis() - start < 2000;){   
    while (ss.available()){   
      if (tinyGPS.encode(ss.read())){   
        newData = true;   
        break;  
      }  
    }  
  }    
  
  if(true){   
  newData = false;    
  
  String latitude, longitude;   
  
  latitude = String(tinyGPS.location.lat(), 6);    
  longitude = String(tinyGPS.location.lng(), 6);    
     
  
  Serial.print("Latitude= ");    
  Serial.print(latitude);   
  Serial.print(" Longitude= ");     
  Serial.println(longitude);   
      
  String gpsData = "{";   
  gpsData += "\"lat\":" + latitude + ",";   
  gpsData += "\"lng\":" + longitude + "";   
  gpsData += "}";   
  
  PostToFirebase("PATCH", FIREBASE_PATH, gpsData, &http_client);   
    
  }
 
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文