abonneren

E-ink-scherm op Arduino aansluiten

E-ink-scherm op Arduino
Door een e-ink-scherm op een Arduino aan te sluiten, kun je een hoop energiezuinige toepassingen bedenken. E-inkt trekt immers minder stroom dan een lcd-display. In dit artikel leggen we uit hoe je ze aan elkaar koppelt.

Lees hier eerst welke onderdelen je nodig hebt. We leggen nu uit hoe je een e-ink-schermpje van Waveshare met een diagonaal van 1,54 inch op een ESP-12E (ESP8266) aansluit. Met een Arduino Due werkt dit hetzelfde, maar dan zijn de aansluitingen net iets anders. Steek eerst de connector van de acht-aderige kabel in de socket op het controllerbordje van Waveshare. Zorg dat het klepje in de socket aan de andere kant open is, schuif de platte kabel van je e-ink-schermpje erin, met de lichte zijde waarin je de afzonderlijke lijnen van de interface ziet naar boven.

Verzeker je ervan dat de kabel er recht in zit, en druk dan het klepje dicht. Dat vereist wel kleine vingers. Plak daarna het schermpje met dubbelzijdige plakband of een beetje lijm op de achterkant van het controllerbordje. De platte kabel draait daardoor 180 graden, maar daar is het flexibel genoeg voor.

Nu moet je de acht kabeltjes op de Arduino aan te sluiten. Dat doe je volgens onderstaande tabel. Kijk goed na of je alles correct hebt aangesloten, zodat je niet per ongeluk je e-ink-scherm kapotmaakt bij het inschakelen.

E-ink-scherm op Arduino

Bibliotheken installeren

Om iets op het schermpje te tonen, maken we gebruik van de bibliotheek GxEPD, die allerlei e-ink-schermpjes van Waveshare en Good Display ondersteunt. Download een zip-bestand van de bibliotheek.

Heb je Arduino IDE nog niet geïnstalleerd, download deze dan en installeer deze ontwikkelomgeving. Start dan de Arduino IDE en open het menu Schets / Bibliotheek gebruiken / .ZIP Bibliotheek toevoegen. Selecteer het zip-bestand en klik op OK, waarna de Arduino IDE de bibliotheek in de map libraries van je Arduino-omgeving opslaat.

Ga dan naar het menu Schets / Bibliotheek gebruiken / Bibliotheken beheren..., zoek naar de Adafruit GFX Library en installeer die. Dat gaf bij ons een foutmelding, download in zo’n geval dit zip-bestand van en installeer dit op dezelfde manier als de GxEPD-bibliotheek.

E-ink-scherm op Arduino

Schermpje testen

Om het schermpje te testen, pas je de voorbeeldcode GxEPD_SPI_TestExample uit de GxEPD-bibliotheek aan. Open het ino-bestand in de Arduino IDE (zie afbeelding 6). In de commentaarregels in het begin van het bestand vind je nog eens de uitleg over hoe je het schermpje op diverse microcontrollerbordjes aansluit. Onder de commentaarregel

// select the display class to use, only one

vind je diverse include-opdrachten, op één na voorafgegaan door commentaartekens (//). Haal de commentaartekens weg bij de include-opdracht voor jouw schermpje en voeg de commentaartekens toe aan de standaard ingeschakelde include-opdracht. Voor het 1,54inch-schermpje van Waveshare blijft er dus deze include-opdracht over:

#include <GxGDEP015OC1/GxGDEP015OC1.cpp> // 1.54" b/w

In het README-bestand van de GxEPD-bibliotheek op GitHub vind je nog eens bevestigd welke klasse je nodig hebt voor jouw schermpje.

Na deze aanpassing sluit je de Arduino via usb aan op je pc, kies je indien nodig in het menu Hulpmiddelen nog de juiste poort en instellingen voor je microcontrollerbordje en klik je dan op het knopje Uploaden. Als alles goed gaat, uploadt de Arduino IDE nu het voorbeeldprogramma naar je Arduino. Wanneer dat is voltooid, krijg je achtereenvolgens wat afbeeldingen op je e-ink-schermpje te zien.

E-ink-scherm op Arduino

Temperatuursensor aansluiten

Om iets nuttigs op het e-ink-schermpje te tonen, sluiten we op onze ESP-12E een BMP180 aan, dat is een temperatuur- en luchtdruksensor. Zorg dat de ESP-module niet op de voeding is aangesloten (!) en sluit de ESP-module en het BMP180-sensorbordje op elkaar aan zoals in onderstaande tabel.

Zoek in het menu Schets / Bibliotheek gebruiken / Bibliotheken beheren... van de Arduino IDE naar de Adafruit BMP085 Library en installeer die.

E-ink-scherm op Arduino

Includes en definities

Nu dit alles is aangesloten en we de benodigde bibliotheken hebben geïnstalleerd, is de code om de temperatuur van de sensor op het e-ink-scherm te tonen redelijk beperkt (zie afbeelding 8). We lichten in deze en de volgende paragraaf de werking ervan toe. Dit e-ink.ibestand is ook te downloaden via www.pcmweb.nl/download en daarna te openen in WordPad (niet Kladblok) of een betere editor zoals Notepad++.

In het begin komen veel include-opdrachten, waarmee we de juiste bibliotheken importeren.

Zo halen we met <Adafruit_BMP085.h> de code voor de BMP-sensor binnen en <Wire.h> hebben we nodig voor het I²C-protocol dat de BMP-sensor gebruikt voor de communicatie met de microcontroller. Daarna importeren we met <Fonts/FreeMonoBold18pt7b.h> een lettertype uit de Adafruit GFX Library, een vetgedrukt 18punts-monolettertype.

De andere include-opdrachten zijn allemaal nodig voor de GxEPD-bibliotheek. We verwijzen hier ook weer naar <GxGDEP015OC1/GxGDEP015OC1.cpp> omdat we het 1,54inch-scherm van Waveshare hebben aangesloten. Pas dit aan als je een ander scherm hebt.

Daarna definiëren we een object io voor de SPI-communicatie met de microcontroller en een object display op basis van dit object io, waarmee we het schermpje aansturen. Deze code is specifiek voor de ESP8266-gebaseerde controllerbordjes. Gebruik je een ander bordje, zoals een Arduino Due, kijk dan in de voorbeeldcode van de GxEPD-bibliotheek wat je ervoor in de plaats moet zetten. Tot slot definiëren we ook een object bmp voor de BMP-sensor en initialiseren we een getal lastCheck op 0. De betekenis daarvan wordt in de volgende paragraaf duidelijk.

E-ink-scherm op Arduino

Setup en loop

In de functie setup zitten slechts drie opdrachten die de ESP-12E ter initialisatie uitvoert zodra hij aan staat. We initialiseren de Wire-bibliotheek met GPIO9 als SDA en GPIO10 als SCL. Daarna initialiseren we het object bmp, zodat we er de temperatuur aan kunnen opvragen. En we initialiseren het e-ink-scherm.

Daarna wordt de functie loop continu uitgevoerd door de microcontroller. We willen maar één keer per minuut de temperatuur tonen, dus we controleren met millis het huidige aantal milliseconden dat de controller aan staat en vergelijken dit met de vorige keer. Als het verschil groter is dan 60.000, is er een minuut voorbij en slaan we het huidige aantal milliseconden in de variabele lastCheck op.

We tonen dan ook de temperatuur op het scherm. Daarvoor roteren we eerst het scherm zodat het juist staat, we vullen het scherm met de achtergrondkleur wit en we stellen als tekstkleur zwart in. We stellen dan het gewenste lettertype en lettergrootte in en positioneren de cursor. Daarna lezen we de temperatuur van de BMP-sensor uit en schrijven die naar het scherm. Tot slot roepen we display.update() aan om al deze wijzigingen naar het scherm te schrijven. Het resultaat? Je scherm wordt elke minuut geüpdatet met de temperatuur.

Voorbeeldcode

De voorbeeldcode die bij de GxEPD-bibliotheek zit, is tot slot een goudmijn aan informatie over de mogelijkheden met e-ink-schermpjes. Als je zelf je eigen projecten met een e-ink-scherm wilt uitvoeren, raden we dan ook aan om deze code onder de loep te nemen. Je vindt er niet alleen in hoe je tekst op je schermpje toont, maar ook bitmap-tekeningen, inclusief voorbeelden op driekleurige schermpjes.

De bibliotheek heeft ook een functie om rechthoeken te vullen met een kleur, wat handig is om blokjes op het scherm te tekenen. En in de voorbeeldcode GxEPD_SPI_IconGrid_Example zie je hoe je icoontjes op het e-ink-scherm toont. Handig als je er een soort dashboard van wilt maken. GxEPD komt met zijn eigen bibliotheek imglib, dat meer dan 160 monochrome icoontjes definieert om een eigen GUI mee te maken.

Geschreven door: Koen Vervloesem op

Category: Workshop, Hardware

Tags: arduino, DIY