Warten auf WiFi-Verbindung ohne Delay?

Hallo miteinander!

Ich beschäftige mich erst seit kurzem mit Arduino bzw mit meinen D1 mini´s. Bisher habe ich eigentlich mit copy&paste, try&error und entsprechender Suche alles hin bekommen, was ich wollte. Nun stehe ich jedoch vor einem Problem.

Ich lese mittels eines Wemos D1 mini, IR-Recievers und digitalRead meinen Stromzähler am S0-Bus ab, übermittle die Werte via MQTT und lasse ein LCD-Display mitzählen. Das funktioniert soweit auch ganz gut, außer wenn die WiFi-Verbindung neu aufgebaut werden soll. Aufgrund des delay beim warten auf WiFi.status werden die Impulse des Zählers in dieser Zeit nicht mitgezählt. Ich konnte bisher nirgends eine Möglichkeit finden, dieses delay z. B. durch eine millis-schleife zu ersetzen. Ist es möglich, und wenn ja, wie muss der sketch umgebaut werden, um auch während des Verbindungsaufbaus die Zählerimpulse weiter aufzeichnen zu können?

Besten Dank!

#include <LiquidCrystal_I2C.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <MQTTClient.h>

const char* host = "192.168.178.20";
const char* wifi_ssid = "Encyclopaedia Galactica";
const char* wifi_password = "A273C427B218D778y359";
int inPin = D5;
int empfang = LOW;
int numberOfInterrupts = 0;
int impulseProMinute =0;
unsigned long lastDebounceTime1 = 0;  
unsigned long debounceDelay = 50;    
unsigned long minutenDelay = 30000;
unsigned long lastMinutenDelay = 0;

LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x3F for a 16 chars and 2 line display
WiFiClient net;
MQTTClient mqtt;

void setup() {
  Serial.begin(115200);
  Serial.print("LCD init...");
  lcd.init();
  lcd.backlight();

  pinMode(inPin, INPUT);

  WiFi.mode(WIFI_STA);
  WiFi.begin(wifi_ssid, wifi_password);

  mqtt.begin(host, net);

  connect();

//  delay(500);
}

void loop() {
  if (!mqtt.connected()) {
    connect();
  }

  mqtt.loop();

  ablesen();
}

void ablesen() {
  empfang = digitalRead(inPin);
  
  if (empfang == LOW) { 
    if ((millis() - lastDebounceTime1) > debounceDelay) {
      numberOfInterrupts = numberOfInterrupts + 1;
      Serial.print("Empfangene IR-Impulse: ");
      Serial.println(numberOfInterrupts);
      lcd.setCursor(0,1);
      lcd.print(numberOfInterrupts);
      lastDebounceTime1 = millis();
      impulseProMinute = impulseProMinute + 1;
      }
    }

  if ((millis() - lastMinutenDelay) >= minutenDelay) {
    lastMinutenDelay = millis();
    lcd.setCursor(0,0);
    lcd.print(impulseProMinute);
    Serial.println(impulseProMinute);

    mqtt.publish("Keller/Strom/Eingang", String(impulseProMinute));
    impulseProMinute = 0;
  }

}

void connect() {
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(wifi_ssid);

  IPAddress staticIP(192, 168, 178, 213); //ESP static ip
  IPAddress gateway(192, 168, 178, 1);   //IP Address of your WiFi Router (Gateway)
  IPAddress subnet(255, 255, 255, 0);  //Subnet mask
  IPAddress dns(192, 168, 178, 1);  //DNS 

  WiFi.hostname("Strom-Sensor");      // DHCP Hostname (useful for finding device for static lease)
  WiFi.config(staticIP, subnet, gateway, dns);
  WiFi.begin(wifi_ssid, wifi_password);
 
  WiFi.mode(WIFI_STA); 
  
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  while (!mqtt.connect(host)) {
    Serial.print(".");
  }

  Serial.println("MQTT connected!");
}

du hast da sogar zwei blockierende while schleifen.

edit
Rest gelöscht weil da stand vermutlich was irreführendes. Andererseits hat sich der TO eh nicht mehr gemeldet ...

rehflux:
Ich konnte bisher nirgends eine Möglichkeit finden, dieses delay z. B. durch eine millis-schleife zu ersetzen. Ist es möglich, und wenn ja, wie muss der sketch umgebaut werden, um auch während des Verbindungsaufbaus die Zählerimpulse weiter aufzeichnen zu können?

Das ist mit millis() möglich, aber nicht mit "millis-schleife".

Eine kleine Spielerei ohne while() und delay().

Gruß Fips

Vielen Dank für die Antworten! Werde ich mal testen.