ESP Sim800l Firebase

esp8266 esp32 sim800

Итак, я пытаюсь отправить данные с плат ESP-32 и 8266 с помощью модуля sim800l в firebase. Но я получаю сообщение об ошибке HTTP не подключено. Я пытался искать в Интернете, но кажется, что firebase недавно что-то изменила, и способы, которые использовались ранее, не могут быть использованы. Так что кто недавно делал это, пожалуйста, помогите. PS Я значительно новичок в этом. Проект. Итак, чтобы дать вам представление, я пытаюсь создать систему GPS-слежения за транспортными средствами, которая сначала отправляет данные на базу данных с использованием Sim800l. Мой код -

#define TINY_GSM_MODEM_SIM800

#define TINY_GSM_RX_BUFFER 256

//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
#include <TinyGPS++.h> //https://github.com/mikalhart/TinyGPSPlus
#include <TinyGsmClient.h> //https://github.com/vshymanskyy/TinyGSM
#include <SoftwareSerial.h>
#include <ArduinoHttpClient.h> //https://github.com/arduino-libraries/ArduinoHttpClient
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
const char FIREBASE_HOST[]  = "vehicle-tracking-4a76d-default-rtdb.firebaseio.com";
const String FIREBASE_AUTH  = "6NGxNkNWf2inWa1LrdktCtq4************";
const String FIREBASE_PATH  = "/";
const int SSL_PORT          = 443;
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
// Ваши учетные данные GPRS
// Оставляем пустым, если отсутствует пользователь или пароль
char apn[]  = "airtelgprs.com";
char user[] = "";
char pass[] = "";
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//Контакт TX модуля GSM к NodeMCU D3
//Контакт RX GSM-модуля к NodeMCU D4
#define rxGSM 0 //D3
#define txGSM 4 //D4
SoftwareSerial sim800(rxGSM, txGSM);
TinyGsm modem(sim800);
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//Контакт TX модуля GPS к NodeMCU D1
//Контакт RX модуля GPS к NodeMCU D2
#define rxGPS 5 //D1
#define txGPS 4 //D2
SoftwareSerial neogps(rxGPS, txGPS);
TinyGPSPlus gps;
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
TinyGsmClientSecure client1(modem);
HttpClient http_client = HttpClient(client1, FIREBASE_HOST, SSL_PORT);
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

unsigned long previousMillis = 0;
long interval = 10000;

//*************************************************** *******************************************************
void setup() {
  Serial.begin(115200);
  Serial.println("NodeMCU serial initialize");

  sim800.begin(9600);
  Serial.println("SIM800L serial initialize");

  neogps.begin(9600);
  Serial.println("neogps serial initialize");
  delay(3000);

  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
  //Перезапуск занимает довольно много времени
  //Чтобы пропустить его, вызовите init() вместо restart()
  Serial.println("Initializing modem...");
  modem.restart();
  String modemInfo = modem.getModemInfo();
  Serial.print("Modem: ");
  Serial.println(modemInfo);
  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

  // Разблокируйте SIM-карту с помощью PIN-кода
  //modem.simUnlock("1234");

  http_client.setHttpResponseTimeout(90 * 1000); //^0 секунд тайм-аут
}
//*************************************************** *******************************************************


//*************************************************** *******************************************************
void loop() {
  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
  //Перезапуск занимает довольно много времени
  //Чтобы пропустить его, вызовите init() вместо restart()
  //Serial.println("Инициализация модема...");
  //модем.инит();
  //Строка modemInfo = modem.getModemInfo();
  //Serial.print("Модем:");
  //Serial.println(modemInfo);
  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
  // Serial.print(F("Ожидание сети..."));
  // если (!modem.waitForNetwork()) {
  // Serial.println("сбой");
  // delay(1000);
  // возвращаться;
  // }
  Serial.println(" OK");
  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

  // //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
  // Serial.print(F("Подключение к");
  // Serial.print(apn);
  // if (!modem.gprsConnect(apn, user, pass)) {
  // Serial.println("сбой");
  // delay(1000);
  // возвращаться;
  // }
  // Serial.println("ОК");
  sim800.listen();
  sim800.println('AT+SAPBR=3,1,"Contype","GPRS"');
  sim800.println('AT+CSTT="airtelgprs.com","",""');
  sim800.println("AT+SAPBR=1,1");
  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

  http_client.connect(FIREBASE_HOST, SSL_PORT);

  //ММММММММММММММММММММММММММММММММММ
  while (true) {
    if (!http_client.connected()) {
      Serial.println();
      http_client.stop();// Завершение работы
      Serial.println("HTTP  not connect");
      break;
    }
    else {
      gps_loop();
    }
  }
  //ММММММММММММММММММММММММММММММММММ
}
//*************************************************** *******************************************************

//*************************************************** *******************************************************
void PostToFirebase(const char* method, const String & path , const String & data, HttpClient* http) {
  String response;
  int statusCode = 0;
  http->connectionKeepAlive(); // В настоящее время это необходимо для HTTPS

  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
  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);
  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

  String contentType = "application/json";
  http->put(url, contentType, data);

  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
  // прочитать код состояния и тело ответа
  //statusCode-200 (ОК) | код состояния -3 (тайм-аут)
  statusCode = http->responseStatusCode();
  Serial.print("Status code: ");
  Serial.println(statusCode);
  response = http->responseBody();
  Serial.print("Response: ");
  Serial.println(response);
  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
  if (!http->connected()) {
    Serial.println();
    http->stop();// Выключение
    Serial.println("HTTP POST disconnected");
  }
  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
}
//*************************************************** *******************************************************


//*************************************************** *******************************************************
void gps_loop()
{
  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
  //Может занять до 60 секунд
  boolean newData = false;
  for (unsigned long start = millis(); millis() - start < 2000;) {
    while (neogps.available()) {
      if (gps.encode(neogps.read())) {
        newData = true;
        break;
      }
    }
  }
  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
  //Если новые данные верны
  if (true) {
    newData = false;

    String latitude, longitude;
    //плавающая высота;
    //беззнаковая длинная дата, время, скорость, спутники;

    latitude = String(gps.location.lat(), 6); // Широта в градусах (двойная)
    longitude = String(gps.location.lng(), 6); // Долгота в градусах (двойная)

    //высота = gps.altitude.meters(); // Высота в метрах (двойная)
    //дата = gps.date.value(); // Необработанная дата в формате ДДММГГ (u32)
    //время = gps.time.value(); // Необработанное время в формате HHMMSSCC (u32)
    //скорость = gps.speed.kmph();

    Serial.print("Latitude= ");
    Serial.print(latitude);
    Serial.print(" Longitude= ");
    Serial.println(longitude);

    String gpsData = "{";
    gpsData += "\"lat\":" + latitude + ",";
    gpsData += "\"lng\":" + longitude + "";
    gpsData += "}";

    //PUT Записать или заменить данные по определенному пути, например messages/users/user1/<data>
    //PATCH Обновить некоторые ключи для определенного пути, не заменяя все данные.
    //POST Добавить в список данных в нашей базе данных Firebase. Каждый раз, когда мы отправляем запрос POST, клиент Firebase генерирует уникальный ключ, например messages/users/<unique-id>/<data>
    //https://firebase.google.com/docs/database/rest/save-data

    PostToFirebase("PATCH", FIREBASE_PATH, gpsData, &http_client);


  }
  //NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
}
//*************************************************** *******************************************************

, 👍1