我正在尝试实现 ESP8266WebServer 以使其成为服务器页面。只要所有内容都在我的核心脚本中,它就可以正常工作,但当它移入外部库时(对于我的项目,此功能属于该库),它就无法正常工作。当我这样做时,它只提供一个页面,之后 Firefox 说“Firefox 无法建立与服务器的连接”,仅此而已,直到我重置它。与此同时,它确实会响应 ping。
由于我的代码分布在多个类中,而且太大而无法在此处全部发布(而且我还没有设置 git),特此提供相关片段。设置未完成(它添加了用于 OTA 和连接到 WiFi 的代码,所有这些都很好用)。函数循环完成,这就是其中的全部内容。
ESP8266WebServer 的其他值得注意的行为是第一个请求需要大约 5 秒才能得到服务,而任何后续请求都会立即出现。将我的 PC 和 ESP8266 连接到同一个 WiFi 路由器(PC 有线连接)。
.ino 脚本:
代码:
全选void setup() {
master.begin();
}
void loop() {
master.execute();
ArduinoOTA.handle();
}
来自 master.cpp:
代码:
全选void HydroMonitorMaster::begin() {
Serial.print(F("Size (in bytes) of set
tings: "));
Serial.println(String(sizeof(settings)));
// Initialise the EEPROM storage.
EEPROM.begin(EEPROM_SIZE);
// Start by trying to read the existing settings from flash storage.
readSettings();
// Set up the http request handlers.
server.on("/", std::bind(&HydroMonitorMaster::handleRoot, this));
server.begin();
yield();
return;
}
void HydroMonitorMaster::execute() {
// Check for incoming connections.
server.handleClient();
}
来自 master.h:
代码:
全选public:
void execute(void);
private:
void handleRoot();
现在,当我将以下内容添加到 master 时,它起作用了:
代码:
全选void HydroMonitorMaster::handleRoot() {
server.send(200, "text/html", "Request for ROOT received.");
}
但是当我想将 html 响应卸载到第二个类时,它失败了。该页面在我第一次请求时加载,但之后就不再加载了。
master.cpp 的替代代码:
代码:
全选void HydroMonitorMaster::handleRoot() {
network.htmlResponse(server, "test HTML network class response!");
}
这会调用 HydromonitorNetwork.cpp 中的一个函数:
代码:
全选void HydroMonitorNetwork::htmlResponse(ESP8266WebServer server, String response) {
server.send(200, "text/html", response);
return;
}