Zaterdagmiddagproject: 128×128 pixel SPI TFT LCD scherm voor Arduino

20160116_153712_NormalAls zaterdagmiddagproject vandaag weer eens iets waarvan de titel vast geen duizenden views gaat trekken. Ik had afgelopen week een klein LCD-schermpje binnen gekregen. Het is 1.44 inch groot en heeft een resolutie van 128×128 pixel. Een resolutie van 2x niks zou je zeggen, maar ja het schermpje kost dan ook €2,98 incl. verzendkosten. En als je een ESP8266 gebruikt en alleen maar even wat statusinformatie wilt laten tonen, dan heb je helemaal niet veel nodig.

De uitdaging bij dit soort schermpjes is altijd het vinden van de juiste aansluitingen voor de vaak vele pins die zo’n scherm heeft, deze heeft er 8 én het vinden van de juiste library voor Arduino / ESP8266. Ik noem die laatste twee overigens wel in één adem, maar ook hier is het zo dat er nét een beetje verschil zat tussen hoe je e.e.a. zou moeten doen op een “echte” Arduino versus een ESP8266.

Op de foto hier bij het bericht zie je het eindresultaat met naast het LC scherm en de ESP8266 aan de rechterkant een DHT11 die luchtvochtigheid en temperatuur meet.

Als library heb ik gebruik gemaakt van deze library van “sumotoy” (Max MC Costa uit Milaan, Italië) . Belangrijk daarbij is dat het hier dan gaat om de “Pre-Release-1.0r4” (mogelijk werkt 1.0r5 ook, maar die heb ik niet getest). De “master” branch heeft namelijk nog geen ondersteuning voor de ESP8266.

De 8 aansluitingen stonden daar ook netjes aangegeven:

TFT kant   -------- ESP8266  
- Vcc       -->     +3V3V(!!!!)
- Gnd       -->     Gnd
- CS        -->     D0
- RST       -->     D2
- A0        -->     D1
- SDA       -->     Mosi (D7)
- SCK       -->     Sclk (D5)
- LED       -->     +3V3V

Ik heb voor mijn scherm geen weerstand aangesloten al zou een regelbare weerstand hier helemaal niet verkeerd zijn geweest omdat het scherm nu nog ernstig last heeft van licht “bleed” om de randen heen. You get what you pay for zullen we maar zeggen al ga ik er even vanuit dat dat weg valt als je het schermpje in een enclosure opneemt.
De library heeft een groot aantal voorbeelden aan boord, daarbij moet je even opletten dat bij de ESP8266 de 3 #define statements voor de poorten in de scripts moet zijn:

#define __CS 16
#define __DC 5
#define __RST 4

Dat is niet in alle voorbeelden meteen zo, dus dat moet je dan even aanpassen.
Daarnaast kreeg ik eerst boven in het venstertje een balk met ruis te zien. Ik gok dat het ongeveer 32 pixels hoog was. De library is namelijk geschikt voor verschillende schermpjes en Sumotoy heeft zelf blijkbaar een aantal schermpjes die 128×160 pixels zijn. De oplossing was eenvoudig. In de library map zit ook een map genaamd “_settings” met daarin een bestand genaamd “TFT_ILI9163C_settings.h”. In dat bestand staan bovenin een aantal #define statements. Je moet hier de voor jou juiste kiezen. Standaard is “#define __144_RED_PCB__//128×128” gekozen en omdat ik een rode PCB had zou dat moeten kloppen. Maar het bleek dat in mijn geval “#define __144_BLACK_PCB__//128×128” het gewenste effect gaf.

Toen ik genoeg gespeeld had met het schermpje zelf was het een kwestie van het toevoegen van de voor mij reeds bekendere onderdelen: de DHT11 en de verbinding met de MQTT server.
Daarvoor had ik inmiddels geleerd hoe ik gebruik kan maken van een heel mooie library: WiFiManager. Die library zorgt er namelijk voor dat ik niet langer informatie over het wifi-netwerk en de MQTT-server in de code van de ESP8266 zelf hoef te hardcoden. Met name de informatie van het wifi-netwerk is erg onhandig, want ik moet er dan én aan denken dat ik die info er uit haal als ik de code online zet én als ik de ESP8266 aan een ander netwerk zou willen hangen, dan moet ik de code helemaal verversen.

Nu zorgt WifiManager er voor dat er eerst gekeken wordt of de ESP8266 al info over het wifi-netwerk in zijn geheugen heeft, zo ja, dan probeert hij verbinding te maken met dat netwerk. Is die info er niet of lukt het verbinden niet, dan start de ESP8266 een eigen netwerk op. Daar kan ik dan met bv mijn iPad verbinding mee maken en dan krijg ik een scherm waar ik die info alsnog kan invullen.20160116_185435000_iOS Daarna slaat de ESP8266 die info op in zijn vaste geheugen en start opnieuw op.

Het eindresultaat is nu dus een slimme thermometer (en vochtmeter) die verbinding maakt met de wifi hier in huis, de info op een LCD schermpje laat zien én upload naar mijn MQTT-server waar het dan weer uitgelezen wordt door OpenHab, het systeem dat ik gebruik voor het aansturen van alles wat met domotica te maken heeft hier in huis.

Nu het werkt rest me eigenlijk alleen het op een prototypingboard overzetten van de constructie, de verbindingen solderen, een enclosure maken en in gebruik nemen.  Dat is nog een zaterdag werk.

De code die ik gebruik kun je hier vinden.

0 0 stemmen
Bericht waardering
1 Reactie
Inline Feedback
Bekijk alle reacties
trackback

Zaterdagmiddagproject: 128×128 pixel SPI TFT LCD scherm voor Arduino https://t.co/stHsaOaHT6