HX8357c display en driver

Als TFT-scherm wordt gebruik gemaakt van een HX8357C aangedreven 480 x 320 pixels scherm, echter zonder touchscreen.

De TFT-driver Bascom-AVR code is van Heiko Kipnik. Ik had mijn eerste stappen gezet om het HX8357C display aan te sturen en kon wat tekst en wat plaatjes op het scherm toveren. Een dag later kreeg ik van Heiko een complete library toegestuurd, die ik met zijn toestemming in het Bascom-AVR forum heb gezet. Hij had daarbij een goede structuur bedacht.

weerstation
weerstation/TFTDriver
weerstation/Avr-Dos
weerstation/Font
weerstation/Data
weerstation/Bilder

In /Bilder de gebruikte icoontjes op het ‘huidig’ weer scherm. Deze zijn her en der van het internet geplukt om vervolgens omgezet te worden naar BGF formaat plaatjes. Het Bascom Graphic Format (RLE-formaat).

In /Avr-Dos de bestanden die je nodig hebt wil je de SD-card op het HX8357 display gebruiken.

In /Font de gebruikte fonten bij dit weerstation
$include “Font\Digital20x32.font” ‘7 segments
$include “Font\font12x16.font”
$include “Font\font25x32.font”

Het digital20x32 font zijn de 7 segments cijfers. Font12x16 is de reguliere tekst en font25x32 is een beperkt font dat gebruikt wordt om de windstreken in letters zichtbaar te maken.

Heiko heeft verder een enorme lijst gemaakt van kleuren voor dit display. 140 kleuren om precies te zijn, die ook allemaal een naam hebben. Zo kom je in de Bascom-AVR code de kleurnamen ‘Crimson’, ‘FloralWhite’ en ‘Dodgerblue’ tegen.

Diverse schermen

Weekoverzicht luchtdruk

Weekoverzicht ozon

Weekoverzicht zonsop- en zonsondergang

Weekoverzicht luchtvochtigheid

Weekoverzicht temperatuur minimaal en maximaal

Weekoverzicht windsnelheid en windrichting

Weekoverzicht neerslagkans en neerslagvorm

Zichtbaarheid. Uit de lijst met regels met weergegevens komt slechts één waarde voor zichtbaarheid.

Weekoverzicht maanfase

Weekoverzicht bewolking

Diverse combinaties

Middels het script/Bascom-AVR code is een volgorde aan te geven waarop de gegevens op het scherm moeten verschijnen. Elk Get-commando is een Call naar Darksky.net en je dient er rekening mee te houden dat je onder de 1000 calls per dag blijft. Omdat het script zo flexibel is kun je in 1 sessie van meerdere locaties de weergegevens opvragen. Zo is er iemand die graag de gegevens van ‘thuis’ wil hebben, maar ook de gegevens waar zijn ‘zeilboot’ ligt, zodat hij in kan grijpen bij storm of ijs.

Stuur je een andere GPS latitude en longitude, dan kun je vrij eenvoudig de weergegevens, maar ook de weekgegevens opvragen van een andere locatie. In dit geval Curaçao. En je kunt de schermen af laten wisselen door zoveel locaties als je zelf wilt, rekening houdend met de maximaal 1000 calls per dag.

Eventcaster.nl

We hebben het over Darksky.net gehad maar op het scherm staat Eventcaster.nl??? Het opvragen van de weergegevens bij Darksky.net dient te gebeuren middels het HTTPS protocol. Dat werd indertijd nog niet ondersteund door de ESP-wireless module. Dus is er een server tussen geplaatst, tussen je eigen locatie en Darksky.net waarnaar een HTTP GET kan worden gestuurd en deze stuurt een HTTPS door naar Darksky.net. Tevens zorgt een Python programma op deze server dat het JSON-bestand dat vanaf Darksky.net wordt gestuurd in een goed te verwerken formaat wordt geplaatst en er wordt tevens een huidige datum en tijd boven geplakt. Verder zijn er twee versies van gegevens die kunnen worden opgevraagd, een V1 versie met daarin alle huidige weergegevens en een V2 versie met naast de huidige weergegevens ook de voorspelling voor de komende week. In Weerstation 4.o wordt gebruik gemaakt van deze V2 versie.

In Arduino C code in de ESP-wireless module, wordt de volgende URL gevormd waarin de diverse onderdelen zijn te herkennen

String url = “/api/weather/v2.py?apikey=”+apiKey+”&lat=”+latitude+”&lon=”+longitude+”&lang=en”;

Je ziet terug API-key, GPS latitude, GPS longitude en verder dat versie V2 moet worden gegenereerd.

Hier een voorbeeld van windsnelheid en windrichting van de komende week. De windrichting is officieel een getal van 0 tot 360, maar deze wordt in de Bascom-AVR code omgezet naar een windrichting in letters.

 

Globale werking van het weerstation

Het initiatief om weergegevens op te vragen komt vanuit de Bascom-AVR code op de Arduino Mega. Deze stuurt naar het ESP8266 shield het SSID van het wireless Access Point waarmee verbinding moet worden gemaakt, een eventueel wachtwoord hier voor, daarna wordt er een poging gedaan om een verbinding op te bouwen. Is dit gelukt dan volgen de GPS-coördinaten van de locatie waarvan de weergegevens moeten worden opgevraagd. En als laatste een unieke API-key. Deze API-key dient te worden aangevraagd bij www.darksky.net (voorheen forecast.io). Met deze gegevens is het mogelijk om kosteloos per dag 1000 keer de weersvoorspelling op te vragen.

Hier een voorbeeld van een stukje script/Bascom-AVR code om de ESP8266 van informatie te voorzien

Print “SID=AirPort Extreme”
Call Lcd_text( “Airport Extreme” , 5 , 60 , 1 , Crimson , Black , 1)
Wait 1
Print “PSW=GEHEIMWOORD”
Wait 1
Print “CMD=WiFi.connect”
Call Lcd_text( “WiFi.connect” , 5 , 80 , 1 , Crimson , Black , 1)

(hier is weggelaten de controle of het verbinding maken gelukt is)

Location = “Tilburg”
Wait 1
Print “API=fe2635f<dummy-key>525b0cd872e”
Wait 1
Print “LON=5.00”
Call Lcd_text( “Longitude: 5.00” , 5 , 120 , 1 , Crimson , Black , 1)
Wait 1
Print “LAT=51.5”
Call Lcd_text( “Latitude: 51.5” , 5 , 140 , 1 , Crimson , Black , 1)
Wait 1
Print “CMD=GetPrecip”
Call Lcd_text( “Fetching weather info” , 5 , 160 , 1 , Crimson , Black , 1)
Call Parse_precip_weatherinfo

Het kunnen volgen van het verbinding maken met het Access Point, om vervolgens GPS-coördinaten door te geven en weergegevens op te vragen.

Dit stukje script zorgt er voor dat we een weekoverzicht krijgen van de neerslagkans en neerslagtype (regen, sneeuw e.d.) van de locatie Tilburg.

De commando’s die gegeven kunnen worden zijn:

GetWeather – huidig weer, diverse gegevens
GetPressure – weekoverzicht luchtdruk
GetHumidity – weekoverzicht luchtvochtigheid
GetMoonphase – weekoverzicht van de maanfase
GetCloudcover – weekoverzicht van het percentage bewolking
GetOzone – weekoverzicht van de Dobson ozonwaarde
GetTemperature – weekoverzicht minimum en maximum temperatuur
GetWind – weekoverzicht windsnelheid en windrichting
GetVisibility – 1 regel met daarin de huidige ‘visibility’
GetPrecip – weekoverzicht van kans op neerslag en in welke vorm
GetSun – weekoverzicht van de zonsopgang en zonsondergang

Flashen van het ESP8266 shield

Het flashen van het ESP8266 shield gebeurt vanuit de Arduino IDE. De onderliggende Arduino Mega verzorgd de voedingsspanning van het ESP8266 shield, dus daar moet een USB-kabel in. Om te zorgen dat de ESP8266 zijn bootloader start om vervolgens te wachten op de hex-file, dient het USER knopje ingedrukt gehouden te worden, gevolgd door kort indrukken van de RESET (RST). Daarna kun je het USER knopje loslaten. Hierna kan vanuit de Arduino IDE het programma gecompileerd worden en ge-upload naar het ESP8266 shield.

 

Arduino IDE. Linker bovenste knop is om het programma te compileren, de knop er naast (nu geel) is om het programma te compileren en te uploaden. Lukt het uploaden dan verschijnen er rode puntjes onderin het scherm. Wanneer het programma geladen is zal de ESP8266 module staan wachten op commando’s vanuit de Arduino Mega. Mocht die geladen zijn met de hex-file dan kunnen beide schakelaars op het blauwe blokje om en kun je de Arduino Mega een reset geven. Heb je je USB-converter er nog aan hangen, dan kun je op de rechter button in de Arduino IDE klikken waardoor een eenvoudig terminal programma wordt gestart. Deze moet op 9600 baud staan en daarna kan alle communicatie tussen de Arduino Mega en de ESP8266 gevolgd worden.

XLoader

russemotto.com/Xloader

Wanneer je geen Bascom-AVR hebt, kun je een aangeleverde hex file uploaden naar de Arduino Mega met het programma XLoader. Het enige dat je hoeft te doen is de Arduino Mega van een USB-kabel te voorzien en de juiste COM port kiezen.
Is het ESP8266 shield geplaatst, zorg er dan voor dat beide schakelaars op het blauwe blokje zijn uitgeschakeld!!