ePaper Display und Google Kalender mit ESP8266 - AZ-Delivery
Heutzutage nutzen viele ihr Smartphone, um Dinge des Alltags, wie das Planen von Terminen, zu erledigen. Doch bei vielen Benachrichtigungen kann man schnell den Überblick über bevorstehende Termine verlieren. In diesem Blogbeitrag werden wir einen Kalender mit einem e-paper Display und einem Esp8266 Mikrocontroller bauen, welcher die bevorstehenden Termine anzeigt. Damit die Termine immer aktuell sind, greifen wir auf diese über das Internet mit einer sogenannten API Schnittstelle zu. Ein Programm, welches diese Funktion beinhaltet, ist der Google Calendar, welcher auch auf vielen Betriebssystemen verfügbar ist. Hierfür wird lediglich ein Google Account benötigt, welcher kostenlos erstellt werden kann, falls noch nicht vorhanden.

Hardware

An Hardware benötigen wir:

2.9“ epaper Display

ESP8266 Mikrocontroller NodeMCU oder D1 Mini

Optional:

Taster

3D gedrucktes Gehäuse

Schrauben & Schmelzgewinde

Als erstes muss das Display an den Mikrocontroller angeschlossen werden. Dieses kann entweder über eine direkt gelötete Kabelverbindung verbunden werden, oder über ein selbstgekrimptes Kabel, welches an die Stiftleiste des Displays gesteckt wird.

ESP8266 Node MCU 2.9“ epaper Display  
3V3 VCC
GND GND
D7 SDI
D5 SCLK  
D4 CS
D2 D/C
D1 Reset
D3 Busy

Verdrahtung mit Buchsenleiste

Buchsenleiste wie gezeigt anlöten

Software

Die benötigte Software besteht aus zwei Teilen:

1 Google Script

Gehen Sie als erstes auf die Google Calendar Website, melden Sie sich mit Ihrem Account an und erstellen Sie links bei „Weitere Kalender“ einen neuen Kalender. Unter diesem Kalender speichern Sie zukünftig alle Termine, welche auf dem Display angezeigt werden sollen.

Öffnen Sie nun in Ihrem Browser die Google Script Website, melden Sie sich hier mit dem gleichen Google Konto wie oben an. Klicken Sie als Nächstes links oben auf den Button „Neues Projekt“,

es öffnet sich nun ein Fenster in welches Sie folgenden Code kopieren:

Zum Schluss drücken Sie auf das blaue Feld „Bereitstellen“ und wählen Sie dort „Neue Bereitstellung“ aus. Im neu geöffneten Fenster wählen Sie unter dem Zahnrad die Bereitstellungsoption „Web-App“.

Tragen Sie nun eine Beschreibung ein und ändern Sie das Zugriffsrecht auf „Jeder“. Im nächsten Schritt wird Ihnen eine „Bereitstellungs-ID“ angezeigt. Dabei handelt es sich um den API-key, über welchen der ESP später auf die Daten zugreifen kann. Dieser muss dann in den Quellcode eingefügt werden. Um das Script zu testen, können Sie den darunter stehenden Link öffnen. Daraufhin sollten die Termine der nächsten 14 Tage mit Start- und Enddatum mit einem Semikolon getrennt angezeigt werden.

Dieses Script liest die Termine nur aus einem Kalender aus. Wenn Sie mehrere Kalender anzeigen lassen wollen, müssen Sie den Block kopieren und mit geändertem Kalendernamen darunter einfügen. (Auf dem Display werden aber nur die ersten 4 Termine der Kette angezeigt).

Falls Sie weitere Daten aus Ihrem Kalender lesen wollen, finden Sie die nötigen Informationen in den Google Developer Docs.

2 Arduino IDE/Platform IO

Arduino IDE

Zuerst müssen Sie noch die zugehörigen Libraries installieren:

ArduinoJSON

HTTPSRedirect

GxEDP2

AdafruitGFX

Falls Sie zum ersten Mal einen Mikrocontroller mit ESP8266 Prozessor programmieren, müssen Sie noch die folgende Zeile unter Preferences in das Boardverwalter-Url Feld kopieren: http://arduino.esp8266.com/stable/package_esp8266com_index.json. Installieren Sie im Anschluss über den Boardmanager das ESP8266 Paket.

Platform IO

Kopieren Sie folgende Zeilen in die platformio.ini Datei ihres Projekts:

Der Sketch

Sketch Download

Als erstes werden die benötigten Bibliotheken und die mit der Display Library installierten Fonts (Schriftarten) eingebunden.

Im Anschluss werden structs für die einzelnen Termine und deren Zeit erstellt. Diese werden dann in Form einer Liste mit vier Elementen gespeichert.

Danach werden Variablen für den Zeilenumbruch bei längeren Namen und für das Netzwerk initialisiert.

Nun erstellen wir Objekte für den WiFiClient, welcher später für das Lesen der Daten vom Server verwendet wird und ein Objekt für das Display. Sollte ihr Display nicht funktionieren (ältere Version), wählen Sie einen anderen Treiber aus der Liste, indem Sie die Kommentarzeichen der Zeile entfernen.

Im Folgenden können Sie die Farben des Titels, der Terminnamen und der Terminzeit, sowie den Titel festlegen.

Im setup() wird lediglich das Display und die Status LED initialisiert.

Im loop() verbindet sich der ESP zuerst mit dem WLAN, während dessen blinkt die Status LED. Ist nach 20 Sekunden immer noch keine Verbindung aufgebaut, wird der ESP neugestartet. Nach erfolgreicher Verbindung wird das Display unter Verwendung der Methode displayEvent() beschrieben.

Folgende Methode baut eine Verbindung zum Server auf, liest die Daten in Form eines String und extrahiert durch den Aufruf von extractData() die einzelnen Daten (Startzeit, Name, Endzeit).

In der nächten Funktion wird nach den Semikolons gesucht, welche die einzelnen Daten trennen und diese Daten anschließend als String in der Liste, in den zugehörigen Elementen, gespeichert.

Die folgende Methode liest aus dem String, welcher die Zeit speichert, die Minute, Stunde, den Tag und den Wochentag heraus und speichert diese im struct Time der einzelnen Elemente.

Die Methode convDayName() wandelt den englischen Wochentagsnamen in den deutschen um.

displayEvent() wird in der loop() Funktion aufgerufen, um das Event mit dem übergebenen Index auf dem Display anzuzeigen.

Die folgende Methode wird aufgerufen, um eine Störung über die Status LED anzuzeigen:

Zusammenbau und Bedienung

Drucken Sie das Gehäuse mit einem 3D-Drucker aus und pressen Sie mit einem heißen Lötkolben die Schmelzgewinde (M3) in die vorgesehenen Löcher. Zuletzt kleben Sie das Board mit der USB-Buchse in der Aussparung an und schrauben das Display zuletzt mit den passenden Schrauben von außen fest.

Nachdem Sie eine Stromversorgung angeschlossen haben, werden auf dem Display nun automatisch jede Stunde die nächsten vier Termine angezeigt. Nach Betätigung des Tasters werden die Termine sofort aktualisiert. Das Display wird während des Beschreibens mehrfach aufblinken. Dies ist normal, dabei werden die Farbkapseln im Display ausgerichtet.

Viel Spaß beim Nachbauen :)

DisplaysEsp8266Projekte für anfänger

12 Kommentare

Bastian Brumbi

Bastian Brumbi

@sven
Bitte überprüfen Sie, ob der Inhalt in der Antwort des Google Servers im Richtigen Format vorliegt (tStart; Titel; tEnd). Da die extract Funktion mit dem Modulo Operator arbeitet ist dies für die Reihenfolge von Bedeutung.
@tom
Wenn Sie über den Link die Antwort des Servers erhalten, sollte die URL stimmen. Überprüfen Sie, dass der Host und Path in den separaten Variablen getrennt sind. Leerzeichen am Anfang oder Ende könnten auch zu einem Fehler führen.

Tom

Tom

Hallo,
ich brauche auch ein wenig Hilfe:
Verbindungsaufbau klappt, aber das “client→Get” erzeugt den (HTML-)Fehler 404.
Das Script konnte ich mit der URL, die AppsScript zur Verfügung stellt, testen. Soweit scheint das in Ordnung zu sein. Ich habe die ID mehrfach überprüft.
Hat noch jemand einen Tipp für mich?
Danke

Sven Lorenzen

Sven Lorenzen

Hi @all,
leider funktioniert es bei nicht richtig, es wird mir nicht der Terminname (event) angezeigt, der Tag und Zeit ist auch nicht ganz richtig. Bei mir steht Fr; 20:15 – ;0 0:0 die Endzeit wird nicht angezeigt und nur 1 Termin obwohl mehr vorhanden sind.
Wenn ich den Link von WebApp aufrufe werden mir im Browser alle Termine angezeigt mit Terminname und der Startzeit/Endzeit.
Ausführen als
Ich
Zugriffsberechtigte
Jeder

Könnt ihr mir helfen ?

Danke im vorraus

Gruß Sven

Eckmar Schmitz

Eckmar Schmitz

Ich habe ein Problem mit der Google Schnittstelle.
Es folgen nach dem ersten GET mit den bereitgestellten Daten von Google weitere Redirection und zwar von:
Host: script.google.com
GET /macros/s/key/exec nach
redirHost: accounts.google.com
GET /ServiceLogin?passive=xxxxx&continue=….. nächstes redir
GET /InteractiveLogin?continue=…….. nächstes redir
GET /v3/signin/identifier?continue=….. danach Status code: 200
Dann wird ein Cookie von 335324 Bytes geschickt. Dann wird die HTTPSRedirect verlassen aber es werden in der readCalendar Funktion mit getResponseBody keine Daten empfangen.
Ich habe das Ganze mal kurz als Windows Form App in .Net geschrieben. Dort läuft es ohne Probleme.

Reimund

Reimund

Hallo wie druckt man denn das Gehäuse ? Mit Support?

Henry

Henry

Korrektur, man muss natürlich etwas in den Kalender eintragen, dann kommt etwas.
Die Berechtigung muss aber erteilt werden.

Jetzt muss nur noch der “richtige” Kalender laufen.

cu

Henry

Henry

Hallo,
auch bei einem neu angelegtem Kalender erfolgt diese Abfrage, da dies ja noch nichts mit dem Kalendernamen zu tun hat.
Zugriffsberechtigte “jeder” kann nur bei ausführen als “ich” ausgewählt werden.
Nach → weiter kommt die Abfrage.
Auch nach zulassen des Zugriffes der Webapp auf den Kalender kommen mit der URL keine Daten.

cu

Bastian Brumbi

Bastian Brumbi

Sehr geehrter Leser,
erstellen Sie einfach wie unter Punkt 1 beschrieben einen neuen Kalender auf der Google Calendar Website. Hier müssen Sie einen Namen für den Kalender eintragen, diesen Namen tragen Sie in die Google Script Datei anstatt Test ein. Eine weitere Autorisierung ist hier nicht notwendig.
Ich hoffe ich konnte ihnen Weiterhelfen.
Grüße,
Bastian Brumbi

Henry

Henry

Ganz so einfach wie beschrieben ist es nicht.
Wo findet man denn den korrekten Kalendernamen von Google, der statt (test) eingetragen werden muss?
Und “jeder” funktioniert auch nicht wie beschrieben, hier muss anschließend autorisiert werden, nur wie?

cu

Andreas Wolter

Andreas Wolter

If you use the download, it should work. The original source code on the homepage may have been changed during translation.

Best regards,
Andreas Wolter
AZ-Delivery Blog

laatste

laatste

use the code from the german language page because the the english translation makes a mess of the original code.

Rob Versteden

Rob Versteden

The code to copy has several flaws. Use the printed one to correct it before implementing. I guess you have used an overactive spelling corrector.
But it’s a nice project!

Kommentar hinterlassen

Alle Kommentare werden von einem Moderator vor der Veröffentlichung überprüft

Empfohlene Blogbeiträge

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery