我的代码非常简单,我使用我的esp8266作为服务器,它应该等待客户端连接从它读取数据并通过串行传输到Arduino。 我还使用mDNS来检测网络内ESP8266的IP地址,这里是代码:
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <EEPROM.h>
.....
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
if (!MDNS.begin("Device 1")) { //
while (1) { delay(1000); }
}
MDNS.addService("SmartDimmerx2", "tcp", 80);
WiFi.mode(WIFI_STA);
delay(4000);
// Check if WiFi is already connected and if not,
if (WiFi.status() != WL_CONNECTED){
Serial.println("Disconnected");
ConnecStat_Toarduino = false;
}
else {
Serial.println("Connected");
ConnecStat_Toarduino = true;
}
// Start the server
server.begin();
}
void loop() {
MDNS.update();
if (WiFi.status() != WL_CONNECTED) {
Serial.println("Disconnected");
ConnecStat_Toarduino = false;
delay(100);
}
else if ((WiFi.status() == WL_CONNECTED) && (ConnecStat_Toarduino = false)) {
Serial.println("Connected");
ConnecStat_Toarduino = true;
}
if (Serial.available() > 0) {
String incomingChars = Serial.readStringUntil('\n');
if(incomingChars.indexOf("WPS") != -1) {
WPS_fnct();
}
}
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
time_cnx = millis();
return;
}
// Wait until the client sends some data
while (!client.available()) {
if ((millis() - time_cnx)>2000)
{return;}
delay(1);
}
// Read the first line of the request
String req = client.readStringUntil('\r');
client.flush();
client.stop();
// Match the request
int val;
if (req.indexOf("V=") != -1)
{
Serial.print(req.substring(2,5));
Serial.println(req.substring(7,11));
//Serial.println(char(req.substring(8,10).toInt()));
}
else {
client.stop();
return;
}
}
我使用我的手机应用程序作为客户端,代码工作正常,我扫描“_SmartDimmerx2._tcp.local。”并且手机用其IP地址检测esp。 我能够将数据发送到ESP并正确接收,然后通过串口将其发送回arduino,
问题出在我连续向ESP发送一些数据然后我再次尝试扫描ESP没有响应的mDNS之后。 ESP仍然没有响应mDNS扫描30秒/ 1分钟,之后它再次被发现。
与此同时,当mDNS没有响应时,ESP仍然能够从手机接收数据并通过串口发送没有任何问题,并显示正确的数据。所以esp没有被窃听。
当我从手机发送大量数据时,我觉得有什么东西挡住了mDNS服务。我的代码中出错了吗? 当mDns没有响应时,我尝试使用Zeroconf安卓应用程序进行扫描,直到一分钟之后它才响应。
答案 0 :(得分:0)
所以我试图激活DEBUG以查看错误, 所以我在文件的开头添加#define DEBUG_ESP_MDNS_ERR并在IDE中激活串口调试,这就是我得到的。
1-当我第一次启动ESP时,我得到了这样的线条,每隔2秒就弹出一次:
:urn 33
:urd 4, 33, 13
:urd 4, 33, 18
:urd 5, 33, 23
:urn 283
2-每当我尝试使用(ZeroconfResolver / mdns)手机搜索esp这些线弹出时,我的手机就能找到esp8266
:urn 43
:urd 14, 43, 13
:urd 4, 43, 28
:urd 5, 43, 33
3-然后当我用手机向esp发送一系列数据时,我得到了这样的界限:
WS:ac
:rn 12
:ref 1
WS:av
:ref 2
:ur 2
:c0 1, 12
:ur 1
:close
WS:dis
:del
WS:ac
:rn 12
:ref 1
WS:av
:ref 2
:ur 2
:c0 1, 12
:ur 1
:close
WS:dis
:del
.........
所以我在手机中使用滑块,每次更改它的值时,都应该将此值发送到ESP
4.发送一些数据后,我再次尝试使用(ZeroconfResolver / mdns)搜索esp8266,esp没有响应,手机无法检测到,这就是我在调试中得到的:
:urn 43
:urd 14, 43, 13
:urd 4, 43, 28
:urd 5, 43, 33
failed _reservefailed _reservefailed _reservefailed _reservefailed _reservefailed _reservefailed _reservefailed _reservefailed _reservefailed _reservefailed _reservefailed .........
所以为了让esp再次被发现,我可以重新启动esp,或者我可以等待30秒到2分钟,ESP将再次被发现。
我搜索此错误'failed _reserve',我在UdpContext.h中找到它
任何人都可以解释一下为什么会触发这个问题?它看起来像tx缓冲区已满?那我该怎么办? 对不起,我是网络菜鸟,我只是一个电子设备。
THX