【问题标题】:Firebase was not reconnecting ESP8266Firebase 没有重新连接 ESP8266
【发布时间】:2019-04-18 23:28:03
【问题描述】:

我解决了这个问题。 我在库 Firebase.cpp => void FirebaseCall::analyzeError 中发现了错误 您应该更改此代码 之前

void FirebaseCall::analyzeError(char* method, int status, const std::string& 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::string& 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);
    }
}

【问题讨论】:

    标签: firebase arduino


    【解决方案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 { 
    

    【讨论】:

    • if ( WiFiReturns() ) { if( !WiFi.isConnected()){ // 用你的实际逻辑替换它 digitalWrite(WIFILED, HIGH); firebasereconnect();我是这样做的,但它不起作用。他不会再去 Firebase。
    • “他不会再去 Firebase”是什么意思?
    • 总是给出这个错误:“尝试重新连接”。断开互联网后,Firebase 不会重新连接。
    【解决方案2】:

    我昨天遇到了同样的问题。

    我删除了 Arduino 并安装了新版本。

    然后,在您的主板管理器中,搜索“esp8266”并安装 2.1.0 版本。

    然后,正如您在 picture 中看到的那样,单击红色侧。

    转到“packages > esp8266 > hardware > esp8266 > 2.0.0 > tools > sdk > include”并打开“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);
    

    然后,将this firebase library 添加到您的 Arduino 文件夹中。

    然后,转到 Sketch --> Include Library --> Manage Libraries。在此窗口中,将“json”写入搜索框。您应该看到“Benoit Blanchon 的 ArduinoJson”。将其版本降级到 5.13.2。

    将代码发送到您的 NodeMCU 并开始使用。

    【讨论】:

    • 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”的成员
    • @stakabekor 在工具菜单上更改您的板。首先,使用 NodeMCU 0.9。如果不行,请使用 NodeMCU 1.0
    猜你喜欢
    • 2021-02-25
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2021-04-06
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    相关资源
    最近更新 更多