Esptop 10 berøring våkner fra dyp søvn

Esptop 10 berøring våkner fra dyp søvn
ESP32 er et IoT -basert mikrokontrollertavle som kommer med forhåndsbygde funksjoner som Bluetooth og WiFi -drivere. Imidlertid har ESP32 flere pinner som kobles til ombord Hall -effekt og kapasitive berøringssensorer. I dag skal vi diskutere ESP32 Capacitive Touch Pins og hvordan de kan brukes til å vekke ESP32 fra dyp søvn.

Hva er ESP32 dyp søvn

ESP32 Sleep Mode er en strømsparingsmodus som ESP32 kan legge inn når den ikke er i bruk, og lagrer alle data i RAM. På dette tidspunktet blir strøm til alle unødvendige periferiutstyr avskåret mens RAM mottar nok strøm til å kunne beholde dataene sine.

ESP32 Touch Sensor Pinout

ESP32 -styret kommer med 10 GPIO -pinner som støtter kapasitive berøringssensorer. Disse GPIO -pinnene kan oppdage endringer i elektrisk ladning som kan være forårsaket av menneskets hud. Så disse pinnene kan oppdage variasjoner forårsaket av mennesker og generere produksjon deretter.

Disse pinnene kan enkelt integreres med berøringsputer og kan erstatte mekaniske knapper i ESP32 -prosjektet. Disse berøringspinnene kan også våkne opp ESP32 fra dyp søvn.

Følgende er berøringssensorpinnene uthevet i grønn farge:

Her tilsvarer berøringssensorpinne 0 GPIO PIN 4 og berøringssensor 2 er ved GPIO -pinne 2. En pinne som er Touch Pin 1 mangler i denne versjonen av ESP32 (30 PIN) -brettet. Berøringsføler 1 er på GPIO PIN 0 som er tilgjengelig i 36-pinners versjonen av ESP32-brettet.

Aktiver berøring Våkn opp på ESP32

Aktivering av touch -pin vekking for ESP32 fra dyp søvn er enkelt. Vi trenger bare å bruke følgende funksjon i ESP32 -kode:

esp_sleep_enable_touchpad_wakeup ()

ESP32 Touch Wake Up Dyp søvneksempel

Nå vil vi ta et eksempel for å teste ESP32 kapasitiv berøringssensor for å vekke styret vårt. Sørg for å installere ESP32 -brettet i Arduino IDE. For å se en guide om ESP32 -installasjon med Arduino IDE, klikk her.

Nå åpent arduino ide gå til: Fil> Eksempler> ESP32> DeepSleep> Touchwakeup

Følgende kode vises i nytt vindu:

#Define terskel 40 / * Følsomhetssett * /
RTC_DATA_ATTR INT BOOTCOUNT = 0;
touch_pad_t touchpin;
void print_wakeup_reason ()
esp_sleep_wakeup_cause_t wakeup_reason;
wakeup_reason = esp_sleep_get_wakeup_cause ();
bryter (wakeup_reason)

sak esp_sleep_wakeup_ext0: seriell.println ("vekker på grunn av signal ved bruk av RTC_IO"); gå i stykker;
sak esp_sleep_wakeup_ext1: seriell.println ("vekker på grunn av signal ved bruk av RTC_CNTL"); gå i stykker;
CASE ESP_SLEP_WAKEUP_TIMER: SERIAL.Println ("Timer forårsaket vekker"); gå i stykker;
case esp_sleep_wakeup_touchpad: serie.Println ("Touchpad forårsaket vekker"); gå i stykker;
case esp_sleep_wakeup_ulp: seriell.Println ("ULP -program forårsaket vekker"); gå i stykker;
Standard: Seriell.Printf ("Wake Up var ikke forårsaket av dyp søvn: %d \ n", wakeup_reason); gå i stykker;


void print_wakeup_touchpad ()
touchpin = esp_sleep_get_touchpad_wakeup_status ();
bryter (berøringspinn)

Sak 0: Seriell.Println ("Touch on GPIO 4"); gå i stykker;
Sak 1: Seriell.Println ("Touch on GPIO 0"); gå i stykker;
Sak 2: Seriell.Println ("Touch on GPIO 2"); gå i stykker;
Sak 3: Seriell.Println ("Touch on GPIO 15"); gå i stykker;
Sak 4: Seriell.Println ("Touch on GPIO 13"); gå i stykker;
Sak 5: Seriell.Println ("Touch on GPIO 12"); gå i stykker;
Sak 6: Seriell.Println ("Touch on GPIO 14"); gå i stykker;
Sak 7: Seriell.Println ("Touch on GPIO 27"); gå i stykker;
Sak 8: Seriell.Println ("Touch on GPIO 33"); gå i stykker;
Sak 9: Seriell.Println ("Touch on GPIO 32"); gå i stykker;
Standard: Seriell.Println ("Wakeup Not by Touchpad"); gå i stykker;


void callback ()
// Placeholder tilbakeringingsfunksjon

void setup ()
Serie.Begin (115200);
forsinkelse (1000);
// Øk oppstartsnummeret
++bootcount;
Serie.println ("startnummer:" + streng (bootcount));
// Skriv ut årsaken til vekking og pin -nummer
print_wakeup_reason ();
print_wakeup_touchpad ();
// sett avbryt ved berøringstift T0
TouchAttachInterrupt (T0, tilbakeringing, terskel);
// Touchpad konfigurert
esp_sleep_enable_touchpad_wakeup ();
// Sleep Mode Active
Serie.Println ("Gå til å sove nå");
esp_deep_sleep_start ();
Serie.Println ("Dette vil aldri bli skrevet ut");

void loop ()

Denne koden leser berøringsnålen T0. Her tilsvarer T0 GPIO 4 eller D4. Det første vi må starte med er å sette en terskelverdi hvoretter ESP32 vil våkne opp fra søvn. Her i eksemplet ovenfor er terskel definert som 40. Terskelverdien kan endres avhengig av forhold.

Når leseverdien på T0 -pinnen blir lavere enn den angitte terskelverdien, vil ESP32 våkne opp fra søvn ved å ringe Ring tilbake() funksjon.

Tilbakeringingsfunksjonen () vil utføres bare når ESP32 er våken. Hvis man bare berører og slipper pinnen, vil den ikke bli utført. Hvis vi vil bruke en annen pin, må vi bruke avbrudd for den pinnen.

Neste ved hjelp av esp_sleep_enable_touchpad_wakeup () Funksjon Vi setter berøringsnålen som en vekkingskilde for ESP32 -styret.

Maskinvare

For å teste koden, ta en brødplate og plasser et ESP32 -brett der borte, koble en gensertråd til GPIO 4 og berør den ved hjelp av fingeren.

Skjematisk

Fest en jumpertråd på D4 og berør overskriften på jumpertråden ved hjelp av fingeren.

Produksjon

Utgang viser avlesningen før og etter å ha berørt GPIO -pinnen 4 av ESP32. Her kan vi se ESP32 våkner etter å ha berørt pinnen og skriver ut meldingen om pin -nummer som forårsaker den.

Konklusjon

Denne artikkelen vil guide deg ved bruk av ESP32 berøringsnåler for å vekke brettet ditt fra dyp søvn. ESP32 har 10 berøringsnåler som kan kalles og settes som kilde for oppvåkning av ESP32 -brett. Når berøring oppdages ved GPIO Touch Pin, vil ESP32 våkne opp og kjøre tilbakeringingsfunksjonen () etter at den kommer tilbake til å sove.