Я должен отправить данные клиенту в функции прерывания. Но, видимо, клиент не может получить данные. Сервер получил данные, отправленные клиентом, но клиент не может ответить обратно.
Когда я пытаюсь установить связь в пустом цикле, это успешно. Но как только я помещаю это в прерывание, я не могу получить данные обратно. Данные, которые должен отправить сервер, - это просто число, которое затем активирует светодиод на стороне клиента. Это действительно полезно, если кто-то может помочь мне понять это.
Это часть кода сервера.
void ICACHE_FLASH_ATTR detectsMovement() {
LightValue = LightSensor.GetLightIntensity();
Serial.print("Light: ");
Serial.println(LightValue);
if (LightValue < threshold )
{
Serial.println("MOTION DETECTED!!!");
analogWrite(led, 1023);
startTimer = true;
lastTrigger = millis();
WiFiClient client = server.available();
if (client) {
if (client.connected())
{
digitalWrite(ledPin, LOW); // to show the communication only
(inverted logic)
Serial.println("");
String request = client.readStringUntil('\r'); // receives the
message from the client
Serial.print("From client: "); Serial.println(request);
client.flush();
client.println("1\r"); // sends the answer to the client
digitalWrite(ledPin, HIGH);
}
client.stop(); // terminates the connection with the client
}
}
}
void setup() {
Serial.begin(115200); // only for debug
WiFi.config(ip, gateway, subnet); // forces to use the fix IP
WiFi.begin(ssid, pass); // connects to the WiFi router
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(500);
}
pinMode(motionSensor, INPUT_PULLUP);
// Set motionSensor pin as interrupt, assign interrupt function and set RISING mode
attachInterrupt(digitalPinToInterrupt(motionSensor), detectsMovement, RISING);
server.begin(); // starts the server
pinMode(light, INPUT);
LightSensor.begin();
Serial.println("Running...");
pinMode(ledPin, OUTPUT);
pinMode(led, OUTPUT);
}
И код клиента
void loop () {
client.connect(server, 80); // Connection to the server
digitalWrite(ledPin, LOW); // to show the communication only (inverted logic)
Serial.println(".");
client.println("Hello server! Are you sleeping?\r"); // sends the message to the server
String answer = client.readStringUntil('\r'); // receives the answer from the server
Serial.println("from server: " + answer);
if (answer == "1")
{
Serial.println("Success!");
analogWrite(D0, 512);
}
client.flush();4
digitalWrite(ledPin, HIGH);
delay(2000); // client will trigger the communication after two seconds
}
Клиент должен получить значение '1'. Я не знаю, что делать.