我尝试在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
期待您的意见!
谢谢,最好!
答案 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文件并重新开始。因此,从长远来看,这可能是一个问题。
上了解有关这些问题的更多信息。祝你好运!