Мой код очень прост, я использую свой esp8266 в качестве сервера, который должен ждать, пока клиентское соединение прочитает с него данные и передаст их в Arduino через последовательный порт. Я также использую mDNS для обнаружения IP-адресов ESP8266 внутри сети, и вот код:
#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». и телефон обнаруживает esp по его IP-адресам. Я смог отправить данные в ESP, и он получил их правильно, а затем отправил обратно в Arduino через последовательный порт,
Проблема заключалась в том, что я постоянно отправляю некоторые данные в ESP, а затем снова пытаюсь сканировать mDNS, на который ESP не ответил. ESP все еще не отвечает на сканирование mDNS в течение примерно 30 секунд / 1 минуты, после чего он снова становится обнаруживаемым.
Тем временем, когда mDNS не отвечает, ESP все еще может получать данные с телефона и отправлять их через последовательный порт без каких-либо проблем и отображать правильные данные. Так что esp не глючит.
Мне кажется, что что-то блокирует службу mDNS, когда я отправляю много данных с телефона. Я сделал что-то не так в своем коде? Когда mDns не отвечает, я попытался выполнить сканирование с помощью приложения для Android Zeroconf, и оно тоже не отреагировало примерно через одну минуту.