RTC-Alarm mit Deep Sleep
Was dieses Beispiel zeigt
Wecken Sie Inkplate mit dem RTC-Alarm aus dem Deep Sleep. Bei jedem Start zeigt der Sketch die aktuelle Uhrzeit und das Datum an, stellt den Alarm 60 Sekunden voraus und geht wieder in den Deep Sleep. Das Board wacht also etwa einmal pro Minute auf, aktualisiert den Bildschirm und schläft wieder ein. Wenn die RTC noch nicht gestellt wurde, setzt der Sketch sie zunächst auf 13:30:00 am 20. Juli 2026.
Dieses Beispiel verwendet außerdem esp_sleep_enable_ext0_wakeup() und esp_deep_sleep_start(). Beide gehören zum ESP32-Board-Package und sind nicht Teil der Inkplate-Bibliothek.
Beispielcode
#include "Inkplate.h" //Include inkplate library to the sketch
#include "driver/rtc_io.h" //Include ESP32 library for RTC pin I/O (needed for rtc_gpio_isolate() function)
#include <rom/rtc.h> //Include ESP32 library for RTF (needed for rtc_get_reset_reason() function)
Inkplate inkplate; //Create an object on Inkplate library
void setup() {
inkplate.begin(); // Init Inkplate library (you should call this function ONLY ONCE)
inkplate.rtc.clearAlarmFlag(); // Clear alarm flag from any previous alarm
if(!inkplate.rtc.isSet()) // Check if RTC is already is set. If ts not, set time and date
{
// display.setTime(hour, minute, sec);
inkplate.rtc.setTime(13,30,00); // 24H mode, ex. 13:30:00
// display.setDate(weekday, day, month, yr);
inkplate.rtc.setDate(1,20,7,2026); // 0 for Monday, ex. Saturday, 5.12.2022.
// display.rtc.setEpoch(1589610300); // Or use epoch for setting the time and date
}
printCurrentTime(); // Display current time and date
inkplate.display();
inkplate.rtc.setAlarmEpoch(inkplate.rtc.getEpoch() + 60, RTC_ALARM_MATCH_DHHMMSS); // Set RTC alarm 60 seconds from now
// Enable wakup from deep sleep on gpio 2 where RTC interrupt is connected
esp_sleep_enable_ext0_wakeup(GPIO_NUM_2, 0);
// Start deep sleep (this function does not return). Program stops here.
esp_deep_sleep_start();
}
void loop() {
// put your main code here, to run repeatedly:
}
void printCurrentTime(){
inkplate.setCursor(50,250);
inkplate.setTextSize(2);
inkplate.setTextColor(INKPLATE_BLUE, INKPLATE_WHITE); // Set text color and background
inkplate.rtc.getRtcData();
switch (inkplate.rtc.getWeekday())
{
case 0:
inkplate.print("Sunday , ");
break;
case 1:
inkplate.print("Monday , ");
break;
case 2:
inkplate.print("Tuesday , ");
break;
case 3:
inkplate.print("Wednesday , ");
break;
case 4:
inkplate.print("Thursday , ");
break;
case 5:
inkplate.print("Friday , ");
break;
case 6:
inkplate.print("Saturday , ");
break;
}
inkplate.print(inkplate.rtc.getDay());
inkplate.print(".");
inkplate.print(inkplate.rtc.getMonth());
inkplate.print(".");
inkplate.print(inkplate.rtc.getYear());
inkplate.print(". ");
print2Digits(inkplate.rtc.getHour());
inkplate.print(':');
print2Digits(inkplate.rtc.getMinute());
inkplate.print(':');
print2Digits(inkplate.rtc.getSecond());
}
void print2Digits(uint8_t _d)
{
if (_d < 10)
inkplate.print('0');
inkplate.print(_d, DEC);
}
Der Kommentar neben setDate() besagt, dass 0 für Montag steht. Die Wochentagsnamen, die der Sketch ausgibt, verwenden jedoch 0 für Sonntag, daher wird der Wochentag 1 im Aufruf als Montag angezeigt.
Verwendete Funktionen
Inkplate()returns NoneErstellt das Inkplate-Objekt. Inkplate 7SPECTRA hat nur einen einzigen Sechs-Farben-Modus, daher benötigt der Konstruktor kein Modus-Argument.
ReturnsKonstruktor; kein Rückgabewert.
inkplate.begin()returns voidInitialisiert die Bibliothek, die Peripherie und den Framebuffer. Rufen Sie sie einmal in setup() auf.
ReturnsNichts.
inkplate.rtc.clearAlarmFlag()returns voidLöscht das Alarm-Flag eines früheren Alarms.
ReturnsNichts.
inkplate.rtc.isSet()returns boolGibt an, ob Uhrzeit und Datum der RTC bereits gestellt wurden. Der Sketch stellt sie nur, wenn die Funktion false zurückgibt, sodass die Uhrzeit den Deep Sleep übersteht.
Returnstrue, wenn die RTC gestellt ist.
inkplate.rtc.setTime(uint8_t hour, uint8_t minute, uint8_t sec, bool isPM = false)returns voidSchreibt die Uhrzeit in die RTC. isPM wird nur im 12-Stunden-Modus verwendet.
ReturnsNichts.
inkplate.rtc.setDate(uint8_t weekday, uint8_t day, uint8_t month, uint16_t yr)returns voidSchreibt das Datum in die RTC. yr ist das vollständige Jahr, hier 2026.
ReturnsNichts.
inkplate.rtc.getEpoch()returns uint32_tGibt die RTC-Zeit als Epoch-Wert zurück.
ReturnsEpoch-Zeit.
inkplate.rtc.setAlarmEpoch(uint32_t _epoch, uint8_t _match)returns voidSetzt den Alarm auf die Zeit in _epoch. _match gibt an, welche Teile der Zeit übereinstimmen müssen: Der Sketch übergibt RTC_ALARM_MATCH_DHHMMSS (Tag, Stunden, Minuten und Sekunden). Die weiteren Werte sind RTC_ALARM_MATCH_SS, RTC_ALARM_MATCH_MMSS, RTC_ALARM_MATCH_HHMMSS und RTC_ALARM_MATCH_WHHMMSS.
ReturnsNichts.
esp_sleep_enable_ext0_wakeup(GPIO_NUM_2, 0)returns esp_err_tFunktion des ESP32-Board-Packages: weckt das Board aus dem Deep Sleep, wenn der angegebene Pin den angegebenen Pegel erreicht. Der Sketch verwendet GPIO 2, an den laut seinem Kommentar der RTC-Interrupt angeschlossen ist, und Pegel 0.
ReturnsESP_OK bei Erfolg.
esp_deep_sleep_start()returns voidFunktion des ESP32-Board-Packages: startet den Deep Sleep. Sie kehrt nicht zurück; beim Aufwachen startet das Board erneut bei setup().
ReturnsKehrt nicht zurück.
inkplate.display(bool _leaveOn = 0)returns voidSendet den gesamten Framebuffer an das Panel und aktualisiert es.
ReturnsNichts.
inkplate.setCursor(int16_t x, int16_t y)returns voidLegt fest, wo der nächste ausgegebene Text beginnt.
ReturnsNichts.
inkplate.setTextSize(uint8_t s)returns voidLegt die Textvergrößerung fest, hier 2.
ReturnsNichts.
inkplate.setTextColor(uint16_t c, uint16_t bg)returns voidLegt die Textfarbe und die Hintergrundfarbe hinter jedem Zeichen fest, hier Blau auf Weiß.
ReturnsNichts.
inkplate.rtc.getRtcData()returns voidLiest Uhrzeit und Datum aus der RTC; die folgenden Get-Funktionen geben die gelesenen Werte zurück.
ReturnsNichts.
inkplate.rtc.getWeekday()returns uint8_tGibt den Wochentag zurück, 0 (Sonntag) bis 6.
ReturnsWochentag.
inkplate.rtc.getDay()returns uint8_tGibt den Tag des Monats zurück.
ReturnsTag des Monats.
inkplate.rtc.getMonth()returns uint8_tGibt den Monat zurück.
ReturnsMonat, 1 bis 12.
inkplate.rtc.getYear()returns uint16_tGibt das Jahr zurück: der in der RTC gespeicherte Wert plus 2000.
ReturnsVollständiges Jahr.
inkplate.rtc.getHour()returns uint8_tGibt die Stunden zurück.
ReturnsStunden.
inkplate.rtc.getMinute()returns uint8_tGibt die Minuten zurück.
ReturnsMinuten.
inkplate.rtc.getSecond()returns uint8_tGibt die Sekunden zurück.
ReturnsSekunden.
inkplate.print(value, format)returns size_tGibt Text, ein Zeichen oder eine Zahl in den Framebuffer aus, wie Serial.print(). DEC gibt eine Zahl dezimal aus.
ReturnsAnzahl der ausgegebenen Bytes.
Was Sie erwarten können
Beim ersten Start zeigt der Bildschirm Uhrzeit und Datum in Blau in der Form Monday , 20.7.2026. 13:30:00. Danach geht das Board in den Deep Sleep. Etwa eine Minute später weckt es der Alarm, und der Bildschirm wird mit der neuen Uhrzeit aktualisiert, zum Beispiel Monday , 20.7.2026. 13:31:00. Das wiederholt sich, bis Sie das Board ausschalten. Der Sketch gibt nichts im Serial Monitor aus.
🔗Vollständiges Beispiel öffnen
examples/Inkplate7SPECTRA/Advanced/DeepSleep/Inkplate7SPECTRA_RTC_Alarm_With_Deep_Sleep