ESP 332 avec écran
Posté : 04 oct. 2026, 14:52
J'ai acquis un ESP 32 équipé d'un écran (j'ai profité d'une commande de madame).
Dans sa boite
. .
Recto
. .
Verso
. .
Gros plan sur la bête
. .
Essais d'affichage d'une image, pas si simple que cela.
. .
. .
Une petite vidéo ....
. .
Pour le code, il y avait un programme exemple fournis par le vendeur, mais nada, cela ne fonctionnait pas.
Après pas mal de recherche, merci l'I.A de Google.
Tant sur l'organisation dur programme que sur la manip pour inclure l'image dans la ram.
J'ai tronqué les données de l'image qui faisait dépasser le nombre de caractères max autorisé (+ de 275 044 pour 90 000).

Dans sa boite
. .
Recto
. .
Verso
. .
Gros plan sur la bête
. .
Essais d'affichage d'une image, pas si simple que cela.
. .
. .
Une petite vidéo ....
. .
Pour le code, il y avait un programme exemple fournis par le vendeur, mais nada, cela ne fonctionnait pas.
Après pas mal de recherche, merci l'I.A de Google.
Tant sur l'organisation dur programme que sur la manip pour inclure l'image dans la ram.
J'ai tronqué les données de l'image qui faisait dépasser le nombre de caractères max autorisé (+ de 275 044 pour 90 000).
Code : Tout sélectionner
// Test d'affichage d'une image.
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
#define LCD_MOSI 23
#define LCD_SCLK 18
#define LCD_CS 15
#define LCD_DC 2
#define LCD_RST 4
#define LCD_BLK 32
Adafruit_ST7789 lcd = Adafruit_ST7789(LCD_CS, LCD_DC, LCD_RST);
#define IMAGE_WIDTH 260
#define IMAGE_HEIGHT 130
int vitesse = 4; // Nombre de pixels déplacés à chaque étape
const uint16_t maSuperbeImage[] PROGMEM = {
// ... vos données d'image 260x130 ...
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xffde, 0xffff, 0xffde,
0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffde, 0xffff, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe, 0xffff,
J'ai tronqué les données de l'image qui faisait dépasser le nombre de caractères max autorisé (+ de 275 044 pour 90 000).
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7be, 0xe73b, 0xf79d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7de, 0xf7de, 0xf7de, 0xffff, 0xffff,
0xffde, 0xf7be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xef5c, 0xbdf7, 0x94b2, 0x7bce, 0x6b4c, 0x5aca, 0x52aa, 0x4a48,
0x4a69, 0x4a49, 0x3185, 0x2945, 0x3186, 0x39c7, 0x39a7, 0x2104, 0x10a2, 0x3185, 0x736d, 0x8c50, 0x5b0b, 0x4228, 0x31a6, 0x2965,
0x2124, 0x18e3, 0x10a2, 0x10a2, 0x18c2, 0x18c3, 0x18c3, 0x18c3, 0x18e3, 0x2124, 0x2104, 0x18e3, 0x31a6, 0x6b6d, 0x738e, 0x7bef,
0x9491, 0x8c50, 0x738d, 0x5aca, 0x52aa, 0x630c, 0x8c30, 0x94b2, 0x6b4d, 0x4208, 0x39c7, 0x4a49, 0x52aa, 0x5acb, 0x630b, 0x7bef,
0xa514, 0xc638, 0xf79d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff,
0xffdf, 0xffde, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xef5d,
0xdefb, 0xe73c, 0xf7be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
};
void setup() {
pinMode(LCD_BLK, OUTPUT);
digitalWrite(LCD_BLK, HIGH);
lcd.init(170, 320);
lcd.setRotation(1);
lcd.fillScreen(ST77XX_BLACK);
}
void loop() {
// 1. Image fixe au centre
lcd.drawRGBBitmap(30, 20, maSuperbeImage, IMAGE_WIDTH, IMAGE_HEIGHT);
delay(5000);
// 2. SCROLL SORTANT (Vers la droite) - SANS CLIGNOTEMENT
for (int x = 30; x <= 320; x += vitesse) {
// On dessine l'image à sa nouvelle position
lcd.drawRGBBitmap(x, 20, maSuperbeImage, IMAGE_WIDTH, IMAGE_HEIGHT);
// On "gomme" uniquement la bande de pixels laissée derrière à gauche
lcd.fillRect(x - vitesse, 20, vitesse, IMAGE_HEIGHT, ST77XX_BLACK);
delay(5);
}
// Petit nettoyage de sécurité pour être sûr que tout est noir à la fin
lcd.fillScreen(ST77XX_BLACK);
delay(500);
// 3. SCROLL ENTRANT (Depuis la gauche) - SANS CLIGNOTEMENT
for (int x = -260; x <= 30; x += vitesse) {
lcd.drawRGBBitmap(x, 20, maSuperbeImage, IMAGE_WIDTH, IMAGE_HEIGHT);
// On gomme la bande de pixels laissée derrière à gauche (si x > -260)
if (x > -260) {
lcd.fillRect(x - vitesse, 20, vitesse, IMAGE_HEIGHT, ST77XX_BLACK);
}
delay(5);
}
}