Adventskalender auf dem AZ-Touch - AZ-Delivery

Dans le blog d'aujourd'hui, nous souhaitons programmer le module AZ-Touch afin qu'il puisse être utilisé comme calendrier de l'Avent avec des dictons ou des blagues quotidiennes pour rendre votre période d'avant Noël plus variée.

Dans ce cas, le contenu derrière chaque « porte » n’est pas du chocolat, mais peut être personnalisé par vous selon vos envies pour créer un calendrier de l’Avent personnel.

Matériel

Tout ce dont vous avez besoin est :


 un Ensemble tactile AZ (2,8" recommandé)

et un Kit de développement ESP32 C

 

Pour que vous puissiez mettre en œuvre le projet avec succès, il vous suffit désormais d'utiliser l'AZ-Touch, comme dans le Instructions décrit, assemblez et branchez la carte du microcontrôleur dans les barrettes de prises.

 

Logiciel

Le calendrier de l'Avent doit d'abord afficher le numéro de la porte, puis le texte enregistré après avoir touché l'écran.
Depuis le ESP32 Salle 32 à propos 4 Mo S'il dispose d'une mémoire flash, les 24 textes peuvent être stockés directement dans le programme.

 

Chauffeur

Si c'est la première fois que vous programmez un ESP32 dans l'IDE Arduino, copiez le lien suivant dans l'IDE Arduino à l'adresse :
Fichier->Préférences->URL du gestionnaire de cartes supplémentaires :  https://dl.espressif.com/dl/package_esp32_index.json

et installez le package ESP32 dans l'administration de la carte.

 

Le pilote (CP2102) de cette carte est déjà installé par le système d'exploitation.

Bibliothèques

Ensuite, les bibliothèques requises doivent être installées :

TFTeSPI est nécessaire pour contrôler l’affichage.

Client NTP fournit toujours la date actuelle via un serveur NTP.

 

Les bibliothèques peuvent être téléchargées au format .zip en utilisant les liens ci-dessus et ajoutées dans l'IDE Arduino sous Sketch> Inclure la bibliothèque> Ajouter une bibliothèque .ZIP…. Alternativement, cela peut facilement être fait en utilisant le gestionnaire de bibliothèque intégré à l'IDE Arduino.

 

Coder

Vient ensuite la programmation étape par étape du microcontrôleur.

Pour commencer, nous avons besoin d'un programme qui affiche le numéro de la porte actuelle au milieu de l'écran.

 

Pour que la bibliothèque puisse communiquer avec l'afficheur, une configuration dans la bibliothèque est nécessaire.
La bibliothèque TFTeSPI a la particularité que toute la configuration est effectuée dans un seul fichier. Ce fichier UserSetup.h doit avoir la configuration suivante pour l'ensemble AZ-Touch :

#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

 

Pour ne pas avoir à copier complètement le contenu, vous pouvez également ici télécharger.

 

Passons maintenant à la méthode réelle, qui devrait afficher le numéro au milieu de l'écran :

(Dans les extraits d'exemple suivants, l'intégration de la bibliothèque et la création d'objets via le constructeur sont manquantes. Celles-ci ont été omises pour plus de clarté. Utilisez le programme final pour les tests !)

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);
}

Explication :
Au début, le nombre transmis au programme est converti en chaîne de caractères (chaîne) converti (casting).

L'affichage est ensuite préparé en réglant les pixels sur noir, la couleur de la police sur rouge et la police sur 8.

Ensuite, les coordonnées sont calculées. La coordonnée X est constituée de la différence entre la moitié de la largeur d'affichage et la moitié de la largeur du texte. La position y est décrite par la différence entre la moitié de la hauteur de l'écran et la moitié de la hauteur de la police.

Enfin, le numéro est placé à la position calculée via le println() commande affichée.

 

Le numéro de porte peut désormais être affiché en grand sur l'écran. Ensuite, nous voulons déterminer la date via le programme afin de pouvoir toujours afficher la porte actuelle.
Un module RTC offre ici une option répandue. Cependant, ceux-ci doivent être réglés manuellement à l'aide du logiciel et peuvent présenter des inexactitudes après un certain temps.
Puisque nous utilisons un ESP32 dans le projet, la fonction WLAN peut facilement être utilisée pour interroger l'heure et la date actuelles via un serveur dit NTP. Celui-ci Serveur de protocole de temps réseau sont basés sur des horloges en temps réel, telles que les horloges atomiques.
Pour la requête simplifiée, le Client NTP La bibliothèque peut être utilisée.

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;
}

Explication :

L'heure est d'abord mise à jour par le serveur. Après ceci temps Objet lu et inséré Structure converti.

Le jour et le mois sont ensuite lus à partir de cette structure et stockés dans les variables globales correspondantes.

 

Maintenant ils suivent configuration() fonction et le boucle() Routine :

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);
}

Explication :
Dans configuration() l'initialisation a lieu interface série, des Affichages, des Wi-Fi et des tempsClients (NTP).

Dans le boucle() En règle générale, la date est d'abord interrogée et, selon les cas, soit un compte à rebours jusqu'à l'Avent est affiché, soit si le mois correspond à décembre et que le jour est compris entre 1 et 24, le numéro de porte correspondant est affiché. showNumber() Fonction.
L'écran tactile est doté d'une broche d'interruption qui passe à LOW lorsqu'elle est enfoncée. Cela signifie que toucher l'écran peut être fait facilement avec un sans logiciel supplémentaire lecture numérique() la requête peut être vérifiée.
Après avoir touché, le contenu à l'écran sera avec le texte d'un tableau Éléments de chaîne rempli. Ici, afin que des textes plus longs puissent être affichés, le point de départ a été fixé à 0:0, c'est-à-dire le coin supérieur gauche. Le saut de ligne se poursuit alors automatiquement sur la ligne suivante.

 

Vous pouvez réaliser l'intégralité du projet ici télécharger.

Pour le charger sur le microcontrôleur, dans l'IDE Arduino, sélectionnez :
Outils > Carte > esp32 > Modules de développement ESP32

et puis le bon port série.

Si plusieurs ports apparaissent, débranchez le microcontrôleur et reconnectez-le, le nouveau port qui apparaît est celui du microcontrôleur.

 

Pour les utilisateurs avancés :
Pouvez-vous préinstaller le générateur de signal dans l'AZ-Touch pour jouer de la musique de Noël en attendant qu'un écran soit touché ?

 

CONSEIL : utilisez-les Commandes de tonalité à la broche 21. [tone(21, 1000, 100);]

            Pour les mélodies complexes, le Bibliothèque TinyRTTTL une solution simple.

 

Conclusion :

Dans ce projet, vous avez construit un calendrier de l'Avent à partir d'un module AZ-Touch, qui peut vous montrer chaque jour des dictons de Noël, des blagues ou des textes personnalisés.
Il est maintenant temps de collecter du contenu pour chaque jour !

 

Bien entendu, vous disposez encore d'une marge de manœuvre supplémentaire pour apporter des modifications créatives au logiciel, ce qui rendra le calendrier de l'Avent encore plus personnel ! :)

 

Amusez-vous à le reproduire :)

DisplaysEsp32Projekte für anfänger

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Articles de blog recommandés

  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