ENIB 2026 : Sation météo : Différence entre versions
(→étape 1) |
(→Code Arduino) |
||
| (21 révisions intermédiaires par 3 utilisateurs non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
Titre de la fiche expérience : | Titre de la fiche expérience : | ||
| − | == | + | ==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. | 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. | ||
| Ligne 12 : | Ligne 14 : | ||
- Des leds matricielles (minimum 7 en longueur par 5 en largeur) | - Des leds matricielles (minimum 7 en longueur par 5 en largeur) | ||
- Des planches en bois (ou quelque chose de solide, découpable et gravable) | - Des planches en bois (ou quelque chose de solide, découpable et gravable) | ||
| − | |||
- Une carte esp32 | - Une carte esp32 | ||
- Des câbles connexion | - Des câbles connexion | ||
| Ligne 31 : | Ligne 32 : | ||
==fichiers à joindre== | ==fichiers à joindre== | ||
| − | + | ===Diaporama de présentation=== | |
| + | [[Fichier:Diapo presentation station meteo.pdf]] | ||
| + | ===Découpe laser=== | ||
| + | [[Media:StationMétéoV2.svg]] | ||
===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== | ||
| Ligne 42 : | Ligne 49 : | ||
Tester le matériel. | Tester le matériel. | ||
Procéder au câblage si joint. | Procéder au câblage si joint. | ||
| − | [[Fichier:Cablage station meteo ENIB | + | |
| + | [[Fichier:Cablage station meteo ENIB 2026V1.png|200px]] | ||
Vérifier si le code compile le code. | Vérifier si le code compile le code. | ||
| Ligne 67 : | Ligne 75 : | ||
Maintenant on veut rajouter un paramètre : la ville. | 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. | 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 | ||
| + | |||
| + | [[Fichier:Cablage station meteo ENIB 2026.png|200px]] | ||
| + | |||
| + | ===étape 7=== | ||
| + | Monter et brancher la maquette finale : | ||
| + | |||
| + | [[Fichier:Assemblage maquette f.jpg|250px]] | ||
| + | |||
| + | ===étape 8=== | ||
| + | Vérifier le bon fonctionnement. | ||
| + | |||
| + | [[Fichier:Maquette finale.jpg|250px]] | ||
| + | |||
| + | 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=== | ===Troubleshouting=== | ||
| Ligne 92 : | Ligne 123 : | ||
* Transpаrence et dосumеntatiоn : <br> | * Transpаrence et dосumеntatiоn : <br> | ||
| − | + | 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 | ||
| + | } | ||
==Elément de présentation== | ==Elément de présentation== | ||
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
}