ESP32 (Cheap Yellow Display)Arduino / TFT_eSPIMQTT (HiveMQ Cloud)Pythondiscord.py
CYD MQTT Display
Écran ESP32 Cheap Yellow Display piloté à distance par MQTT (HiveMQ Cloud, TLS) : texte, image, couleur de fond, luminosité et buzzer, commandés depuis Discord ou un PC.

Affichage de texte et d’images à distance sur un écran ESP32 Cheap Yellow Display (CYD), via MQTT (HiveMQ Cloud, TLS), déclenché depuis Discord ou depuis un PC.
Discord (/texte, /image…) ──► controller/bot.py ─────────┐
├──► Broker MQTT ──► CYD (firmware ESP32)
PC (image locale) ─────────► controller/send_image.py ───┘
Fonctionnalités
- Texte avec taille adaptée automatiquement, image JPEG redimensionnée en 320×240
- Couleur de fond, luminosité (PWM) et buzzer pilotables à distance
- Portail captif pour configurer le Wi-Fi au premier démarrage (réseau
CYD-MQTT-Display-Setup) - Double-tap sur l’écran pour éteindre le rétroéclairage, simple tap pour le rallumer
Structure du dépôt
.
├── controller/ # Côté PC (Python)
│ ├── common.py # Config .env, topics MQTT, traitement d'image
│ ├── bot.py # Bot Discord (commandes slash)
│ └── send_image.py # Envoi d'une image depuis le PC
├── firmware/ # Côté ESP32 (Arduino)
│ ├── cyd_mqtt_display/
│ │ ├── cyd_mqtt_display.ino
│ │ ├── config.h # Pins, topics, constantes
│ │ └── secrets.example.h # Modèle d'identifiants MQTT
│ └── TFT_eSPI/
│ └── User_Setup.h # Configuration écran pour TFT_eSPI
├── .env.example # Modèle d'identifiants (Python)
└── requirements.txt
Firmware (ESP32)
Bibliothèques Arduino nécessaires :
| Bibliothèque | Auteur | Version testée |
|---|---|---|
| TFT_eSPI | Bodmer | 2.5.43 |
| TJpg_Decoder | Bodmer | 1.1.0 |
| XPT2046_Touchscreen | Paul Stoffregen | 1.4 |
| PubSubClient | Nick O’Leary | 2.8 |
| ArduinoJson | Benoit Blanchon | 7.4.3 |
# Installation
# 1. Copier firmware/TFT_eSPI/User_Setup.h dans Documents/Arduino/libraries/TFT_eSPI/
# 2. Copier secrets.example.h en secrets.h et renseigner les identifiants MQTT
# 3. Ouvrir cyd_mqtt_display.ino, choisir la carte ESP32 Dev Module, téléverser
Contrôleur (PC)
pip install -r requirements.txt
cp .env.example .env # puis renseigner les identifiants
python controller/bot.py
Envoyer une image sans passer par Discord :
python controller/send_image.py mon_image.jpg
Commandes Discord
| Commande | Effet |
|---|---|
/texte message | Affiche un texte |
/image fichier | Affiche une image (redimensionnée en 320×240) |
/bgcolor #RRGGBB | Change la couleur de fond |
/bip [frequence] [duree] [repetitions] | Fait sonner le buzzer |
/luminosite 0-255 | Règle la luminosité |
/clear | Revient à l’écran de veille |
/status | État de la connexion MQTT |
Topics MQTT
| Topic | Payload |
|---|---|
cyd/message | Texte UTF-8 |
cyd/image | JPEG 320×240, ≤ 39 Ko |
cyd/clear | Quelconque |
cyd/brightness | 0 à 255 |
cyd/bgcolor | #RRGGBB |
cyd/bip | 1 ou {"freq":2000,"dur":150,"repeat":3} |
cyd/status | Publié par l’écran : online |