Page 1 sur 1

ESP 332 avec écran

Posté : 04 oct. 2026, 14:52
par likiki
J'ai acquis un ESP 32 équipé d'un écran (j'ai profité d'une commande de madame).

Dans sa boite
.
IMG_0775.jpeg
.

Recto
.
IMG_0776.jpeg
.

Verso
.
IMG_0778.jpeg
.

Gros plan sur la bête
.
IMG_0777.jpeg
.

Essais d'affichage d'une image, pas si simple que cela.
.
IMG_0779.jpeg
.

.
IMG_0780.jpeg
.


Une petite vidéo ....

.
IMG_0783.MOV
.



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);
  }
}

:tire langue

Re: ESP 332 avec écran

Posté : 04 oct. 2026, 15:17
par Clem68
:bienv: C’est tout de même réussi. J’ai l’impression que chaque fois que l’on commande ce genre de composant avec un code fourni, cela ne marche jamais. Il faut toujours le triturer.

Tu as un projet futur avec cet esp?

@+

Re: ESP 332 avec écran

Posté : 04 oct. 2026, 16:44
par likiki
Pas de projet immédiat, mais il vas bien aller quelque part. :siffle:

Re: ESP 332 avec écran

Posté : 04 oct. 2026, 17:53
par ramasoft
J'adore la patte du chien en dessous :cooooool:
:mdr: :mdr:


Ton écran étant un ST7789, tu peux te baser sur le code que j'avais fait pour le panneau publicitaire, il y a juste à adapter la résolution.
Pour la bibliothèque je te conseille d'utiliser TFT_eSPI qui est plus performante que celle d'Adafruit.
Elle utilise un fichier externe de configuration: User_Setup.h qu'il faut adapter à l'écran utilisé.
Elle gère aussi les ST7735 et une bonne dizaine d'autres écrans.

Il y a toutes les explications dans le sujet: viewtopic.php?t=2051

Re: ESP 332 avec écran

Posté : 04 oct. 2026, 17:57
par bunny94
:PetitPoucejpg: :bienv: Christian

Re: ESP 332 avec écran

Posté : 04 oct. 2026, 18:07
par likiki
:merciiii: Alain.

:merciiii: Patrick, oui, ton sujet est une mine d'or pour ce type d'écran.

Là c'estait histoire de tester l'écran.

:tire langue