【问题标题】:NodeMCU (ESP8266) Defining static IP, stops Firebase processingNodeMCU (ESP8266) 定义静态 IP,停止 Firebase 处理
【发布时间】:2018-08-02 08:58:24
【问题描述】:

您好,我是 NodeMCU (ESP8266) 的新手,我正在构建一个小程序来连接 WIFI(通过互联网),如果互联网不可用,我想通过 IP 地址处理请求。

我使用 firebase 作为数据库/服务器来获取状态。并通过http://192.168.1.223/on?pin=04 之类的 URL 处理命令,如果连接了互联网,那么没问题我可以更新 firebase 条目,但是通过 wifi 使用相同的网络(LAN)连接,我想处理我需要静态 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!

任何建议都会有所帮助,在此先感谢! :)

【问题讨论】:

  • FIREBASE_AUTH 是您的超级机密令牌吗?这不再那么秘密了
  • 是的,如果我不输入静态 IP,它可以正常工作。

标签: firebase firebase-realtime-database esp8266 nodemcu arduino-esp8266


【解决方案1】:

您的 DNS 服务器 IP 地址有误。在您的草图中,它与您分配给 esp 的静态 IP 地址相同。那么 Firebase 主机的名称就无法被 DNS 解析。

DNS 服务器通常是路由器/网关。

IPAddress dns(192,168,1,1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-13
    • 2017-07-14
    • 1970-01-01
    • 2019-01-18
    • 2021-05-25
    • 2017-12-12
    • 2021-08-24
    • 2016-09-15
    相关资源
    最近更新 更多