Duboki san i tipka za buđenje
Što prikazuje ovaj primjer
Stavite ESP32-S3 u duboki san i probudite ga nakon 120 sekundi ili pritiskom na tipku za buđenje (IO18). Pri svakom buđenju pločica ponovno kreće od setup(), broji pokretanja i prikazuje zašto se probudila. Brojač pokretanja nalazi se u RTC memoriji, koja zadržava vrijednost tijekom dubokog sna.
Ovaj primjer koristi i funkcije paketa za ESP32 pločice (ESP-IDF načini spavanja), koje nisu dio biblioteke Inkplate.
Kôd primjera
#include <Inkplate.h>
// Conversion factor for micro seconds to seconds
#define uS_TO_S_FACTOR 1000000ULL
// Time ESP32 will go to sleep (in seconds)
#define TIME_TO_SLEEP 120
// Initiate Inkplate object
Inkplate inkplate;
// Store int in rtc data, to remain persistent during deep sleep
RTC_DATA_ATTR int bootCount=0;
void setup() {
inkplate.begin();
inkplate.setTextColor(INKPLATE_BLACK);
++bootCount;
// Our function delcared below
displayInfo();
// Go to sleep for TIME_TO_SLEEP seconds
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
// Enable wakeup from deep sleep on gpio 18 (wake button)
esp_sleep_enable_ext0_wakeup(GPIO_NUM_18, 0);
// Start deep sleep (this function does not return). Program stops here.
esp_deep_sleep_start();
}
void loop() {
// Never here! If you use deep sleep, the whole program should be in setup() because the board restarts each
// time. loop() must be empty!
}
void displayInfo(){
// First, lets delete everything from frame buffer
inkplate.clearDisplay();
// Set text cursor and size
inkplate.setCursor(10,180);
inkplate.setTextSize(1);
inkplate.print(F("Boot count: "));
inkplate.println(bootCount, DEC); // Print the number
// Set next line cursor position
inkplate.setCursor(10,220);
// Display wake up reason
esp_sleep_wakeup_cause_t wakeup_reason;
wakeup_reason = esp_sleep_get_wakeup_cause();
switch(wakeup_reason){
case ESP_SLEEP_WAKEUP_EXT0:
inkplate.println("Wakeup caused by WakeUp button");
break;
case ESP_SLEEP_WAKEUP_TIMER:
inkplate.println("Wakeup caused by timer");
break;
default:
inkplate.println("Wakeuo was not caused by deep sleep");
break;
}
inkplate.display();
}
Korištene funkcije
Inkplate()returns NoneStvara objekt Inkplate. Inkplate 7SPECTRA ima samo jedan šestobojni način rada, pa konstruktor ne prima argument načina rada.
ReturnsKonstruktor; nema povratne vrijednosti.
inkplate.begin()returns voidInicijalizira biblioteku, periferiju i međuspremnik slike. Nakon dubokog sna pločica se ponovno pokreće, pa ga setup() poziva pri svakom buđenju.
ReturnsNišta.
inkplate.setTextColor(uint16_t c)returns voidPostavlja boju teksta, ovdje INKPLATE_BLACK.
ReturnsNišta.
inkplate.clearDisplay()returns voidIspunjava međuspremnik slike bijelom bojom. Ne mijenja zaslon.
ReturnsNišta.
inkplate.setCursor(int16_t x, int16_t y)returns voidPostavlja mjesto na kojem počinje sljedeći ispisani tekst, u pikselima od gornjeg lijevog kuta.
ReturnsNišta.
inkplate.setTextSize(uint8_t s)returns voidPostavlja povećanje teksta; 1 je osnovni font od 5×7 piksela.
ReturnsNišta.
inkplate.print(value)returns size_tIspisuje tekst na kursoru u međuspremnik slike, poput Serial.print().
ReturnsBroj ispisanih bajtova.
inkplate.println(value, format)returns size_tKao print(), zatim pomiče kursor u sljedeći red. S DEC se broj ispisuje u decimalnom zapisu.
ReturnsBroj ispisanih bajtova.
inkplate.display(bool _leaveOn = 0)returns voidŠalje cijeli međuspremnik slike na zaslon i osvježava ga.
ReturnsNišta.
esp_sleep_enable_timer_wakeup(uint64_t time_in_us)returns esp_err_tPaket za ESP32 pločice: budi čip iz dubokog sna nakon zadanog vremena u mikrosekundama, ovdje 120 × 1.000.000.
ReturnsESP_OK u slučaju uspjeha.
esp_sleep_enable_ext0_wakeup(gpio_num_t gpio_num, int level)returns esp_err_tPaket za ESP32 pločice: budi čip kada pin dosegne zadanu razinu. Skica koristi GPIO_NUM_18, tipku za buđenje, i razinu 0 (nisku).
ReturnsESP_OK u slučaju uspjeha.
esp_deep_sleep_start()returns voidPaket za ESP32 pločice: ulazi u duboki san. Ne vraća se; sljedeće buđenje pokreće skicu od početka.
ReturnsNe vraća se.
esp_sleep_get_wakeup_cause()returns esp_sleep_wakeup_cause_tPaket za ESP32 pločice: javlja što je probudilo čip, na primjer ESP_SLEEP_WAKEUP_EXT0 (tipka) ili ESP_SLEEP_WAKEUP_TIMER.
ReturnsUzrok buđenja.
Što očekivati
Nakon učitavanja na zaslonu se prikaže Boot count: 1 i Wakeuo was not caused by deep sleep (pogreška u pisanju potječe iz primjera). Zatim pločica ide u san. Pritisnite tipku za buđenje i brojač se poveća uz poruku Wakeup caused by WakeUp button; ostavite li je 120 sekundi, prikazat će Wakeup caused by timer. Skica ne ispisuje ništa u Serial Monitor.
🔗Otvorite cijeli primjer
examples/Inkplate7SPECTRA/Advanced/DeepSleep/Inkplate7SPECTRA_Wake_Up_Button