Esp8266, нет обмена данными с firebase

Тема в разделе "ESP8266, ESP32", создана пользователем Miheeei, 2 янв 2021.

  1. Miheeei

    Miheeei Нерд

    Добрый день, в свое время работала с firebase, приложение на мобильном и esp8266. Всё работало отлично. Был сохранен проект и библиотека для esp. Спустя год решила воспользоваться данным решение но, не тут то было. Приложение в телефоне работает отлично, в обе стороны идёт обмен. А вот с esp не хочет. Не получает и не принемает данные с сервера. Проект компилируеться на ура. В чем могут быть проблемы?
    Код (C++):

    #include <ESP8266WiFi.h>
    #define Wifi_SSID "********"
    #define Wifi_PASS "******"

    #include <FirebaseArduino.h>
    #define FireBase_URL "*******"
    #define FireBase_AUTH "******"
    String PathID = "Luchistaya";

    void setup()
    {
    Serial.begin(9600);
    WiFi.begin(Wifi_SSID, Wifi_PASS);
    Firebase.begin(FireBase_URL);

    while (WiFi.status() != WL_CONNECTED)
      {
        Serial.print(".");
        delay(500);
      }
      Serial.println();
      Serial.print("Connected: ");
      Serial.println(WiFi.localIP());
    }

    void FireBaseRead()
    {
      FirebaseObject object = Firebase.get(PathID);
      int A = object.getInt ("Term");
      int B = object.getInt ("Hum");
    }

    void FireBaseWrite()
    {
      int D = 5;
      int E = 69;
      FirebaseObject object = Firebase.get(PathID);
      Firebase.setInt(PathID+"/Term", D);
      Firebase.setInt(PathID+"/Hum", E);
      delay(1000);
    }
    void loop()
    {
      FireBaseWrite();
    }
     
     
    Рокки1945 нравится это.
  2. Un_ka

    Un_ka Гуру

    Там вроде гугол что-то менял, а библиотека, которую вы используете 2016 года.
    Я использую библиотеку:
    Код (C++):
    #include "FirebaseESP8266.h"
    Попробуйте обновить существующую библиотеку через менеджер библиотек.
     
  3. Miheeei

    Miheeei Нерд

    Спасибо, буду вечером пробовать, нужно ли ещё библиотека JSON?
     
  4. Un_ka

    Un_ka Гуру

    Если захотите работать с json, после получения данных из firebase, то вроде да. Если вам нужно делать то же, что есть в предоставленном вами коде, то нет.
     
  5. Miheeei

    Miheeei Нерд

    Добрый день!
    Большое спасибо за помощь, все получилось. Правда заметила некую паузу во время процедуры передачи
    Код (C++):
    Firebase.setString
    Ковыряла всю библиотеку не нашла где отключить задержку, Пока не критично, но боюсь представить что будет при большом потоке данных.
    Еще такой вот вопрос, получаю данные таким методом
    Код (C++):
     if (Firebase.getString(FireBase, "/GATEWAY/User/Message"))
      {
        if (FireBase.dataType() == "string")
        {
          String Data = "";
          if (FireBase.stringData() != Data)
          {
            Data = FireBase.stringData();
            Serial.println(Data);
          }
         }
       }
    Создала переменную строку с которой сравниваю полученные данные и вывожу в порт, иначе в порт сыпется 2-3 раза в секунду те же данные. Было бы конечно не плохо получать данные только после изменения в БД, чтобы не нагружать сеть. Но не пойму как это сделать, Кроме того при получении тоже имеется задержка, раз в порт сыпется только 2-3 раза в секунду.
     
  6. Un_ka

    Un_ka Гуру

    Попробуйте потоки.
    Работа со строками потребляет больше ресурсов, чем с другими типами, кроме JSON, наверное. А кокой длины примерно строка?

    Во втором примере кода, у вас переменная data не глобальная, что влечёт неопределённое поведение.
    Так должно работать.
    Код (C++):
    String Data = ""; //<до setup

    if (Firebase.getString(FireBase, "/GATEWAY/User/Message"))
      {
        if (FireBase.dataType() == "string")
        {
         
          if (FireBase.stringData() != Data)
          {
            Data = FireBase.stringData();
            Serial.println(Data);
          }
         }
       }
     
  7. Miheeei

    Miheeei Нерд

    Спасибо за совет, пока с потоками не стала заморачиваться.
    А вы firebase используете для appinvertor? У меня возникла проблема с получением данных с разных веток в одной процедуре. Может сталкивались с такой задачей, или мне лучше создать отдельную тему по appinvertor?
     
  8. Un_ka

    Un_ka Гуру

    Да, лучше создайте отдельную тему. @рокки1945 что-то делал в app Inventor, может поможет. Но в основном вам нужно надеятся на https://community.appinventor.mit.edu/ . Спрашивать там прейдётся на английском.