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);
}
@Vimmy, 👍0
Обсуждение1 ответ
Лучший ответ:
Проблема в том, что
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
- ESP8266 не подключается к Wi-Fi
- WebSocketsServer.h: No such file or directory
- Каково использование зарезервированных контактов и контактов SDD2, SDD3 NodeMCU?
- Как получить текущий уровень сигнала WiFi?
- Обнаружение ESP8266 в сети
- NodeMCU продолжает отключаться
- Соединение сетей Wi-Fi на nodemcu: как настроить esp8266 в качестве расширителя Wi-Fi, простейший случай
- Как добиться быстрой и надежной связи между NodeMCU?
вместо
if (!client) { возвращаться; }
useif (client) { /* обрабатывать клиента */ }
?, @Juraj@Юрай Что это делает?, @Vimmy
пройти курс кодирования, @Juraj