ENIB 2026 : Sation météo : Différence entre versions
(→fichiers à joindre) |
(→Code Arduino) |
||
| Ligne 38 : | Ligne 38 : | ||
===Code Arduino=== | ===Code Arduino=== | ||
[[Fichier:Code station météo esp32.pdf|300px]] | [[Fichier:Code station météo esp32.pdf|300px]] | ||
| + | |||
| + | Version avec bouton poussoir : | ||
| + | [[Fichier:Code final station météo esp32.pdf]] | ||
==étapes de fabrication== | ==étapes de fabrication== | ||
Version actuelle datée du 20 janvier 2026 à 16:38
Titre de la fiche expérience :
Sommaire
Introduction
La station météo est une maquette qui permet à l'utilisateur d'obtenir les informations relatifs à la météo : la température et les conditions climatiques comme le soleil, la pluie, les orages, le brouillard la neige ou juste les nuages.
Elle utilise des leds et des planches en bois sur lesquelle sont gravées des pictogramme de météo (soleil, nuage, etc..) placé à coté des leds.
Matériel nécessaire
- 8 leds - Des leds matricielles (minimum 7 en longueur par 5 en largeur) - Des planches en bois (ou quelque chose de solide, découpable et gravable) - Une carte esp32 - Des câbles connexion - un bout de papier calque - Des boutons poussoir - du fil pour impression 3D - tube de colle pour pistoler a colle
Schéma du résultat :
Outils nécessaire
- Découpeuse laser - Imprimante 3D - Règle - Pistolet a colle
fichiers à joindre
Diaporama de présentation
Fichier:Diapo presentation station meteo.pdf
Découpe laser
Code Arduino
Fichier:Code station météo esp32.pdf
Version avec bouton poussoir : Fichier:Code final station météo esp32.pdf
étapes de fabrication
indiquer autant d'étape que nécessaire, chacune illustrée par des images (photo, dessins, ...)
étape 1
Regrouper le matériel. Tester le matériel. Procéder au câblage si joint.
Vérifier si le code compile le code.
Maintenant, on va commencer la construction de la structure.
étape 2
- découpe de la structure grâce au fichier Inkscape sur une découpeuse laser - vérification de l'échelle de la structure
étape 3
- imprimer le support (une grille de 10 par 10) pour la matrice led
étape 4
- découper le papier calque pour qu'il corresponde au support - coller le support avec la matrice led a la structure précédemment découpée grâce au pistolet a colle
étape 5
Tester le bon fonctionnement
Il s'agit de la maquette en carton, les gravures ne sont pas très visible mais les données sont correctes.
Maintenant on veut rajouter un paramètre : la ville. On veut rajouter 4 boutons qui nous permettrait de sélectionner la ville, on prend Brest, Marseille, Lille et Paris.
étape 6
On refait un schéma pour y faire correspondre les boutons poussoir
étape 7
Monter et brancher la maquette finale :
étape 8
Vérifier le bon fonctionnement.
Petit problème : la led est un peu trop forte
Pour le résoudre on utilise simplement analogwrite à la place de digitalwrite pour allumer la led.
Une fois ce problème résolu, vous avez maintenant une station météo fonctionnelle, félicitation.
Troubleshouting
Quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?
Erreur possible et solution
Un problème que l'on a eu au début était d'avoir l'affichage de la température en inversé ou miroir.
Pour l'inverser après plusieurs recherche nous avons décider de nous aider avec l'IA. Le problème était qu'il fallait inverser le X dans la fonction XY(). Pour ce faire, on a rajouté la ligne
x = (WIDTH -1) -x;
Sources et documentation complémentaire
ESP32 TFT avec LVGL : Station météo : https://www.raspberryme.com/esp32-tft-avec-lvgl-station-meteo/#Station_meteo_ESP32_TFT_%E2%80%93_fichier_Weather_imagesh
- Transpаrence et dосumеntatiоn :
Lors d'utilisation de l'IA : prompt : aide mappage LED WSP2880 pour une 8x8 Donne les code suivant
int XY(int x, int y) {
x = (WIDTH - 1) - x; // <-- miroir horizontal corrigé
if (y % 2 == 0) return y * WIDTH + x; return y * WIDTH + (WIDTH - 1 - x);
}
void drawPixel(int x, int y, CRGB color) {
if (x < 0 || x >= WIDTH || y < 0 || y >= HEIGHT) return; leds[XY(x, y)] = color;
}
//---------chiffre 3*5--------
// Police 3x5 : chaque chiffre fait 3 pixels de large sur 5 de haut const uint16_t digits3x5[10] = {
0b111101101101111, // 0 0b010110010010111, // 1 0b111001111100111, // 2 0b111001111001111, // 3 0b101101111001001, // 4 0b111100111001111, // 5 0b111100111101111, // 6 0b111001010010010, // 7 0b111101111101111, // 8 0b111101111001111 // 9
}; // Fonction pour dessiner un chiffre 3x5 void drawDigit3x5(int digit, int offsetX, int offsetY, CRGB color) {
if (digit < 0 || digit > 9) return;
for (int y = 0; y < 5; y++) {
for (int x = 0; x < 3; x++) {
// On lit le bit correspondant (14 - position)
int bitPos = 14 - (y * 3 + x);
if (digits3x5[digit] & (1 << bitPos)) {
drawPixel(x + offsetX, y + offsetY, color);
}
}
}
}
void drawNumber2Digits(int value, CRGB color) {
value = constrain(value, 0, 99); int dizaine = value / 10; int unite = value % 10;
// Si le chiffre est < 10, on peut soit ne rien afficher à gauche, soit un 0
if (value >= 10) {
drawDigit3x5(dizaine, 0, 1, color); // Positionné à x=0, y=1 pour centrer verticalement
}
drawDigit3x5(unite, 4, 1, color); // Positionné à x=4, y=1
}