Display E-ink

Salve,

è da un po' di tempo che sto usando il mio Arduino MEGA2560 per sperimentare con lo schermo E-ink di Waveshare da 1.54 pollici. Non riesco a capire come mai, anche con il codice esempio della libreria GxEPD alcune immagini riesce a visualizzarle intere e altre le visualizza solo per un quarto.
Ecco il codice che sto usando in allegato:

// mapping suggestion for Arduino MEGA
// BUSY -> 7, RST -> 9, DC -> 8, CS-> 53, CLK -> 52, DIN -> 51

// include library, include base class, make path known
#include <GxEPD.h>

// select the display class to use, only one
#include <GxGDEP015OC1/GxGDEP015OC1.h>    // 1.54" b/w

#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxIO/GxIO.h>

// FreeFonts from Adafruit_GFX
#include <Fonts/FreeMonoBold9pt7b.h>
#include <Fonts/FreeSansOblique9pt7b.h>
#include "Image.h"

#include GxEPD_BitmapExamples

#if defined(ARDUINO_AVR_MEGA2560)

// for SPI pin definitions see e.g.:
// C:\Users\xxx\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.21\variants\mega\pins_arduino.h

// select one, depending on your CS connection
GxIO_Class io(SPI, /*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9); // arbitrary selection of 8, 9 selected for default of GxEPD_Class
//GxIO_Class io(SPI, /*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 9); // arbitrary selection of 8, 9, CS on 10 (for CS same as on UNO, for SPI on ICSP use)

GxEPD_Class display(io, /*RST=*/ 9, /*BUSY=*/ 7); // default selection of (9), 7

#else

// for SPI pin definitions see e.g.:
// C:\Users\xxx\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.21\variants\standard\pins_arduino.h

GxIO_Class io(SPI, /*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9); // arbitrary selection of 8, 9 selected for default of GxEPD_Class
GxEPD_Class display(io, /*RST=*/ 9, /*BUSY=*/ 7); // default selection of (9), 7

#endif


//#define DEMO_DELAY 3*60 // seconds
//#define DEMO_DELAY 1*60 // seconds
#define DEMO_DELAY 5


void setup(void)
{
  Serial.begin(115200);
  Serial.println();
  Serial.println("setup");
  display.init(115200); // enable diagnostic output on Serial
  Serial.println("setup done");
}

void loop()
{
  uint8_t x = (display.width() - 64) / 2;
  uint8_t y = 5;
  display.fillScreen(GxEPD_WHITE);
  display.drawExampleBitmap(gImage_test, x, y, 64, 180, GxEPD_BLACK);
  display.update();
  delay(500);
  uint16_t forward = GxEPD::bm_invert | GxEPD::bm_flip_x;
  uint16_t reverse = GxEPD::bm_invert | GxEPD::bm_flip_x | GxEPD::bm_flip_y;
}

E questo è invece il codice dell'immagine:

#ifndef _GxBootExample_H_
#define _GxBootExample_H_

#if defined(ESP8266) || defined(ESP32)
#include <pgmspace.h>
#else
#include <avr/pgmspace.h>
#endif

// 180 x 64 (Boot)
const unsigned char gImage_test[1440] PROGMEM = { /* 0X01,0X01,0XB4,0X00,0X40,0X00, */
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X07,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X01,0X80,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFC,0X01,0XE0,0X1F,0XFF,0XFF,0XFF,0XFF,0XF8,0X10,0XF8,0X0F,0XFF,0XFF,
0XFF,0XFF,0XF8,0X70,0XF8,0X0F,0XFF,0XFF,0XFF,0XFF,0XF0,0X70,0XF8,0X0F,0XFF,0XFF,
};
#endif

P.S. non ho inserito tutto il codice dell' immagine per via della limitazione caratteri

Grazie per chiunque riuscirà ad aiutarmi :wink:

Nessuno?

QUALE e-Ink della Waveshare? Perché, da 1.54", hanno vari modelli con risoluzioni differenti.

Ad esempio, QUESTO ha risoluzione 152x152 e se cerchi di mandarci un immagine 180x64 è chiaro che non la vedi come si deve !

Come librerie stai usando le loro o le hai scaricate da altre parti ?

Guglielmo

Ciao, grazie della risposta :slight_smile:

Il display è quello 152x152. In effetti non avevo pensato alla risoluzione dell'immagine. Le librerie che sto usando sono scaricate da GitHub, proverò anche quelle dal sito waveshare e farò sapere.

Grazie ancora per la risposta :slight_smile:

Ciao, risolto qualkosa? Sono interessato anche io a quei display, eccetto il problema descritto, come si comportano?

Flanker6:
... come si comportano?

Molto bene :slight_smile:

Li uso di dimensioni più grandi, 4.3", monocolore (il tempo di refresh di quelli multicolere è veramente lungo e, su alcune applicazioni, poco utilizzabile) e funzionano benissimo. QUESTO modello si collega via seriale ed ha anche a bordo il lettore SD dove memorizzare le immagini senza doverle trasferire da programma.

Quelli più piccoli si collegano via SPI, ma il discorso non cambia. :smiley:

Guglielmo

Ciao, ho controllato e il mio ha una risoluzione 200x200. Ho provato a ricaricare un immagine di dimensioni 200x200 ma niente, in quel quarto ne visualizza solo una parte completamente sgranata e completamente incomprensibile. Ho visto che hai scritto che quelli piu' piccoli si controllano via SPI, nel codice esempio c'è scritto come si dovrebbe collegare via SPI controllando una cartella di Arduino

// for SPI pin definitions see e.g.:
// C:\Users\xxx\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.21\variants\mega\pins_arduino.h

// select one, depending on your CS connection
GxIO_Class io(SPI, /*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9); // arbitrary selection of 8, 9 selected for default of GxEPD_Class
//GxIO_Class io(SPI, /*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 9); // arbitrary selection of 8, 9, CS on 10 (for CS same as on UNO, for SPI on ICSP use)

GxEPD_Class display(io, /*RST=*/ 9, /*BUSY=*/ 7); // default selection of (9), 7

ma andando a guardare nel mio PC, la cartella non è presente e mi sono quindi collegato all' arduino con la dichiarazione scritta nel codice adatta per l'Arduino MEGA2560

// mapping suggestion for Arduino MEGA
// BUSY -> 7, RST -> 9, DC -> 8, CS-> 53, CLK -> 52, DIN -> 51

Ok, sono riuscito a collegarli via SPI con le porte indicate sul codice e nel sito waveshare. Sfortunatamente il problema permane e sempre come prima anche del codice esempio alcune immagini me le visualizza intere e altre solo una parte. Continuerò a cercare di risolvere il problema. Qualcuno sa cosa potrebbe essere? Grazie

Grazie delle info Guglielmo.
Per quanto riguarda le immagini di Alessio03, io proverei a formattarmi delle immagini mie per capire se è un problema di "formattazione"....Se alcune vanno e altre no....

Ciao,
Ho già provato a trasformare delle immagini scaricate da internet tramite il software "Display2LCD", anche un'immagine completamente nera, ma niente, continua a farmi vedere solo una piccolissima parte in quel quarto di schermo che non c'entra niente con l'immagine tutta nera dato che ci sono "spazi" bianchi.

e display e-ink con interfaccia I2C esistono?

Grazie

droidprova:
e display e-ink con interfaccia I2C esistono?

... non mi sembra di averne mai visti, o SPI (la maggior parte) o seriale (molto pochi).

Guglielmo

Grazie 1000!