Skip to main content

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​

Select Board
Inkplate7SPECTRA_Wake_Up_Button.ino
#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 None

Stvara 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 void

Inicijalizira 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 void

Postavlja boju teksta, ovdje INKPLATE_BLACK.

ReturnsNišta.

inkplate.clearDisplay()returns void

Ispunjava međuspremnik slike bijelom bojom. Ne mijenja zaslon.

ReturnsNišta.

inkplate.setCursor(int16_t x, int16_t y)returns void

Postavlja mjesto na kojem počinje sljedeći ispisani tekst, u pikselima od gornjeg lijevog kuta.

ReturnsNišta.

inkplate.setTextSize(uint8_t s)returns void

Postavlja povećanje teksta; 1 je osnovni font od 5×7 piksela.

ReturnsNišta.

inkplate.print(value)returns size_t

Ispisuje tekst na kursoru u međuspremnik slike, poput Serial.print().

ReturnsBroj ispisanih bajtova.

inkplate.println(value, format)returns size_t

Kao 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_t

Paket 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_t

Paket 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 void

Paket 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_t

Paket 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

→