#firebase #arduino
# #огневая база #arduino
Вопрос:
Я решил проблему. я нашел ошибку в библиотеке Firebase.cpp => void FirebaseCall::analyzeError Вы должны изменить этот код перед
void FirebaseCall::analyzeError(char* method, int status, const std::stringamp; path_with_auth) {
if (status != 200) {
error_ = FirebaseError(status,
std::string(method) " " path_with_auth
": " http_->errorToString(status));
}
}
После
void FirebaseCall::analyzeError(char* method, int status, const std::stringamp; path_with_auth) {
if (status != 200) {
error_ = FirebaseError(status,
std::string(method) " " path_with_auth
": " http_->errorToString(status));
} else {
error_ = FirebaseError();
}
}
Как только подключение к Интернету отключается, оно снова подключается. Когда я снова подключаюсь, firebase не подключается. Поэтому, когда проблема снова подключается, она снова не подключается к firebasis. Как мне это сделать?
boolean WiFiReturns() {
if (WiFi.localIP() == IPAddress(0, 0, 0, 0))
return 0;
switch (WiFi.status()) {
case WL_NO_SHIELD: return 0;
case WL_IDLE_STATUS: return 0;
case WL_NO_SSID_AVAIL: return 0;
case WL_SCAN_COMPLETED: return 1;
case WL_CONNECTED: return 1;
case WL_CONNECT_FAILED: return 0;
case WL_CONNECTION_LOST: return 0;
case WL_DISCONNECTED: return 0;
default: return 0;
}
}
void firebasereconnect() {
Serial.println("Trying to reconnect");
Firebase.begin(firebaseURl, authCode);
}
void loop() {
if (!WiFiReturns()) {
WiFi.isConnected();
digitalWrite(WIFILED, HIGH);
firebasereconnect();
} else {
digitalWrite(WIFILED, LOW);
}
}
Ответ №1:
Проблема, вероятно, в том, что вы пытаетесь подключиться к firebase, пока ваше соединение недоступно, что может не сработать. Попробуйте изменить:
if( !WiFiReturns() )
Для
if( WiFiReturns() )
Кроме того, в настоящее время вы будете вызывать firebasereconnect()
каждый раз, когда вызывается ваш цикл. Вероятно, вам не хватает инструкции if при повторном подключении. Я думаю, вы хотели сделать это с WiFi.isConnected()
помощью (что, кстати, не является функцией библиотеки arduino WiFi). Рассмотрим что-то вроде этого:
if ( WiFiReturns() ) {
if( !Firebase.isConnected() ){ // replace this with your actual logic
digitalWrite(WIFILED, HIGH);
firebasereconnect();
}
} else {
Комментарии:
1. if ( WiFiReturns() ) { if( !WiFi.isConnected()){ // замените это на вашу фактическую логику digitalWrite(WIFILED, HIGH); firebasereconnect(); } } Я сделал это таким образом, но это не работает. Он больше не поедет на Огневую базу.
2. Что вы имеете в виду, говоря «Он больше не поедет на Огневую базу»?
3. Всегда выдает эту ошибку: «Попытка повторного подключения». Firebase не подключается повторно после отключения Интернета.
Ответ №2:
Вчера у меня была такая же проблема.
Я удалил Arduino и установил новую версию.
Затем в вашем board manager найдите «esp8266» и установите версию 2.1.0.
Затем, как вы видите на этом рисунке, нажмите на красную сторону.
Перейдите в раздел «пакеты> esp8266> оборудование> esp8266> 2.0.0 > инструменты> sdk> включить» и откройте «user_interface.h».
Здесь вы должны увидеть «#endif» внизу. Перед этим напишите эти строки и сохраните:
typedef void (*freedom_outside_cb_t)(uint8 status);
int wifi_register_send_pkt_freedom_cb(freedom_outside_cb_t cb);
void wifi_unregister_send_pkt_freedom_cb(void);
int wifi_send_pkt_freedom(uint8 *buf, int len, bool sys_seq);
Затем добавьте эту библиотеку firebase в свою папку Arduino.
Затем перейдите в раздел Эскиз -> Включить библиотеку -> Управление библиотеками. В этом окне введите «json» в поле поиска. Вы должны увидеть «Ардуинойсон Бенуа Бланшона». Понизьте его версию до 5.13.2.
Отправьте код на свой NodeMCU и наслаждайтесь.
Комментарии:
1. master/src/FirebaseHttpClient_Esp8266.cpp : В функции-члене ‘virtual std::string FirebaseHttpClientEsp8266::errorToString(int)’: /Users/…./Documents/Arduino/libraries/firebase-arduino-master/src/FirebaseHttpClient_Esp8266.cpp:83:11 : ошибка: ‘errorToString’ не является членом’HttpClient’
2. @stakabekor измените свою плату в меню «Инструменты». Сначала используйте NodeMCU 0.9. Если не работает, используйте NodeMCU 1.0