Adventskalender auf dem AZ-Touch - AZ-Delivery

In de blog van vandaag willen we de AZ-Touch-module zo programmeren dat deze kan worden gebruikt als adventskalender met dagelijkse uitspraken of grappen om uw pre-kersttijd gevarieerder te maken.

In dit geval is de inhoud achter elke “deur” geen chocolade, maar kan deze door u worden aangepast, zodat u een persoonlijke adventskalender kunt maken.

Hardware

Het enige wat je nodig hebt is:


 een AZ Aanraakset (2,8 inch aanbevolen)

en een ESP32 DevKit C

 

Om het project succesvol te kunnen implementeren, hoeft u nu alleen nog maar de AZ-Touch te gebruiken, zoals in de Instructies zoals beschreven, monteer en steek de microcontrollerkaart in de contactstrips.

 

Software

De adventskalender moet eerst het deurnummer weergeven en vervolgens de opgeslagen tekst na aanraking van het scherm.
Sinds de ESP32 Wroom 32 over 4 MB Als het flash-geheugen heeft, kunnen de 24 teksten rechtstreeks in het programma worden opgeslagen.

 

Bestuurder

Als dit de eerste keer is dat u een ESP32 in de Arduino IDE programmeert, kopieert u de volgende link in de Arduino IDE op:
Bestand->Voorkeuren->URL's voor extra bordenbeheer:  https://dl.espressif.com/dl/package_esp32_index.json

en installeer het ESP32-pakket in het bordbeheer.

 

Het stuurprogramma (CP2102) voor dit bord is al door het besturingssysteem geïnstalleerd.

Bibliotheken

Vervolgens moeten de vereiste bibliotheken worden geïnstalleerd:

TFTeSPI is vereist om het display te bedienen.

NTP-client levert altijd de actuele datum via een ntp-server.

 

De bibliotheken kunnen worden gedownload als .zip met behulp van de bovenstaande links en worden toegevoegd in de Arduino IDE onder Sketch>Include Library>Add .ZIP Library…. Als alternatief kan dit eenvoudig worden gedaan met behulp van de bibliotheekmanager die in de Arduino IDE is geïntegreerd.

 

Codeer

Vervolgens komt het stapsgewijze programmeren van de microcontroller.

Om te beginnen hebben we een programma nodig dat het nummer van de huidige deur in het midden van het display weergeeft.

 

Om ervoor te zorgen dat de bibliotheek met het display kan communiceren, is een configuratie in de bibliotheek noodzakelijk.
De TFTeSPI-bibliotheek heeft de bijzondere eigenschap dat de gehele configuratie in één bestand wordt uitgevoerd. Dit UserSetup.h-bestand moet de volgende configuratie hebben voor de AZ-Touch Set:

#define USER_SETUP_INFO "User_Setup"

#
define ILI9341_DRIVER       // Generic driver for common displays

#
define TFT_RGB_ORDER TFT_BGR  // Colour order Blue-Green-Red

#
define TFT_WIDTH  320
#
define TFT_HEIGHT 240

#
define TFT_MISO 19
#
define TFT_MOSI 23
#
define TFT_SCLK 18
#
define TFT_CS   5  // Chip select control pin
#
define TFT_DC    4  // Data Command control pin
#
define TFT_RST  22

#
define TFT_BL   15            // LED back-light control pin
#
define TFT_BACKLIGHT_ON LOW  // Level to turn ON back-light (HIGH or LOW)

#
define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#
define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes
#
define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.

#define SPI_FREQUENCY  27000000

 

Zodat u de inhoud niet volledig hoeft te kopiëren, kunt u dat ook doen hier downloaden.

 

Nu naar de daadwerkelijke methode, waarbij het nummer in het midden van het scherm moet worden weergegeven:

(In de volgende voorbeeldfragmenten ontbreken de bibliotheekintegratie en het maken van objecten via de constructor. Deze zijn weggelaten voor een betere duidelijkheid. Gebruik het definitieve programma om te testen!)

void showNumber(int number) {
  
String NumberS = (String) number;

  tft.fillScreen(TFT_BLACK);
  tft.setTextColor(TFT_RED);
  tft.setTextFont(
8);

  
int x = (tft.width()/2) - (tft.textWidth(NumberS, 8)/2);
  
int y = (tft.height()/2) - (75/2);
  tft.
setCursor(x, y);
  tft.
println(NumberS);
}

Uitleg:
In het begin wordt het aan het programma doorgegeven nummer omgezet in een tekenreeks (touwtje) omgezet (gieten).

Vervolgens wordt de weergave voorbereid door de pixels op zwart, de letterkleur op rood en het lettertype op 8 te zetten.

Vervolgens worden de coördinaten berekend. De X-coördinaat bestaat uit het verschil tussen de helft van de weergavebreedte en de helft van de tekstbreedte. De y-positie wordt beschreven door het verschil tussen de helft van de schermhoogte en de helft van de letterhoogte.

Tenslotte wordt het nummer via de berekende positie geplaatst println() opdracht weergegeven.

 

Het deurnummer kan nu in groot formaat op het display worden weergegeven. Vervolgens willen we via het programma de datum bepalen zodat we altijd de huidige deur kunnen weergeven.
Een RTC-module biedt hier een brede optie. Deze moeten echter handmatig via de software worden ingesteld en kunnen na verloop van tijd onnauwkeurigheden vertonen.
Omdat we in het project een ESP32 gebruiken, kan de WLAN-functie eenvoudig worden gebruikt om de huidige tijd en datum op te vragen via een zogenaamde NTP-server. Deze Network Time Protocol-server zijn gebaseerd op real-time klokken, zoals atoomklokken.
Voor de vereenvoudigde zoekopdracht is de NTP-client Bibliotheek kan worden gebruikt.

int day, mon;
void getDate() {
  timeClient.update();
  
time_t Time = timeClient.getEpochTime();
  
struct tm *ptm = gmtime ((time_t *)&Time);
  day = ptm->tm_mday;
  mon = ptm->tm_mon+
1;
}

Uitleg:

Eerst wordt de tijd bijgewerkt door de server. Daarna dit tijd Object uitgelezen en ingevoegd Structuur omgezet.

De dag en de maand worden vervolgens uit deze structuur gelezen en opgeslagen in de overeenkomstige globale variabelen.

 

Nu volgen ze instellen() functie en de lus() Routinematig:

void setup() {
  
Serial.begin(115200);
  
pinMode(TFT_BL, OUTPUT);
  
digitalWrite(TFT_BL, TFT_BACKLIGHT_ON);
  tft.init();
  tft.setRotation(
1);
  tft.fillScreen(TFT_BLACK);
 
  
Serial.println("Connecting...");
  
WiFi.begin(ssid, password);
  
while (WiFi.status() != WL_CONNECTED) {
    
delay(1000);
    
Serial.print(".");
    
if(millis() > 10000) ESP.restart();
  }

  timeClient.
begin();
}

void loop() {
  
if(!debug) getDate();
  
if(day != currDay) {
    currDay = day;
    tft.fillScreen(TFT_BLACK);
    
if(mon != 12) {
      tft.setTextFont(
4);
      tft.setTextColor(TFT_GREEN);
      tft.
setCursor(1050);
      tft.
println("Die Adventszeit beginnt in:");
      tft.setTextColor(TFT_ORANGE);
      tft.
setCursor(140100);
      tft.
println(12-mon);
      tft.setTextColor(TFT_GREEN);
      tft.
setCursor(90150);
      tft.
println("Monaten!");
    }
    
else {
      
if(day > 0 && day <= 24) {
        showNumber(day);
        
while(digitalRead(27)) {
        }
        tft.fillScreen(TFT_BLACK);
        tft.setTextFont(
4);
        tft.setTextColor(TFT_ORANGE);
        tft.
setCursor(0,10);
        tft.
println(content[day]);
      }
      
else {
        tft.setTextColor(TFT_GREEN);
        tft.setTextFont(
4);
        tft.
setCursor(10100);
        tft.
println("Die Adventszeit ist zuende.");
      }
     
    }
  }
 
  
delay(5000);
}

Uitleg:
In instellen() de initialisatie vindt plaats seriële interface, ont Beeldschermen, ont WiFi en ont tijdKlanten (NTP).

In de lus() Routinematig wordt eerst de datum opgevraagd en op basis van het onderscheid tussen de gevallen wordt ofwel afgeteld naar Advent, ofwel, als de maand overeenkomt met december en de dag tussen 1 en 24 ligt, het bijbehorende deurnummer weergegeven. showNummer() Functie.
Het touchscreen heeft een interrupt-pin, die bij indrukken naar LAAG schakelt. Dit betekent dat het aanraken van het scherm eenvoudig kan worden gedaan zonder extra software digitaalLezen() vraag kan worden gecontroleerd.
Na aanraking verschijnt de inhoud op het display met de tekst uit een array String-elementen gevuld. Om ervoor te zorgen dat langere teksten kunnen worden weergegeven, is het startpunt hier ingesteld op 0:0, d.w.z. de linkerbovenhoek. Het regeleinde wordt dan automatisch voortgezet op de volgende regel.

 

Je kunt het hele project doen hier downloaden.

Om het op de microcontroller te laden, selecteert u in de Arduino IDE:
Gereedschappen > Bord > esp32 > ESP32-ontwikkelaarsmodules

en dan de juiste seriële poort.

Als er meerdere poorten verschijnen, koppelt u de microcontroller los en sluit u deze opnieuw aan. De nieuwe poort die verschijnt is die van de microcontroller.

 

Voor gevorderde gebruikers:
Kun je de signaalgenerator vooraf in de AZ-Touch installeren om kerstmuziek af te spelen terwijl je wacht tot een display wordt aangeraakt?

 

TIP: Gebruik ze Toonopdrachten op pin 21. [toon(21, 1000, 100);]

            Voor complexe melodieën is de TinyRTTTL-bibliotheek een eenvoudige oplossing.

 

Conclusie:

In dit project heb je vanuit een AZ-Touch-module een adventskalender gebouwd, die je elke dag kerstuitspraken, grappen of gepersonaliseerde teksten kan laten zien.
Nu is het tijd om inhoud voor elke dag te verzamelen!

 

Uiteraard heb je nog meer ruimte voor creatieve softwarewijzigingen, waardoor de adventskalender nog persoonlijker wordt! :)

 

Veel plezier met het repliceren :)

DisplaysEsp32Projekte für anfänger

Laat een reactie achter

Alle opmerkingen worden voor publicatie gecontroleerd door een moderator

Aanbevolen blogberichten

  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