stats

Aan/Uit via RX

Bij een batterij gevoed ESP-01 project gebruiken we meestal de twee standaard GPIO pinnen en bijna nooit de RX pin of hooguit de TX pin voor het debugen over een seriele poort. Maar we kunnen die RX pin ook als input gebruiken. En met de RESET pin kunnen we de CPU uit een DeepSleep wakker maken.

Dus waarom zouden we dan nog een onhandige a/u schakelaar gebruiken als de ESP ook vele maanden super zuinig kan slapen? Een verborgen mini dukknopje (RESET) achter een klein gaatje is genoeg om hem actief te krijgen en te voorkomen dat ongenode gasten hem uitzetten. Met een tweede drukknopje (RX) kunnen we opdrachten geven.

Daarvoor kan de volgende truc worden uitgehaald: Wanneer de RX lijn voor een korte tijd Laag wordt gehouden, zal de UART dat zien als het character 0. Aangezien "\0" in de software enkel gebruikt wordt om een string-einde aan te geven kan dit gebruikt worden om via een drukknop op de RX input zaken aan te sturen.

  if (Serial.available()) {  // pushed
    if (Serial.read() == 0) {  // char '0'
      if (millis() > mint) count++;  // count
      mint = millis() + 200;  // debounce
      butt = millis() + 500;  // time-out
    }
  }
  if (count && millis() > butt) {    // time-out
    switch (count) {
      case   1 : Roff = 0; break;  // On=On
      case   2 : Roff = 1; break;  // Off=Off
      case   3 : ...
    }
    while (count) { 
      digitalWrite(ledPin, 1);  // LED on
      delay(200);
      digitalWrite(ledPin, 0);  // LED off
      delay(200);
      count--;                 // count down
    }
  }
  ....
  if (Roff && mllis() > 10000) ESP.deepSleep(-1);

Middels Serial.read() en count++ wordt bijgehouden hoe vaak de knop wordt ingedrukt binnen een time-out. Met dit getal kan vervolgens een keuze worden gemaakt. Door enkel de RESET pin te activeren en tijdens de herstart niets te doen, kan door de in EEprom opgeslagen Roff waarde gekozen worden voor al dan niet teruggaan naar DeepSleep na X seconden.

Advies om tussen de RX pin, met de drukknop, en de TX van een aangesloten Serial device een weerstandje op te nemen omdat de drukknop de RX-lijn hard Laag trekt!

Heb je vragen of opmerkingen? Stuur me een berichtje en je krijgt alle gewenste informatie!

HOME