« Afficheur E-paper » : différence entre les versions
Aller à la navigation
Aller à la recherche
Page créée avec « Toujours à la recherche d'un afficheur basse consommation. L'afficheur E-paper remplit son rôle, l'affichage subsiste même sans alimentation, avec une excellente lisibilité, même en plein soleil. Voici un exemple de code pour le tester avec l'ESP32. <pre> #include <GxEPD2_BW.h> #include <Adafruit_GFX.h> #include <Fonts/FreeSans12pt7b.h> // nouvelle police TrueType avec accents // Définition de l'écran 2.13" GxEPD2_BW<GxEPD2_213_BN, GxEPD2_213_BN::HEIGH... » |
(Aucune différence)
|
Dernière version du 29 août 2025 à 10:19
Toujours à la recherche d'un afficheur basse consommation.
L'afficheur E-paper remplit son rôle, l'affichage subsiste même sans alimentation, avec une excellente lisibilité, même en plein soleil.
Voici un exemple de code pour le tester avec l'ESP32.
#include <GxEPD2_BW.h>
#include <Adafruit_GFX.h>
#include <Fonts/FreeSans12pt7b.h> // nouvelle police TrueType avec accents
// Définition de l'écran 2.13"
GxEPD2_BW<GxEPD2_213_BN, GxEPD2_213_BN::HEIGHT> display(GxEPD2_213_BN(5, 17, 16, 4));
const char* textes[] = {
"Le monde change, et il faut changer avec lui. – Jean-Luc Godard",
"La vie est un art, pas une science exacte. – Philippe Starck",
"Oser, c'est se donner la chance de reussir. – Jacques Attali",
"Le bonheur, c'est trouver sa place sans la conquerir. – Andre Comte-Sponville",
"On apprend plus de ses erreurs que de ses succes. – Bernard Werber",
"Vivre, c'est apprendre sans cesse. – Boris Cyrulnik",
"Il faut cultiver l'empathie pour comprendre le monde. – Edgar Morin",
"Chaque jour est une occasion de se reinventer. – Marc Levy",
"Le temps est une ressource qu'on ne peut ni recuperer ni stocker. – Fabrice Midal",
"Savoir s'arreter est parfois la plus grande des forces. – Michel Serres",
"La curiosite est le moteur de l'esprit. – Alain Damasio",
"Le rire est une arme contre la rigidite de la vie. – Florence Foresti",
};
const int nbTextes = sizeof(textes) / sizeof(textes[0]);
// -----------------
// Fonction word wrap précise
// -----------------
void printWrappedAccurate(GxEPD2_BW<GxEPD2_213_BN, GxEPD2_213_BN::HEIGHT>& display,
const char* text, int x, int y, int maxWidth, int lineHeight) {
int cursorX = x;
int cursorY = y;
String word = "";
for (int i = 0; ; i++) {
char c = text[i];
bool end = (c == '\0');
if (c == ' ' || c == '\n' || end) {
if (word.length() > 0) {
int16_t x1, y1;
uint16_t w, h;
display.getTextBounds(word, 0, 0, &x1, &y1, &w, &h);
if (cursorX + w > x + maxWidth) {
cursorX = x;
cursorY += lineHeight;
}
display.setCursor(cursorX, cursorY);
display.print(word);
cursorX += w + 2; // petit espace après mot
word = "";
}
if (c == '\n') {
cursorX = x;
cursorY += lineHeight;
}
if (end) break;
word += ' '; // ajoute espace
} else {
word += c;
}
}
}
// -----------------
// Setup
// -----------------
void setup() {
display.init();
display.setRotation(1);
display.setFullWindow();
}
// -----------------
// Loop
// -----------------
void loop() {
for (int i = 0; i < nbTextes; i++) {
// --- PARTIAL REFRESH : limiter l'effacement complet ---
display.setPartialWindow(0, 0, display.width(), display.height());
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
display.setFont(&FreeSans12pt7b); // police
display.setTextColor(GxEPD_BLACK);
int x = 10, y = 30;
int maxWidth = 230; // largeur max pour l'enroulement du texte
int lineHeight = 26; // interligne un peu plus large
printWrappedAccurate(display, textes[i], x, y, maxWidth, lineHeight);
} while (display.nextPage());
delay(5000); // 5 secondes avant le texte suivant
}
}