Hardeep
Hardeep

Reputation: 1

Arduino HTTP Client not connecting to Firebase

I am trying to post GPS data to firebase using the Arduino Uno R3, SIM800L and NEO6M via GPRS. I have managed to connect to the APN, but I can't get the "http_client.connect()" to work. It keeps giving the same error.

Code

#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 3 
#define ARDUINO_GPS_TX 2
TinyGPSPlus tinyGPS;
SoftwareSerial ss(ARDUINO_GPS_TX , ARDUINO_GPS_RX);
#define gpsPort ss

#define rxPin 9
#define txPin 8
SoftwareSerial sim800(txPin,rxPin);

const char FIREBASE_HOST[]  = "realtimedatabase.firebaseio.com";
const String FIREBASE_AUTH  = "";
const String FIREBASE_PATH  = "/gps-data/coordinate/employee_03";
const int SSL_PORT          = 443;

char apn[]  = "";
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"));
    if (modem.isGprsConnected()) { Serial.println("GPRS connected"); }

  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
    {
    //ss.listen();
      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()
{
  // ss.listen();
  boolean newData = false;
  for (unsigned long start = millis(); millis() - start < 2000;){
    //ss.listen();
    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);
  
  }
}

Error

gps serial initialize
SIM800A serial initialize
Initializing modem...
Modem: SIM800 R14.18
Connecting to apn OK
GPRS connected

HTTP not connected
Connecting to apn OK
GPRS connected

I have tried using ESP8266 (Wemos D1 R1) to save my GPS data to the database via WiFi, and that worked. Now, the problem is I can't connect to the firebase database using my Arduino and SIM800L. What should I do?

Upvotes: 0

Views: 701

Answers (0)

Related Questions