ESP8266提供HTML + js

时间:2018-07-29 11:51:06

标签: javascript html esp8266 nodemcu

我尝试在esp8266接入点上托管HTML文件。我可以正确显示一个.html文件。不幸的是,当访问html页面时,我的浏览器无法显示javascript内容。奇怪的是,当我在计算机上本地工作时,它工作得很好。当我访问esp8266上的页面时,收到错误

  

“未找到:dygraph.min.js。”

很显然,浏览器找不到javascript源。我想知道为什么。我已经尝试了几种命名和引用的方法,但是直到现在我还不走运。

我使用ESP8266草图数据上传工具将文件上传到SPIFFS。在html文件中,我将js称为<script type="text/javascript" src="dygraph.min.js"></script>

有人以前有过类似经历吗?完整的代码可以在这里找到: https://github.com/JohnnyMoonlight/esp8266-AccessPoint-Logger-OfflineVisualisation

期待您的意见!

谢谢,最好!

1 个答案:

答案 0 :(得分:3)

通读您的代码,并想象将对Web服务器发出的请求。

您的代码被编写为处理对两个URL的请求://temp.csv-就是这样。

访问/temp.csv时,您将提供index.html的内容。当浏览器解释该文件时,它将尝试从您的ESP加载/dygraph.min.js。您没有该文件的处理程序。因此加载失败。

您需要为其添加处理程序,然后提供文件。因此,您需要添加以下行:

server.on("/dygraph.min.js", handleJS);

并定义执行void handleJS()的功能handleFile()

您需要对/dygraph.css做同样的事情;您也没有处理程序。

我会这样:

void handleHTML() {
  handleFile("index.html");
}

void handleJS() {
  handleFile("dygraph.min.js");
}

void handleCSS() {
  handleFile("dygraph.css");
}

void handleFile(char *filename) {
  File f = SPIFFS.open(filename, "r");
  // the rest of your handleFile() code here
}

并在您的setup()中:

  server.on("/", handleRoot);
  server.on("/temp.csv", handleHTML);
  server.on("/dygraph.css", handleCSS);
  server.on("/dygraph.min.js", handleJS);

分别:

您到文件映射的URL混乱了。我上面共享的代码与您现在拥有的代码一致,但是通常您希望/服务index.html;您可以使用HTML片段。

通常/temp.csv将使用逗号分隔的值文件。我看到您在仓库中有一个,并且您有代码向其中添加数据;你只是不服务。现在,您可以使用index.html。一旦开始成功加载Javascript,您就会遇到麻烦。

您需要对它们进行梳理,以使其正常工作。

此外,在loop()中,您应该将server.handleClient();移动到循环中的第一件事。您编写的方式只是在检查是否有网络请求,是否需要再次读取温度。您应始终检查是否有Web请求,否则会不必要地降低Web服务的速度。

最后一件事,与Web服务器代码完全分开,在您剩下的代码都可以正常工作之前,我不会担心这一点:您的代码大约每5秒就会写入一次SPIFFS 。 SPIFFS存储在ESP8266的闪存中。 ESP8266开发板使用廉价的闪存,这种闪存不会持续很长时间-可能在10,000至100,000个写入周期后会耗尽(这有点复杂;它会分成“页面”,并且页面中的单个单元会耗尽,但是您必须同时写整个页面。

很难确定它的寿命。它取决于所涉及的特定ESP8266开发板和闪存芯片。 10,000个写入周期意味着主板上的闪存可能会在50,000秒后开始出现故障-100,0000个写入周期将为您提供约500,000次写入-如果您继续写入同一位置。这取决于闪存中同一位置的写入频率。如果这对您来说是个问题,则可能要增加两次写入之间的延迟或对数据进行其他操作。

您可能不会遇到此问题,因为要追加到文件中-您将多次重写相同的闪存块,但不会重写10,000次-除非您经常删除CSV文件并重新开始。因此,从长远来看,这可能是一个问题。

您可以在https://design.goeszen.com/mitigating-flash-wear-on-the-esp8266-or-any-other-microcontroller-with-flash.html

上了解有关这些问题的更多信息。

祝你好运!