Firebase не переподключал ESP8266 - PullRequest
0 голосов
/ 18 апреля 2019

Я решил проблему. Я нашел ошибку в библиотеке Firebase.cpp => void FirebaseCall :: analysisError Вы должны изменить этот код До

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);
    }
}

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Скорее всего, проблема в том, что вы пытаетесь подключиться к firebase, пока ваше соединение НЕ доступно, что не может работать. Попробуйте изменить:

if( !WiFiReturns() )

до

if( WiFiReturns() )

Кроме того, в настоящее время вы будете вызывать firebasereconnect() каждый раз, когда вызывается ваш цикл. Вы, вероятно, пропускаете оператор if вокруг реконнекта. Я думаю, что вы хотели сделать это с WiFi.isConnected() (что не является функцией Wi-Fi библиотеки Arduino). Рассмотрим что-то вроде этого:

if ( WiFiReturns() ) { 
    if( !Firebase.isConnected() ){ // replace this with your actual logic
        digitalWrite(WIFILED, HIGH);
        firebasereconnect();
    }
} else { 
0 голосов
/ 18 апреля 2019

У меня вчера такая же проблема.

Я удалил Arduino и установил новую версию.

Затем в менеджере вашей доски найдите "esp8266" и установите версию 2.1.0.

Затем, как вы видите на этом рисунке , нажмите на красную сторону.

Перейдите в "пакеты> esp8266> аппаратное обеспечение> 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);

Затем добавьте эту библиотеку Firebase в папку Arduino.

Затем перейдите в Sketch -> Включить библиотеку -> Управление библиотеками. В этом окне напишите «json» в поле поиска. Вы должны увидеть «ArduinoJson от Бенуа Бланшона». Понизьте его версию до 5.13.2.

Отправьте код на NodeMCU и наслаждайтесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...