NodeMCU запускает код датчика во время прослушивания входа Wi-Fi?

Можно ли запустить код, одновременно прослушивая локальные входные данные через IP-адрес? Я думал, что это будет в части «пока», но предполагаю, что он отвечает только тогда, когда IP-адрес загружен.

void loop() {

  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  while (!client.available()) {
    delay(1);   
  }
  String query = client.readStringUntil('\r');
  client.flush();

  if (query.indexOf("/open") != -1)  {
    open_fast();
  } else if (query.indexOf("/close") != -1)  {
    close_fast();
  }

  sensor = analogRead(A0);
  sensor = map(sensor, 0, 1023, 0, full);

  Serial.print(sensor);
  Serial.print("  ");
  Serial.println(pos);

  if (sensor > pos) {
    open_slow();
    delay(1000);
  } else if (sensor < pos) {
    close_slow();
    delay(1000);
  }
  delay(100);

}

, 👍0

Обсуждение

вместо if (!client) { возвращаться; } use if (client) { /* обрабатывать клиента */ }?, @Juraj

@Юрай Что это делает?, @Vimmy

пройти курс кодирования, @Juraj


1 ответ


Лучший ответ:

0

Проблема в том, что

while (!client.available()) {
  delay(1);
}
// ваш код Wi-Fi

Вы ждете события Wi-Fi и в это время явно не можете прочитать показания датчика. Просто опросите входящие запросы, выполнив это следующим образом:

if (client.available()) {
  // ваш код Wi-Fi
}

Таким образом, ваш цикл пропускает процедуру Wi-Fi, если делать нечего, и продолжает считывать показания датчика.

Поскольку микроконтроллеры обычно не работают под управлением ОС, у вас нет многозадачности, которую вам придется реализовывать самостоятельно. Обычно вам следует избегать использования циклов задержки, если вы хотите, чтобы несколько задач выполнялись «параллельно».

,

Разница между «если» и «пока» в этой ситуации: оказывает ли это негативное влияние на Wi-Fi или mcu, опрашивая Интернет каким-либо другим способом, или они в основном одинаковы ?, @Vimmy

client.available() просто проверяет, есть ли какие-либо запросы во входном буфере esp, фактическая связь уже произошла в это время и обрабатывается аппаратным обеспечением esp. Но между if и while есть фундаментальная разница: if — это всего лишь один тест на активность Wi-Fi, while задерживает ваш цикл **до** активности Wi-Fi и это не то, что вам нужно., @Sim Son