Добрый день, в свое время работала с 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(); }
Там вроде гугол что-то менял, а библиотека, которую вы используете 2016 года. Я использую библиотеку: Код (C++): #include "FirebaseESP8266.h" Попробуйте обновить существующую библиотеку через менеджер библиотек.
Если захотите работать с json, после получения данных из firebase, то вроде да. Если вам нужно делать то же, что есть в предоставленном вами коде, то нет.
Добрый день! Большое спасибо за помощь, все получилось. Правда заметила некую паузу во время процедуры передачи Код (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 раза в секунду.
Попробуйте потоки. Работа со строками потребляет больше ресурсов, чем с другими типами, кроме 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); } } }
Спасибо за совет, пока с потоками не стала заморачиваться. А вы firebase используете для appinvertor? У меня возникла проблема с получением данных с разных веток в одной процедуре. Может сталкивались с такой задачей, или мне лучше создать отдельную тему по appinvertor?
Да, лучше создайте отдельную тему. @рокки1945 что-то делал в app Inventor, может поможет. Но в основном вам нужно надеятся на https://community.appinventor.mit.edu/ . Спрашивать там прейдётся на английском.