完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好!我是新来的。我是来自荷兰的汉斯。我在这里读了一些有趣的话题。
现在我自己也有问题。 我有一个 wemos d1 mini,esp8266。它正在运行一个“简单”的网络服务器。 仅显示一些数据记录图形,包括我的柴炉的 5 个温度传感器和功率 (kW)。 打开我的“主页”时,它会显示一些数据和一些图形。数据发送时间(我可以在我的主页上看到)在我家,wifi 为 1300 毫秒,而在我手机上有 4G 的其他地方大约为 3000 - 5000 毫秒。 现在问题来了:当中止页面加载时,或者页面加载时 wifi 超出范围时,handleroot 不会停止。而循环无法完成他的工作!有时需要 15 分钟到 25 分钟才能回到循环。一直(我认为)他都在尝试将数据发送给客户端(由于某种原因断开连接...... 他必须发送大量数据...... 我认为,必须有一些“客户端可用”在 handleroot 中。但是 esp8266webserver 没有这个功能。 中断确实有效。但是我每 2 分钟记录一次温度数据,却没有。 有人知道如何解决这个问题吗? |
|
相关推荐
1个回答
|
|
首先,你需要了解一下HTTP协议和ESP8266的工作原理。
HTTP是一种无状态协议,即每个请求都是相互独立的。当你在浏览器中停止加载页面时,它会中止当前请求,但ESP8266仍然在等待请求。因此,handleroot不会停止。 你需要在ESP8266的程序中实现请求超时和连接断开的处理。可以使用ESP8266的异步Web服务器来实现这一点,如下所示: ``` #include AsyncWebServer server(80); void handleRoot(AsyncWebServerRequest *request) { // 处理请求 } void setup() { // 初始化WiFi连接 // 异步Web服务器 server.on("/", HTTP_GET, handleRoot); server.begin(); } void loop() { // 处理其他任务 } ``` 在这个例子中,使用了AsyncWebServer库来实现异步Web服务器。当收到请求时,会调用handleRoot函数来处理请求。在setup函数中,启动了异步Web服务器,并注册了handleRoot函数。在loop函数中,处理其他任务。 此外,你还需要实现请求超时和连接断开的处理,可以使用AsyncWebServer中提供的回调函数来实现: ``` void handleNotFound(AsyncWebServerRequest *request) { request->send(404, "text/plain", "Not found"); } void handleDisconnect(AsyncWebServerRequest *request) { // 处理连接断开 } void setup() { // 初始化WiFi连接 // 异步Web服务器 server.on("/", HTTP_GET, handleRoot); server.onNotFound(handleNotFound); server.onDisconnect(handleDisconnect); server.begin(); } ``` 在这个例子中,使用了onNotFound和onDisconnect回调函数来处理请求超时和连接断开的情况。当请求的URL没有被匹配时,会调用handleNotFound函数处理;当连接断开时,会调用handleDisconnect函数处理。 希望这能帮助你解决问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
524浏览 6评论
433浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
422浏览 5评论
414浏览 4评论
387浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-3 06:53 , Processed in 0.725819 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号