NodeMCU (ESP8266) Определение статического IP-адреса, остановка обработки Firebase

Здравствуйте, я новичок в NodeMCU (ESP8266), я создаю небольшую программу для подключения к WIFI (с Интернетом), и если Интернет недоступен, я хочу обрабатывать запрос по IP-адресу.

Я использую firebase в качестве базы данных / сервера для получения статуса. И обработайте команду через URL-адрес, например http://192.168.1.223/on?pin=04. Если интернет подключен, то нет проблем, я могу обновить запись в firebase, но с тем же сетевым (LAN) подключением через Wi-Fi, которое я хочу обработать, мне нужен статический IP-адрес. Но проблема в том, что я не могу сделать этот IP-адрес статическим, и если я сделаю его статическим, мой NodeMCU не сможет подключиться к firebase.

Вот как выглядит мой код:

#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
#include <ESP8266WebServer.h>

#define FIREBASE_HOST "pushst-56f2c.firebaseio.com"
#define FIREBASE_AUTH "mhBpzrNyhhwEGwmFxkVFTIEylwrXMw0gm"
#define PATH "/clients/devicename/watermotor"

IPAddress ip(192, 168, 1, 223);  //Node static IP
IPAddress dns(192, 168, 1, 223);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);

char ssid[] = "MyNetwork";   
char password[] = "Qwert98!!"; 

int wifiStatus = WL_IDLE_STATUS;

ESP8266WebServer server(80);

void setup() { 
      Serial.begin(115200); 

      delay(100);
      Serial.println();
      Serial.println();
      Serial.print("Your are connecting to;");
      Serial.println(ssid);

      WiFi.begin(ssid, password);
      WiFi.config(ip, dns, gateway, subnet);


      while (WiFi.status() != WL_CONNECTED) {
        digitalWrite(WIFI_CONNECT_LED, HIGH);
        delay(500);
        Serial.print(".");
      }

      wifiStatus = WiFi.status();

      if(wifiStatus == WL_CONNECTED){
          digitalWrite(WIFI_CONNECT_LED, LOW);

         Serial.println("Your IP address is: ");
         Serial.println(WiFi.localIP());  

         Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
         Firebase.set("/clients/devicename/watermotor/name", "Motor");
         Firebase.set("/clients/devicename/watermotor/relay_status", "off");
         Firebase.set("/clients/devicename/watermotor/device_status", "online");
         Firebase.stream(PATH);

         server.on("/on", handleOnRequest); //Associate the handler function
         server.on("/off", handleOffRequest); //Associate the handler function

         server.begin(); //Start the server
      }
      else{
        Serial.println("");
        Serial.println("WiFi not connected");
      }

}


void loop() { 
    server.handleClient();
    if (Firebase.failed()) {
      Serial.println("streaming error");
      Serial.println(Firebase.error());
      delay(1000);
      return;
    }

    if (Firebase.available()) {
        Serial.println();
        Serial.print("Firebase available");
        Serial.println();
        FirebaseObject event = Firebase.readEvent();
    }
}

Я не уверен, есть ли проблема с FirebaseLibrary или просто с ESP8266!

Любые предложения будут полезны, заранее спасибо! :)


person user3201500    schedule 22.02.2018    source источник
comment
FIREBASE_AUTH ваш суперсекретный токен? Это уже не такой секрет   -  person Lanting    schedule 22.02.2018
comment
Да, он отлично работает, если я не ставлю статический IP.   -  person user3201500    schedule 22.02.2018


Ответы (1)


У вас неправильный IP-адрес DNS-сервера. В вашем скетче это то же самое, что и статический IP-адрес, который вы назначаете esp. Тогда имя хоста firebase не может быть разрешено DNS.

DNS-сервером обычно является маршрутизатор / шлюз.

IPAddress dns(192,168,1,1)
person Juraj    schedule 24.02.2018