【发布时间】: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