Panneau d'affichgage de gare
-
ramasoft - Chef es bogies

- Messages : 5527
- Enregistré le : 29 juil. 2024, 19:06
- Prénom : Patrick
- LOCALISATION : Indre - Levroux
- Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique - Echelle pratiquée : H0
- Âge : 68
- Pays :
France
-
likiki - Site Admin

- Messages : 16592
- Enregistré le : 27 févr. 2021, 16:11
- Prénom : Christian
- LOCALISATION : Ile de France
- Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
- Echelle pratiquée : H0
- Âge : 59
- Pays :
France
juil. 2026
27
16:03
Re: Panneau d'affichgage de gare
Allez Patrick, ont crois en toi, lance toi.

Si le Goëland se gratte le gland, il fera mauvais temps,
Si il se gratte le cul, il ne fera pas beau non plus.
Proverbe de là bas.

Si vous souhaitez faire un don pour le forum , c'est ici.
Si il se gratte le cul, il ne fera pas beau non plus.
Proverbe de là bas.
Si vous souhaitez faire un don pour le forum , c'est ici.
-
ramasoft - Chef es bogies

- Messages : 5527
- Enregistré le : 29 juil. 2024, 19:06
- Prénom : Patrick
- LOCALISATION : Indre - Levroux
- Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique - Echelle pratiquée : H0
- Âge : 68
- Pays :
France
juil. 2026
27
16:04
Re: Panneau d'affichgage de gare
Pour le moment je vais finir les pièces en impression 3D pour le mettre sur mon quai et voir ce que ça donne.
-
likiki - Site Admin

- Messages : 16592
- Enregistré le : 27 févr. 2021, 16:11
- Prénom : Christian
- LOCALISATION : Ile de France
- Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
- Echelle pratiquée : H0
- Âge : 59
- Pays :
France
juil. 2026
27
16:06
Re: Panneau d'affichgage de gare
Malgré la petitesse de ces écrans je les trouvent grand pour du HO.
Reste a voir en situation.

Reste a voir en situation.

Si le Goëland se gratte le gland, il fera mauvais temps,
Si il se gratte le cul, il ne fera pas beau non plus.
Proverbe de là bas.

Si vous souhaitez faire un don pour le forum , c'est ici.
Si il se gratte le cul, il ne fera pas beau non plus.
Proverbe de là bas.
Si vous souhaitez faire un don pour le forum , c'est ici.
-
ramasoft - Chef es bogies

- Messages : 5527
- Enregistré le : 29 juil. 2024, 19:06
- Prénom : Patrick
- LOCALISATION : Indre - Levroux
- Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique - Echelle pratiquée : H0
- Âge : 68
- Pays :
France
juil. 2026
27
16:26
Re: Panneau d'affichgage de gare
Oui, je me suis fait la même réflexion.
Ça fait une dimension hors tout de 35mm x 30mm ce qui fait 3,045 m x 2,61m donc effectivement une belle taille ...
Après plus petit ce sont les 0,96 pouces qui font 27mm de large sur 30mm de haut car le circuit dépasse beaucoup de l'écran.
Ils sont en une seule couleur ou avec juste la ligne du haut en jaune et le reste en bleu.
Donc l'affichage sera plus limité et moins joli tout en ayant un panneau pas tellement plus petit.
Et ceux que j'ai utilisé pour les tachymètres n'ont pas un format adapté et on ne peut mettre que 4 lignes, en monochrome.
L'écran 0,96 pouces
Ça fait une dimension hors tout de 35mm x 30mm ce qui fait 3,045 m x 2,61m donc effectivement une belle taille ...
Après plus petit ce sont les 0,96 pouces qui font 27mm de large sur 30mm de haut car le circuit dépasse beaucoup de l'écran.
Ils sont en une seule couleur ou avec juste la ligne du haut en jaune et le reste en bleu.
Donc l'affichage sera plus limité et moins joli tout en ayant un panneau pas tellement plus petit.
Et ceux que j'ai utilisé pour les tachymètres n'ont pas un format adapté et on ne peut mettre que 4 lignes, en monochrome.
L'écran 0,96 pouces
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
-
likiki - Site Admin

- Messages : 16592
- Enregistré le : 27 févr. 2021, 16:11
- Prénom : Christian
- LOCALISATION : Ile de France
- Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
- Echelle pratiquée : H0
- Âge : 59
- Pays :
France
juil. 2026
27
16:58
Re: Panneau d'affichgage de gare
Maintenant, nos réseaux ne sont pas des réseaux reproduisant a 100% la réalité. Cela nous permet, entre autre, de nous affranchir de ce type de détail.
Mettre un écran qui ferait la taille exact au HO, je ne suis pas sur que cela existe dans le commerce d'une part, et d'autre part, nada la lisibilité sauf a utiliser une paire de jumelle.
Par contre, mettre ton écran sur un petit quais risquerait de faire tache. Mais sur un double quais de bonne longueur et dans l'alignement de celui-ci ça devrait le faire (j'ai déjà vue cela sur un réseau).

Mettre un écran qui ferait la taille exact au HO, je ne suis pas sur que cela existe dans le commerce d'une part, et d'autre part, nada la lisibilité sauf a utiliser une paire de jumelle.
Par contre, mettre ton écran sur un petit quais risquerait de faire tache. Mais sur un double quais de bonne longueur et dans l'alignement de celui-ci ça devrait le faire (j'ai déjà vue cela sur un réseau).

Si le Goëland se gratte le gland, il fera mauvais temps,
Si il se gratte le cul, il ne fera pas beau non plus.
Proverbe de là bas.

Si vous souhaitez faire un don pour le forum , c'est ici.
Si il se gratte le cul, il ne fera pas beau non plus.
Proverbe de là bas.
Si vous souhaitez faire un don pour le forum , c'est ici.
-
ramasoft - Chef es bogies

- Messages : 5527
- Enregistré le : 29 juil. 2024, 19:06
- Prénom : Patrick
- LOCALISATION : Indre - Levroux
- Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique - Echelle pratiquée : H0
- Âge : 68
- Pays :
France
juil. 2026
27
18:32
Re: Panneau d'affichgage de gare
A droite, c'est le panneau qu'il va remplacer. C'est un panneau au sol et l'écran sera un peu plus en hauteur
Ça devrait aller.
L'habillage est asymétrique car l'écran l'est aussi: il y a le côté des connexions qui est plus large.
J'espère que ça ne se verra pas trop car j'avais essayé de faire un habillage symétrique mais ça faisait mastoc par rapport à la surface d'affichage.
Ça devrait aller.
L'habillage est asymétrique car l'écran l'est aussi: il y a le côté des connexions qui est plus large.
J'espère que ça ne se verra pas trop car j'avais essayé de faire un habillage symétrique mais ça faisait mastoc par rapport à la surface d'affichage.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
-
Amigorl - Posteur irrécupérable

- Messages : 842
- Enregistré le : 02 févr. 2025, 20:15
- Prénom : Rémy
- LOCALISATION : Pau
- Centres d'intérêts : Digitalisation matériel ancien, construction d'un réseau HO. Arduino, Dccex-Conmmand-Station, Rocrail, Digitalisation pont tournant Jouef, Decodeur accessoires DIY. 3D PLA et débutant SLA.
- Echelle pratiquée : H0
- Âge : 64
- Pays :
France
juil. 2026
27
19:51
Re: Panneau d'affichgage de gare

-
ramasoft - Chef es bogies

- Messages : 5527
- Enregistré le : 29 juil. 2024, 19:06
- Prénom : Patrick
- LOCALISATION : Indre - Levroux
- Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique - Echelle pratiquée : H0
- Âge : 68
- Pays :
France
juil. 2026
27
20:18
Re: Panneau d'affichgage de gare
Oui, on peut faire plein de choses sur le même principe.
Et il y a aussi le Bluetooth, mais je n'aime pas trop.
Ces ESP32 sont très bien.
Et il y a aussi le Bluetooth, mais je n'aime pas trop.
Ces ESP32 sont très bien.
-
likiki - Site Admin

- Messages : 16592
- Enregistré le : 27 févr. 2021, 16:11
- Prénom : Christian
- LOCALISATION : Ile de France
- Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
- Echelle pratiquée : H0
- Âge : 59
- Pays :
France
juil. 2026
27
20:39
Re: Panneau d'affichgage de gare
C'est comme les Wemos D1 mini.
Topissime.

Topissime.

Si le Goëland se gratte le gland, il fera mauvais temps,
Si il se gratte le cul, il ne fera pas beau non plus.
Proverbe de là bas.

Si vous souhaitez faire un don pour le forum , c'est ici.
Si il se gratte le cul, il ne fera pas beau non plus.
Proverbe de là bas.
Si vous souhaitez faire un don pour le forum , c'est ici.
-
ramasoft - Chef es bogies

- Messages : 5527
- Enregistré le : 29 juil. 2024, 19:06
- Prénom : Patrick
- LOCALISATION : Indre - Levroux
- Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique - Echelle pratiquée : H0
- Âge : 68
- Pays :
France
juil. 2026
30
11:01
Re: Panneau d'affichgage de gare
Dernière amélioration du logiciel : la possibilité d’éditer la liste des trains
Alors ça n’a l’air de rien mais il a fallu modifier pas mal de choses :
1- Le tableau horaires[] actuel est figé à la compilation (const char* pointant vers du texte fixe en mémoire flash) — il faut le transformer en tableau modifiable en RAM (char[] au lieu de const char*)
2- Sans sauvegarde, les modifications seraient perdues au prochain redémarrage et il va falloir faire une sauvegarde du tableau dans la mémoire flash de l'ESP32, qui le recharge automatiquement à chaque démarrage. Comme pour les niveaux de l’ascenseur et les voies du pont tournant.
3- Nombre de trains variable : NB_TRAINS devient une variable (pas une constante), avec une limite haute (MAX_TRAINS) pour réserver la mémoire à l'avance
4- Prévoir une routine de tri pour reclasser automatiquement la liste
J’ai demandé à Claude de ma faire une jolie page web pour éditer la liste et une modification de la première page d’accueil du réglage de l’heure.
Il a fallu sortir les pages web dans des fichiers à inclure : page_accueil.h et page_horaires.h car le compilateur se mélangeait les crayons avec les accolades et les guillemets du code HTML qu’il prenait pour du C++.
Donc le tableau des horaires est conservé pour avoir une liste par défaut, et qu’on pourra rappeler pour une réinitialisation « aux paramètres usine »
Ensuite dans le Setup, on regarde s’il y a une liste sauvegardée, si oui, on la charge. Si non on garde la liste par défaut écrite en dur dans le code.
Une fonction trierHoraires() fait un tri à bulles largement suffisant pour une trentaine de trains : le nb de trains est fixé à 30 mais peut être modifié dans le code : MAX_TRAINS à la ligne 120. Cette limite est nécessaire pour réserver la mémoire nécessaire mais suffisante sans risque de débordement.
La méthode du tri à bulle est la plus lente qui existe mais elle a l’avantage d’être compacte car on commence à voir arriver les limites de la mémoire de stockage des programmes de l’ESP…
Le tri est appelé :
- À la fin de analyserEtChargerHoraires() — donc après chaque sauvegarde depuis la page web, et après chaque chargement depuis la mémoire flash au démarrage
- À la fin de chargerHorairesDefaut() — par sécurité, même si le tableau par défaut est déjà trié
Résultat : peu importe où on insère un nouveau train dans la page web (au début, au milieu, à la fin de la liste), il se retrouvera automatiquement à sa place chronologique une fois enregistré — et l'affichage à l'écran (qui suppose un tableau trié) continuera de fonctionner correctement.
Attention à bien remplir les cases car je n’ai pas voulu surcharger par une routine de vérification des saisies:
- l’heure de départ et les minutes en chiffres
- le nom des trains est tronqué à 19 caractères. Comme on utilise une police proportionnelle, la largeur des caractères compte et un « W »occupe plus de place qu’un « I » donc les 19 caractères peuvent ne pas pouvoir s’afficher sans débordement avec des noms comportant des grosses lettres.
Ne pas utiliser d’accents ni de caractères comme la virgule, le point-virgule, le point ou un retour chariot qui casserait la ligne.
- l’heure d’arrivée est en texte au format « 10h15 »
- la voie ne comporte qu’un chiffre mais qui peut être aussi une lettre. Mais A1 ne s’affichera pas
La page d'accueil du serveur web:
La liste des trains en mode édition.
La liste validée
Le code et les deux pages web en fichiers à inclure: tout doit être dans le même répertoire et qui porte le nom du fichier .INO
La page d'accueil page_accueil.h
La page d'édition des horaires page_horaires.h
Cette fois, je pense en rester là mais si vous avez des idées d’amélioration, pourquoi pas …
Alors ça n’a l’air de rien mais il a fallu modifier pas mal de choses :
1- Le tableau horaires[] actuel est figé à la compilation (const char* pointant vers du texte fixe en mémoire flash) — il faut le transformer en tableau modifiable en RAM (char[] au lieu de const char*)
2- Sans sauvegarde, les modifications seraient perdues au prochain redémarrage et il va falloir faire une sauvegarde du tableau dans la mémoire flash de l'ESP32, qui le recharge automatiquement à chaque démarrage. Comme pour les niveaux de l’ascenseur et les voies du pont tournant.
3- Nombre de trains variable : NB_TRAINS devient une variable (pas une constante), avec une limite haute (MAX_TRAINS) pour réserver la mémoire à l'avance
4- Prévoir une routine de tri pour reclasser automatiquement la liste
J’ai demandé à Claude de ma faire une jolie page web pour éditer la liste et une modification de la première page d’accueil du réglage de l’heure.
Il a fallu sortir les pages web dans des fichiers à inclure : page_accueil.h et page_horaires.h car le compilateur se mélangeait les crayons avec les accolades et les guillemets du code HTML qu’il prenait pour du C++.
Donc le tableau des horaires est conservé pour avoir une liste par défaut, et qu’on pourra rappeler pour une réinitialisation « aux paramètres usine »
Ensuite dans le Setup, on regarde s’il y a une liste sauvegardée, si oui, on la charge. Si non on garde la liste par défaut écrite en dur dans le code.
Une fonction trierHoraires() fait un tri à bulles largement suffisant pour une trentaine de trains : le nb de trains est fixé à 30 mais peut être modifié dans le code : MAX_TRAINS à la ligne 120. Cette limite est nécessaire pour réserver la mémoire nécessaire mais suffisante sans risque de débordement.
La méthode du tri à bulle est la plus lente qui existe mais elle a l’avantage d’être compacte car on commence à voir arriver les limites de la mémoire de stockage des programmes de l’ESP…
Le tri est appelé :
- À la fin de analyserEtChargerHoraires() — donc après chaque sauvegarde depuis la page web, et après chaque chargement depuis la mémoire flash au démarrage
- À la fin de chargerHorairesDefaut() — par sécurité, même si le tableau par défaut est déjà trié
Résultat : peu importe où on insère un nouveau train dans la page web (au début, au milieu, à la fin de la liste), il se retrouvera automatiquement à sa place chronologique une fois enregistré — et l'affichage à l'écran (qui suppose un tableau trié) continuera de fonctionner correctement.
Attention à bien remplir les cases car je n’ai pas voulu surcharger par une routine de vérification des saisies:
- l’heure de départ et les minutes en chiffres
- le nom des trains est tronqué à 19 caractères. Comme on utilise une police proportionnelle, la largeur des caractères compte et un « W »occupe plus de place qu’un « I » donc les 19 caractères peuvent ne pas pouvoir s’afficher sans débordement avec des noms comportant des grosses lettres.
Ne pas utiliser d’accents ni de caractères comme la virgule, le point-virgule, le point ou un retour chariot qui casserait la ligne.
- l’heure d’arrivée est en texte au format « 10h15 »
- la voie ne comporte qu’un chiffre mais qui peut être aussi une lettre. Mais A1 ne s’affichera pas
La page d'accueil du serveur web:
La liste des trains en mode édition.
La liste validée
Le code et les deux pages web en fichiers à inclure: tout doit être dans le même répertoire et qui porte le nom du fichier .INO
La page d'accueil page_accueil.h
Code : Tout sélectionner
#pragma once
// ---------- Page web servie par l'ESP32 (reglage de l'heure) ----------
// Le JavaScript lit l'heure LOCALE du téléphone (déjà juste, été/hiver
// géré automatiquement par le téléphone) et l'envoie à l'ESP32.
//
// NOTE : ce contenu est dans un fichier .h séparé (et non dans le .ino)
// car le générateur automatique de prototypes de fonctions d'Arduino IDE
// (basé sur ctags) se laisse piéger par les accolades et guillemets
// contenus dans ce bloc HTML/CSS/JS, ce qui casse la compilation de
// TOUT le fichier .ino (plus aucune fonction n'est "trouvée"). Un fichier
// .h inclus via #include n'est jamais analysé par ce générateur.
const char PAGE_HTML[] = R"rawliteral(
<!DOCTYPE html><html><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Panneau Gare - Reglage heure</title>
<style>
body{font-family:sans-serif;text-align:center;background:#111;color:#eee;padding:30px 20px;}
button{font-size:1.2em;padding:18px 36px;border-radius:10px;border:none;background:#2a6;color:white;margin-top:20px;}
#heurePhone{font-size:1.6em;margin-top:10px;}
#msg{margin-top:20px;font-size:1.1em;color:#7f7;}
</style></head><body>
<h2>Panneau de gare HO</h2>
<p>Heure actuelle du telephone :</p>
<p id="heurePhone"></p>
<button onclick="reglerHeure()">Regler l'horloge du panneau</button>
<p id="msg"></p>
<p><a href="/horaires" style="color:#7cf;">Gerer les horaires des trains</a></p>
<script>
function majAffichage() {
document.getElementById('heurePhone').innerText = new Date().toLocaleString();
}
setInterval(majAffichage, 1000);
majAffichage();
function reglerHeure() {
const d = new Date();
const params = 'y=' + d.getFullYear() + '&mo=' + (d.getMonth()+1) + '&d=' + d.getDate()
+ '&h=' + d.getHours() + '&mi=' + d.getMinutes() + '&s=' + d.getSeconds();
fetch('/settime?' + params)
.then(r => r.text())
.then(t => { document.getElementById('msg').innerText = t; });
}
</script>
</body></html>
)rawliteral";
Code : Tout sélectionner
#pragma once
// ============================================================
// Page web de gestion des horaires : tableau modifiable, ajout/suppression
// de lignes, enregistrement en un clic. Réutilise le même format texte
// compact ("heure;minute;nom;arrivee;quai" par ligne) que la sauvegarde.
//
// NOTE : voir page_accueil.h pour l'explication du pourquoi ce contenu
// est dans un fichier .h séparé plutôt que dans le .ino.
// ============================================================
const char PAGE_HTML_HORAIRES[] = R"rawliteral(
<!DOCTYPE html><html><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Horaires - Panneau Gare</title>
<style>
body{font-family:sans-serif;background:#111;color:#eee;padding:15px;}
h2{text-align:center;}
table{width:100%;border-collapse:collapse;font-size:0.9em;}
th,td{padding:4px;text-align:center;}
input{width:100%;box-sizing:border-box;background:#222;color:#eee;border:1px solid #444;border-radius:4px;padding:4px;}
input[type=number]{width:3.2em;}
button{font-size:1.1em;padding:12px 20px;border-radius:10px;border:none;background:#2a6;color:white;margin:6px 4px;}
#btnReset{background:#a33;}
.del{background:#a33;padding:6px 10px;font-size:0.9em;}
#msg{text-align:center;margin-top:15px;font-size:1.1em;color:#7f7;}
a{color:#7cf;}
</style></head><body>
<h2>Gestion des horaires</h2>
<table>
<thead><tr><th>H</th><th>Min</th><th>Destination</th><th>Arrivee</th><th>V</th><th></th></tr></thead>
<tbody id="corps"></tbody>
</table>
<div style="text-align:center;">
<button onclick="ajouterLigne()">+ Ajouter un train</button>
<button onclick="enregistrer()">Enregistrer</button>
<button id="btnReset" onclick="reinitialiser()">Horaires par defaut</button>
</div>
<p id="msg"></p>
<p style="text-align:center;"><a href="/">Retour au reglage de l'heure</a></p>
<script>
function ajouterLigne(h='', m='', nom='', arr='', quai='') {
const tbody = document.getElementById('corps');
const tr = document.createElement('tr');
tr.innerHTML =
'<td><input type="number" min="0" max="23" value="' + h + '"></td>' +
'<td><input type="number" min="0" max="59" value="' + m + '"></td>' +
'<td><input type="text" value="' + nom + '"></td>' +
'<td><input type="text" value="' + arr + '"></td>' +
'<td><input type="text" value="' + quai + '"></td>' +
'<td><button class="del" onclick="this.closest(\'tr\').remove()">X</button></td>';
tbody.appendChild(tr);
}
// Chargement des horaires actuels au chargement de la page
fetch('/horaires_data').then(r => r.text()).then(txt => {
txt.trim().split('\n').forEach(ligne => {
if (!ligne) return;
const c = ligne.split(';');
ajouterLigne(c[0], c[1], c[2], c[3], c[4]);
});
});
function enregistrer() {
let data = '';
document.querySelectorAll('#corps tr').forEach(tr => {
const champs = tr.querySelectorAll('input');
const nom = champs[2].value.trim();
if (nom === '') return; // ignore les lignes vides
data += champs[0].value + ';' + champs[1].value + ';' + nom + ';'
+ champs[3].value + ';' + champs[4].value + '\n';
});
fetch('/horaires_save', { method: 'POST', headers: {'Content-Type':'text/plain'}, body: data })
.then(r => r.text())
.then(t => { document.getElementById('msg').innerText = t; });
}
function reinitialiser() {
if (!confirm('Revenir aux horaires par defaut ? Les modifications seront perdues.')) return;
fetch('/horaires_reset', { method: 'POST' })
.then(r => r.text())
.then(t => { document.getElementById('msg').innerText = t; location.reload(); });
}
</script>
</body></html>
)rawliteral";
Cette fois, je pense en rester là mais si vous avez des idées d’amélioration, pourquoi pas …
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par
ramasoft le 30 juil. 2026, 11:06, modifié 1 fois.
-
likiki - Site Admin

- Messages : 16592
- Enregistré le : 27 févr. 2021, 16:11
- Prénom : Christian
- LOCALISATION : Ile de France
- Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
- Echelle pratiquée : H0
- Âge : 59
- Pays :
France
juil. 2026
30
11:04
Re: Panneau d'affichgage de gare
Alors là,
Je kif a 2 000 000 %

Je kif a 2 000 000 %
Si le Goëland se gratte le gland, il fera mauvais temps,
Si il se gratte le cul, il ne fera pas beau non plus.
Proverbe de là bas.

Si vous souhaitez faire un don pour le forum , c'est ici.
Si il se gratte le cul, il ne fera pas beau non plus.
Proverbe de là bas.
Si vous souhaitez faire un don pour le forum , c'est ici.
-
bunny94 - 2000 posts et +

- Messages : 15040
- Enregistré le : 22 sept. 2021, 08:35
- Prénom : Alain
- LOCALISATION : Noiseau
- Centres d'intérêts : Photo-Vidéo-Modélisme ferroviaire-Trains réels-Impression 3D-Miniature automobile 1/43ème
- Echelle pratiquée : H0
- Âge : 75
- Pays :
France
juil. 2026
30
11:09
Re: Panneau d'affichgage de gare
Pour me retrouver sur ma chaîne YT: https://www.youtube.com/@abunny94/videos
-
ramasoft - Chef es bogies

- Messages : 5527
- Enregistré le : 29 juil. 2024, 19:06
- Prénom : Patrick
- LOCALISATION : Indre - Levroux
- Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique - Echelle pratiquée : H0
- Âge : 68
- Pays :
France
juil. 2026
30
11:32
Re: Panneau d'affichgage de gare
Pour « la technique » il y a un support en impression 3D pour l’ESP et l’horloge RTC
J’ai donc réutilisé le shield qui m’avait servi aux essais
Comme disait Lavoisier « Rien ne se perd, rien ne se crée, tout se transforme »
Le shield permet de souder ses fils, sans risque de faux contact et sans risque de se tromper.
Tout est repéré au départ avec des stickers qui indiquent les broches à utiliser avec un code couleur. Les couleurs utilisées sont rappelées dans l’entête du code ainsi on n'a pas besoin de documentation annexe et le jour où on veut modifier quelque chose, tout est clair.
La plaquette de circuit à bande est fixée par 4 vis de 1,2mm
Même chose pour l’horloge RTC qui vient s’enficher sur son connecteur : pas de risque d’erreur de branchement.
Les connexions des fils se font par derrière et un cache vient fermer pour les protéger
Le support peut être vissé sur une surface plane.
Pour le bouton d’appel du Wi-Fi, pendant les essais je l’avais mis sur la broche 13 qui est juste à côté d’une masse et un simple court-circuit des deux broches avec un instrument métallique permettait de se passer de bouton. Mais quand j’ai voulu mettre un bouton qui occupe 3 pistes, il fallait le mettre entre GPIO 09 et GND et … l’ESP ne démarrait plus…
Claude … au secours
(heureusement qu’il était là sinon j’aurais passé des heures à chercher sur le web)
GPIO9 (comme GPIO6 à GPIO11 en général) est une des broches connectées en interne à la mémoire flash SPI de l'ESP32 (celle qui contient le programme). Sur la plupart des modules ESP32 (dont le WROOM-32, le plus courant), ces broches sont câblées à demeure vers la puce flash à l'intérieur même du module, et ne sont pas disponibles pour un usage externe.
En configurant GPIO9 comme entrée (INPUT_PULLUP), on perturbe la communication entre l'ESP32 et sa propre mémoire flash — ce qui peut empêcher le programme de s'exécuter correctement dès le départ (crash ou redémarrage en boucle), pas seulement empêcher la lecture du bouton.
Donc obligé de remettre entre GPIO13 et GND et je l’ai déplacé sur un petit bout de circuit imprimé annexe.
Je ferai une vidéo plus complète sur les ESP32 car il y a pas mal de choses à savoir si on ne veut pas passer des heures à galérer.
En particulier, même si les broches s’appellent General Purpose Input Output (GPIO), elles ne sont pas interchangeables et il a des incompatibilités.
Les fichiers STL du support Et les stickers de l'ESP: Maintenant reste à poser le panneau sur le réseau et là, ça va moins rigoler car il faudra démonter le quai. Heureusement c’est prévu et je l’ai déjà fait mais il mesure 2m de long et il faut faire attention à ne rien casser autour et en particulier les potences qui sont en impression 3D …
Je mettrai les STL du panneau et de son support une fois que je les aurai posés pour voir si tout va bien...

J’ai donc réutilisé le shield qui m’avait servi aux essais
Comme disait Lavoisier « Rien ne se perd, rien ne se crée, tout se transforme »
Le shield permet de souder ses fils, sans risque de faux contact et sans risque de se tromper.
Tout est repéré au départ avec des stickers qui indiquent les broches à utiliser avec un code couleur. Les couleurs utilisées sont rappelées dans l’entête du code ainsi on n'a pas besoin de documentation annexe et le jour où on veut modifier quelque chose, tout est clair.
La plaquette de circuit à bande est fixée par 4 vis de 1,2mm
Même chose pour l’horloge RTC qui vient s’enficher sur son connecteur : pas de risque d’erreur de branchement.
Les connexions des fils se font par derrière et un cache vient fermer pour les protéger
Le support peut être vissé sur une surface plane.
Pour le bouton d’appel du Wi-Fi, pendant les essais je l’avais mis sur la broche 13 qui est juste à côté d’une masse et un simple court-circuit des deux broches avec un instrument métallique permettait de se passer de bouton. Mais quand j’ai voulu mettre un bouton qui occupe 3 pistes, il fallait le mettre entre GPIO 09 et GND et … l’ESP ne démarrait plus…
Claude … au secours
GPIO9 (comme GPIO6 à GPIO11 en général) est une des broches connectées en interne à la mémoire flash SPI de l'ESP32 (celle qui contient le programme). Sur la plupart des modules ESP32 (dont le WROOM-32, le plus courant), ces broches sont câblées à demeure vers la puce flash à l'intérieur même du module, et ne sont pas disponibles pour un usage externe.
En configurant GPIO9 comme entrée (INPUT_PULLUP), on perturbe la communication entre l'ESP32 et sa propre mémoire flash — ce qui peut empêcher le programme de s'exécuter correctement dès le départ (crash ou redémarrage en boucle), pas seulement empêcher la lecture du bouton.
Donc obligé de remettre entre GPIO13 et GND et je l’ai déplacé sur un petit bout de circuit imprimé annexe.
Je ferai une vidéo plus complète sur les ESP32 car il y a pas mal de choses à savoir si on ne veut pas passer des heures à galérer.
En particulier, même si les broches s’appellent General Purpose Input Output (GPIO), elles ne sont pas interchangeables et il a des incompatibilités.
Les fichiers STL du support Et les stickers de l'ESP: Maintenant reste à poser le panneau sur le réseau et là, ça va moins rigoler car il faudra démonter le quai. Heureusement c’est prévu et je l’ai déjà fait mais il mesure 2m de long et il faut faire attention à ne rien casser autour et en particulier les potences qui sont en impression 3D …
Je mettrai les STL du panneau et de son support une fois que je les aurai posés pour voir si tout va bien...

Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
-
Amigorl - Posteur irrécupérable

- Messages : 842
- Enregistré le : 02 févr. 2025, 20:15
- Prénom : Rémy
- LOCALISATION : Pau
- Centres d'intérêts : Digitalisation matériel ancien, construction d'un réseau HO. Arduino, Dccex-Conmmand-Station, Rocrail, Digitalisation pont tournant Jouef, Decodeur accessoires DIY. 3D PLA et débutant SLA.
- Echelle pratiquée : H0
- Âge : 64
- Pays :
France
juil. 2026
30
12:20
Re: Panneau d'affichgage de gare
Petite suggestion limite gadget, le gpio 13 de l'Esp32 peut être utilisé en touche tactile (capteur interne capacitif), ainsi on peut se passer d'un bouton ( juste connecter une petite vis du boîtier par exemple, reliée au gpio 13)
#define TOUCH_PIN T4 // GPIO13 en mode tactile
Exemple :
void setup() {
Serial.begin(115200);
}
void loop() {
int val = touchRead(TOUCH_PIN);
Serial.println(val);
delay(200);
}
On peut aussi utiliser les interruptions :
touchSetCycles(measure, sleep); // ajuster la précision
touchAttachInterrupt(pin, callback, threshold); // déclenchement par interruption
-
ramasoft - Chef es bogies

- Messages : 5527
- Enregistré le : 29 juil. 2024, 19:06
- Prénom : Patrick
- LOCALISATION : Indre - Levroux
- Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique - Echelle pratiquée : H0
- Âge : 68
- Pays :
France
juil. 2026
30
13:27
Re: Panneau d'affichgage de gare
Ok Merci Remy
Je vais creuser ces histoires de broches de l'ESP32 car il y a encore beaucoup de choses que j'ignore sur cette bestiole plus compliquée que l'Arduino.
Je vais creuser ces histoires de broches de l'ESP32 car il y a encore beaucoup de choses que j'ignore sur cette bestiole plus compliquée que l'Arduino.
-
ramasoft - Chef es bogies

- Messages : 5527
- Enregistré le : 29 juil. 2024, 19:06
- Prénom : Patrick
- LOCALISATION : Indre - Levroux
- Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique - Echelle pratiquée : H0
- Âge : 68
- Pays :
France
juil. 2026
30
13:44
Re: Panneau d'affichgage de gare
Pour compléter, j'ai demandé à Claude et voici sa réponse:
Les faits
Le GPIO13 de l'ESP32 (la puce originale, pas les variantes S2/S3/C3) correspond bien à une broche tactile capacitive : c'est le canal **T4** du contrôleur touch interne.
Voici la table complète pour référence, ça peut être utile si tu veux changer de broche plus tard :
Comment ça marche
Le contrôleur mesure la variation de capacité électrique sur la broche. En touchant un objet métallique relié à cette broche (ta vis du boîtier), tu augmentes légèrement la capacité, ce qui fait baisser la valeur lue par le registre touch. Le firmware compare cette valeur à un seuil pour détecter le "touché".
Points d'attention pratiques
- Calibration nécessaire : la valeur de base varie selon le montage (longueur de fil, taille de la vis, humidité ambiante). Il faut lire les valeurs à vide au démarrage et fixer un seuil relatif plutôt qu'une valeur fixe en dur.
- Sensibilité à l'environnement : humidité, proximité d'autres objets métalliques ou même la présence d'eau peuvent perturber la lecture.
- Fil de connexion : plus le fil entre le GPIO et la vis est long, plus il agit comme antenne parasite — ça peut rendre la détection moins fiable ou plus bruitée. Un fil court et si possible blindé/torsadé aide.
- Anti-rebond logiciel : comme pour un bouton classique, prévoir un léger debounce/filtrage (moyenne glissante par exemple) pour éviter les faux déclenchements.
- Attention à la variante de puce : si jamais tu passes à un ESP32-S2 ou S3, la table des GPIO touch est différente. L'ESP32-C3 n'a carrément pas de touch sensor. Donc vérifie bien que ta carte utilise l'ESP32 "classique".
Si tu veux, je peux te donner un petit exemple de code (Arduino ou ESP-IDF) pour lire GPIO13 en mode touch avec seuil calibré au démarrage.
J'ai dit oui et voici le code qu'il m'a fait:
Explications rapides
- touchRead(TOUCH_PIN) : fonction native de l'ESP32 Arduino core, renvoie une valeur (typiquement entre 0 et ~80-100 selon montage) qui diminue au contact.
- Calibration au démarrage : on fait une moyenne sur quelques lectures pour connaître le "zéro" du montage — important car cette valeur change selon la longueur du fil, la taille de la vis, etc.
- MARGIN : à ajuster en observant les valeurs affichées dans le moniteur série, avec et sans contact. Une marge trop faible → faux déclenchements ; trop grande → pas assez sensible.
- Anti-rebond simple : le bool touched évite de spammer l'action tant que le doigt reste posé (déclenchement uniquement au changement d'état).
Conseils de mise au point
Flashe ce code, ouvre le moniteur série (115200 bauds).
Observe la valeur val sans toucher la vis, puis en la touchant.
Ajuste MARGIN pour qu'il y ait une marge nette entre les deux états (évite de mettre le seuil trop près du bruit de fond).
Si tu observes des fluctuations bizarres, essaie de raccourcir le fil ou d'ajouter un petit condensateur (~1nF) entre GPIO13 et la masse — ça stabilise parfois la lecture.
Et voilà. Je ne veux pas faire de pub pour les IA et pour Claude en particulier mais avant il aurait fallu un certain temps voire un temps certain pour recueillir toutes ces informations et SURTOUT pour les vérifier ...
Aujourd'hui, ça prend moins de 2 minutes
Les faits
Le GPIO13 de l'ESP32 (la puce originale, pas les variantes S2/S3/C3) correspond bien à une broche tactile capacitive : c'est le canal **T4** du contrôleur touch interne.
Voici la table complète pour référence, ça peut être utile si tu veux changer de broche plus tard :
| Canal Touch | GPIO |
|---|---|
| T0 | GPIO4 |
| T1 | GPIO0 |
| T2 | GPIO2 |
| T3 | GPIO15 |
| **T4** | **GPIO13** |
| T5 | GPIO12 |
| T6 | GPIO14 |
| T7 | GPIO27 |
| T8 | GPIO33 |
| T9 | GPIO32 |
Le contrôleur mesure la variation de capacité électrique sur la broche. En touchant un objet métallique relié à cette broche (ta vis du boîtier), tu augmentes légèrement la capacité, ce qui fait baisser la valeur lue par le registre touch. Le firmware compare cette valeur à un seuil pour détecter le "touché".
Points d'attention pratiques
- Calibration nécessaire : la valeur de base varie selon le montage (longueur de fil, taille de la vis, humidité ambiante). Il faut lire les valeurs à vide au démarrage et fixer un seuil relatif plutôt qu'une valeur fixe en dur.
- Sensibilité à l'environnement : humidité, proximité d'autres objets métalliques ou même la présence d'eau peuvent perturber la lecture.
- Fil de connexion : plus le fil entre le GPIO et la vis est long, plus il agit comme antenne parasite — ça peut rendre la détection moins fiable ou plus bruitée. Un fil court et si possible blindé/torsadé aide.
- Anti-rebond logiciel : comme pour un bouton classique, prévoir un léger debounce/filtrage (moyenne glissante par exemple) pour éviter les faux déclenchements.
- Attention à la variante de puce : si jamais tu passes à un ESP32-S2 ou S3, la table des GPIO touch est différente. L'ESP32-C3 n'a carrément pas de touch sensor. Donc vérifie bien que ta carte utilise l'ESP32 "classique".
Si tu veux, je peux te donner un petit exemple de code (Arduino ou ESP-IDF) pour lire GPIO13 en mode touch avec seuil calibré au démarrage.
J'ai dit oui et voici le code qu'il m'a fait:
Code : Tout sélectionner
#define TOUCH_PIN 13 // GPIO13 = canal T4
#define SAMPLES 10 // nombre de lectures pour la calibration
#define MARGIN 10 // marge de détection (à ajuster selon test)
uint16_t baseline = 0; // valeur de repos (sans contact)
bool touched = false;
void setup() {
Serial.begin(115200);
delay(500);
// Calibration : on mesure la valeur "au repos" au démarrage
uint32_t sum = 0;
for (int i = 0; i < SAMPLES; i++) {
sum += touchRead(TOUCH_PIN);
delay(20);
}
baseline = sum / SAMPLES;
Serial.print("Valeur de repos (baseline) : ");
Serial.println(baseline);
}
void loop() {
uint16_t val = touchRead(TOUCH_PIN);
// Le touché fait BAISSER la valeur lue
bool isTouchedNow = (val < baseline - MARGIN);
if (isTouchedNow && !touched) {
touched = true;
Serial.println(">>> Touché détecté !");
// --> ici ton action (allumer une LED, déclencher une fonction, etc.)
}
if (!isTouchedNow && touched) {
touched = false;
Serial.println("Relâché.");
}
Serial.printf("val=%d baseline=%d\n", val, baseline);
delay(100);
}Explications rapides
- touchRead(TOUCH_PIN) : fonction native de l'ESP32 Arduino core, renvoie une valeur (typiquement entre 0 et ~80-100 selon montage) qui diminue au contact.
- Calibration au démarrage : on fait une moyenne sur quelques lectures pour connaître le "zéro" du montage — important car cette valeur change selon la longueur du fil, la taille de la vis, etc.
- MARGIN : à ajuster en observant les valeurs affichées dans le moniteur série, avec et sans contact. Une marge trop faible → faux déclenchements ; trop grande → pas assez sensible.
- Anti-rebond simple : le bool touched évite de spammer l'action tant que le doigt reste posé (déclenchement uniquement au changement d'état).
Conseils de mise au point
Flashe ce code, ouvre le moniteur série (115200 bauds).
Observe la valeur val sans toucher la vis, puis en la touchant.
Ajuste MARGIN pour qu'il y ait une marge nette entre les deux états (évite de mettre le seuil trop près du bruit de fond).
Si tu observes des fluctuations bizarres, essaie de raccourcir le fil ou d'ajouter un petit condensateur (~1nF) entre GPIO13 et la masse — ça stabilise parfois la lecture.
Et voilà. Je ne veux pas faire de pub pour les IA et pour Claude en particulier mais avant il aurait fallu un certain temps voire un temps certain pour recueillir toutes ces informations et SURTOUT pour les vérifier ...
Aujourd'hui, ça prend moins de 2 minutes
-
likiki - Site Admin

- Messages : 16592
- Enregistré le : 27 févr. 2021, 16:11
- Prénom : Christian
- LOCALISATION : Ile de France
- Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
- Echelle pratiquée : H0
- Âge : 59
- Pays :
France
juil. 2026
30
13:50
Re: Panneau d'affichgage de gare

Si le Goëland se gratte le gland, il fera mauvais temps,
Si il se gratte le cul, il ne fera pas beau non plus.
Proverbe de là bas.

Si vous souhaitez faire un don pour le forum , c'est ici.
Si il se gratte le cul, il ne fera pas beau non plus.
Proverbe de là bas.
Si vous souhaitez faire un don pour le forum , c'est ici.
-
Amigorl - Posteur irrécupérable

- Messages : 842
- Enregistré le : 02 févr. 2025, 20:15
- Prénom : Rémy
- LOCALISATION : Pau
- Centres d'intérêts : Digitalisation matériel ancien, construction d'un réseau HO. Arduino, Dccex-Conmmand-Station, Rocrail, Digitalisation pont tournant Jouef, Decodeur accessoires DIY. 3D PLA et débutant SLA.
- Echelle pratiquée : H0
- Âge : 64
- Pays :
France
juil. 2026
30
14:08
Re: Panneau d'affichgage de gare
Je n'en sais guère plus, je découvre au fil du temps et de lectures par ci, par là.
Ça fait 2 ans que mes esp32 sont dans les tiroirs, j'avais essayé de commencer le remplacement des deux nanos, un pour la motorisation du pont tournant et l'autre pour son décodeur DCC, ceci afin de regrouper en un seul contrôleur et éventuellement pour piloter manuellement via wifi. Mais faute de temps....
En attendant, lectures nocturnes d'articles pour m'informer...
(En plus du forum bien entendu....)
Ça fait 2 ans que mes esp32 sont dans les tiroirs, j'avais essayé de commencer le remplacement des deux nanos, un pour la motorisation du pont tournant et l'autre pour son décodeur DCC, ceci afin de regrouper en un seul contrôleur et éventuellement pour piloter manuellement via wifi. Mais faute de temps....
En attendant, lectures nocturnes d'articles pour m'informer...
(En plus du forum bien entendu....)
-
Amigorl - Posteur irrécupérable

- Messages : 842
- Enregistré le : 02 févr. 2025, 20:15
- Prénom : Rémy
- LOCALISATION : Pau
- Centres d'intérêts : Digitalisation matériel ancien, construction d'un réseau HO. Arduino, Dccex-Conmmand-Station, Rocrail, Digitalisation pont tournant Jouef, Decodeur accessoires DIY. 3D PLA et débutant SLA.
- Echelle pratiquée : H0
- Âge : 64
- Pays :
France
juil. 2026
30
14:12
Re: Panneau d'affichgage de gare
Houlala...
Je balance une idée de manière très succincte et voilà Patrick qui développe en détail : Génial !
Merci pour ces précisions utiles pour tous ...

Je balance une idée de manière très succincte et voilà Patrick qui développe en détail : Génial !
Merci pour ces précisions utiles pour tous ...
-
patrice_b - 2000 posts et +

- Messages : 3680
- Enregistré le : 31 janv. 2025, 14:45
- Prénom : Patrice
- LOCALISATION : Beziers Herault
- Centres d'intérêts : Modelisme HO et HOM ou HOe
- Echelle pratiquée : H0
- Âge : 65
- Pays :
France
-
C2Vues-BricoTrain - 2000 posts et +

- Messages : 9152
- Enregistré le : 08 mars 2024, 11:45
- Prénom : Fernando
- LOCALISATION : Clamart
- Centres d'intérêts : Modélisme Ferroviaire - Échelles N et HO
Images IA - Echelle pratiquée : N
- Âge : 74
- Pays :
France
juil. 2026
31
12:20
Re: Panneau d'affichgage de gare

Pour me retrouver sur ma chaîne :
https://youtube.com/@c2vues-bricotrain? ... VpM6qhmP2u
Quand trop gentil, tu seras,
Dans le côté sombre, tu l'auras !
Yoda
Maître Jedi dans Star Wars
https://youtube.com/@c2vues-bricotrain? ... VpM6qhmP2u
Quand trop gentil, tu seras,
Dans le côté sombre, tu l'auras !
Yoda
Maître Jedi dans Star Wars
-
philippe017 - Posteur insomniac

- Messages : 466
- Enregistré le : 17 nov. 2025, 20:57
- Prénom : Philippe
- LOCALISATION : Gémozac
- Centres d'intérêts : Modélisme ferroviaire, programmation décodeur , impression 3D j'ai des imprimantes en filament et des imprimantes en résine.
- Echelle pratiquée : H0
- Âge : 55
- Pays :
France
-
ramasoft - Chef es bogies

- Messages : 5527
- Enregistré le : 29 juil. 2024, 19:06
- Prénom : Patrick
- LOCALISATION : Indre - Levroux
- Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique - Echelle pratiquée : H0
- Âge : 68
- Pays :
France
juil. 2026
31
16:48
Re: Panneau d'affichgage de gare
Voilà, le panneau est posé.
Je l'ai mis transversalement sur le quai le plus proche du bord pour avoir l'heure devant moi
La hauteur est réglable car le pied circulaire de diamètre 8mm peut s'enfoncer plus ou moins. J'ai réglé pour que les gens ne se cognent pas la tête et sitôt installé il y en a plein qui sont venus voir.
C'est un peu mastoc et pas vraiment à l'échelle, mais avec cet écran on ne peut pas faire plus petit.
Le support de l’électronique est fixé verticalement sur la petite étagère qui porte la centrale et l'ampli de la sono.
Le gros bouton c'est pour basculer le Wi-Fi.
Théoriquement, on peut mettre plusieurs écrans sur le même ESP32 en parallèle: tous les fils sont communs sauf le CS qui permet de sélectionner à quel écran s'adressent les ordres d'écriture. Mais je me demande ce qui se passe si on met tous les fils en parallèle ... n'ayant qu'un seul écran, je n'ai pas essayé.
Je mettrai les STL du panneau plus tard car je me suis mélangé les crayons dans les différentes version que j'ai faites et la dernière, que je croyais la bonne a la fenêtre d'affichage un peu décalée ...
Je l'ai mis transversalement sur le quai le plus proche du bord pour avoir l'heure devant moi
La hauteur est réglable car le pied circulaire de diamètre 8mm peut s'enfoncer plus ou moins. J'ai réglé pour que les gens ne se cognent pas la tête et sitôt installé il y en a plein qui sont venus voir.
C'est un peu mastoc et pas vraiment à l'échelle, mais avec cet écran on ne peut pas faire plus petit.
Le support de l’électronique est fixé verticalement sur la petite étagère qui porte la centrale et l'ampli de la sono.
Le gros bouton c'est pour basculer le Wi-Fi.
Théoriquement, on peut mettre plusieurs écrans sur le même ESP32 en parallèle: tous les fils sont communs sauf le CS qui permet de sélectionner à quel écran s'adressent les ordres d'écriture. Mais je me demande ce qui se passe si on met tous les fils en parallèle ... n'ayant qu'un seul écran, je n'ai pas essayé.
Je mettrai les STL du panneau plus tard car je me suis mélangé les crayons dans les différentes version que j'ai faites et la dernière, que je croyais la bonne a la fenêtre d'affichage un peu décalée ...
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
-
TrainDoly - 1300 posts et +

- Messages : 1300
- Enregistré le : 09 févr. 2025, 14:37
- Prénom : Olivier
- LOCALISATION : Expatrié en Alsace
- Centres d'intérêts : Train HO & Impression résine & Fraiseuse CNC faite maison
- Echelle pratiquée : H0
- Pays :
France
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités