Programme robuste en C pour afficher du texte sur un Minitel 1B via ESP32, conçu pour tourner 9h/jour sur Raspberry Pi sans crash.
- Détection et reconnexion automatique du port série
- Gestion propre des signaux (SIGTERM, SIGINT, SIGHUP)
- Pas de fuite mémoire - Safe pour usage 24/7
- Watchdog intégré - Vérifie que le système est vivant
- Logs avec timestamps - Debug facile
- Service systemd - Démarrage automatique au boot
- Limites de ressources - CPU et RAM contrôlés
- Retry automatique - Max 5 tentatives avec backoff
- Lecture de fichier texte
- Boucle infinie ou mode one-shot
- Vitesse configurable
- Retour à la ligne automatique (10 caractères)
- Logs détaillés dans
/tmp/minitel.log
# Cloner le projet
git clone https://github.com/grerfou/minitel-sender.git
cd minitel-sender
# Installation automatique + service systemd
chmod +x install-rpi.sh
./install-rpi.sh
# Démarrer le service
sudo systemctl start minitel
# Voir les logs
journalctl -u minitel -fC'est tout ! Le programme tourne maintenant en arrière-plan et redémarrera automatiquement au boot.
- Raspberry Pi (testé sur Pi 3/4/5)
- Minitel 1B avec Minitel-ESP32 installé
- Câble USB
- Raspberry Pi OS (Bullseye ou plus récent)
- GCC, Make (installés automatiquement)
- Flasher l'ESP32 avec Minitel-ESP32
- Configurer Telnet Pro en mode Serial
- Appuyer sur ESPACE pour activer
vim text.txtÉcrivez ce que vous voulez afficher (sans limite de taille).
Mode manuel (développement) :
make runMode production (service) :
make install-service
make start-service# Démarrer
sudo systemctl start minitel
# Arrêter
sudo systemctl stop minitel
# Redémarrer
sudo systemctl restart minitel
# Voir le statut
sudo systemctl status minitel
# Activer au démarrage (déjà fait par install-rpi.sh)
sudo systemctl enable minitel
# Désactiver au démarrage
sudo systemctl disable minitel# Logs système (journald)
journalctl -u minitel -f
# Logs applicatifs
tail -f /tmp/minitel.log
# Dernières 100 lignes
journalctl -u minitel -n 100./minitel [OPTIONS]
Options:
-f FILE Fichier texte (défaut: text.txt)
-d DELAY Délai en µs (défaut: 1000)
-p PORT Port série (défaut: /dev/ttyUSB0)
-o Mode one-shot (affiche une fois)
-l LOGFILE Fichier de log (défaut: /tmp/minitel.log)
-h Aide
Exemples:
./minitel -f message.txt -d 2000
./minitel -o -f test.txt
./minitel -p /dev/ttyACM0Éditer /etc/systemd/system/minitel.service :
sudo systemctl edit --full minitelExemple - changer le fichier et la vitesse :
ExecStart=/home/pi/minitel-sender/minitel -f custom.txt -d 2000Puis recharger :
sudo systemctl daemon-reload
sudo systemctl restart minitel# Voir si le processus existe
ps aux | grep minitel
# Voir l'uptime du service
systemctl status minitel | grep Active
# Voir la consommation mémoire/CPU
top -p $(pgrep minitel)# Nombre de redémarrages
journalctl -u minitel | grep "Démarrage" | wc -l
# Derniers crashs
journalctl -u minitel | grep "ERROR\|FATAL"
# Uptime total
systemctl show minitel --property=ActiveEnterTimestamp# Voir l'erreur exacte
sudo systemctl status minitel
journalctl -u minitel -n 50
# Vérifier les permissions
ls -l /dev/ttyUSB0
groups # Vérifier que dialout est présent
# Test manuel
sudo ./minitel -o# Lister les ports disponibles
ls -l /dev/tty*
# Vérifier que l'ESP32 est connecté
dmesg | grep tty
# Modifier le port dans le service
sudo systemctl edit --full minitel
# Changer: -p /dev/ttyACM0 (ou autre port)# Voir les logs au moment du crash
journalctl -u minitel --since "2 hours ago"
# Vérifier la mémoire disponible
free -h
# Augmenter la limite mémoire dans le service
sudo systemctl edit --full minitel
# Modifier: MemoryMax=100M- Vérifier que Telnet Pro est en mode Serial à 4800 bauds
- Vérifier le câblage ESP32 ↔ Minitel
- Redémarrer l'ESP32
Testé sur Raspberry Pi 4 :
- CPU : < 1% en moyenne
- RAM : ~2 MB
- Uptime : 9h/jour stable
- Reconnexion : < 5 secondes
Limites configurées dans le service :
MemoryMax=50M- Maximum 50 MB de RAMCPUQuota=50%- Maximum 50% d'un cœur CPU
Le service systemd inclut :
NoNewPrivileges=true- Pas d'escalade de privilègesPrivateTmp=true- /tmp isolé- Utilisateur non-root (
pipar défaut) - Limites de ressources strictes
minitel-sender/
├── minitel.c # Code source robuste
├── Makefile # Build et gestion service
├── minitel.service # Fichier systemd
├── install-rpi.sh # Script d'installation
├── text.txt # Fichier texte exemple
├── README.md # Cette doc
├── LICENSE # MIT License
└── .gitignore # Fichiers à ignorer
# Test de compilation
make test
# Test one-shot
make run-once
# Test avec un autre fichier
echo "TEST 123" > test.txt
sudo ./minitel -f test.txt -o
# Test de robustesse (débrancher/rebrancher USB)
make start-service
# Débrancher ESP32
# Attendre 10s
# Rebrancher
# Vérifier les logs: tail -f /tmp/minitel.log- Reconnexion automatique
- Gestion des signaux
- Service systemd
- Logs avec timestamps
- Watchdog intégré
- Tests de robustesse 9h
- Envoi basique de fichier texte
- Boucle infinie
GNU GENERAL PUBLIC LICENSE
grerfou
- iodeo pour Minitel-ESP32
- La communauté Raspberry Pi
- Tous les contributeurs