Test ePaper Waveshare 1.54

Ich habe das Display mal getestet.

Ist eigentlich für 3,3V.
Als Betriebsspannung habe ich auch die 3,3V angelegt. Die Eingänge sollen 5V tolerant sein. Auf Dauer wohl besser mit Levelshifter.

Ein Anschlusskabel wird mitgeliefert. Ich habe es so hier an den Arduino Uno angeschlossen.
Die dort angegebene Library habe ich nicht zum Laufen bekommen. Ich habe mir die Lib & BsplCode von hier geladen.

Funktioniert. Sehr gut lesbare Anzeige.
Aber mit Einschränkung beim Uno. Der Speicher ist beim Uno recht klein um z.B. das ganze Display mit Text füllen zu können. Es gehen nur 3 Zeilen auf einmal. Sonst muss man den Umweg gehen und jede Zeile einzeln hochladen. Das dauert dann etwas. Mit dem ESP habe ich noch nicht probiert - sollte aber besser gehen, weil mehr Speicher & 3,3V.

Das Interessante ist: Die Anzeige bleibt auch bei Sleep oder Stromausfall weiterhin angezeigt - eben ePaper.

Macht sich sicherlich gut um z.B. ein batteriebetriebenes DIY zu betreiben. Also nach dem Motto: µP nach 10min aufwecken, Temperatur holen und anzeigen und dann kpl. wieder auf sleep schalten - Anzeige bleibt erhalten.

gut zu wissen :slight_smile:

Hatte mit dieses Display bei der Make Munich gekauft und schon befürchtet das es ein Fehlkauf sein würde, weil es mit Arduino nicht angesteuert werden kann (wurde für Raspberry beworben).
Danke für die Info.
Grüße Uwe

Hi

Na da habe ich ja Glück, daß ich Das bisher nicht wusste ...
Dieses Display läuft an einem Nano mit Beispiel-Code und zählt Sekunden hoch.
Klar sollte sein, daß ein Grafik-Display halt mehr Speicher braucht, als ein 1602.

Meine ePapers machen nicht wirklich Sinnvolles, aber immerhin klappen Sie bis her.

Ich schaue Mal, ob ich noch ein Foto dabei gepackt bekomme ...

MfG
Edit
Lib:github, soonuse, epd-library-arduino
Beispiel auf Sekunden-Uhr 'umgestrickt', ZIP




epd1in54-demo-postmaster_ino.zip (6.41 KB)

postmaster-ino:
Na da habe ich ja Glück, daß ich Das bisher nicht wusste ...
Dieses Display läuft an einem Nano mit Beispiel-Code und zählt Sekunden hoch.

Wenn Du es im Gegensatz zu stoni99 mit den Beispiellibs zum Laufen bekommen hast, wären bestimmt alle an Deinem Code interessiert und natürlich den Links zu den Libs.

Gruß Tommy

Hi

Habe im obigen Post das ganze Zeug eingefügt.
Wirklich produktiv nutze ich das Display nicht wirklich - aber immerhin zeigt's was an :slight_smile:
Hoffe, die Beinchen vom Nano kann man abzählen - da die Drähte des ePaper-Stecker verschiedenfarbig sind und auf meinem ePaper die Pins beschriftet sind, sollte sich Das aber zusammen bekommen lassen.

Das Spinnengeweb an GND (SW) ist eine optische Täuschung ... bestimmt :wink:

MfG

postmaster-ino:
Das Spinnengeweb an GND (SW) ist eine optische Täuschung ... bestimmt :wink:

Löten ist was für Anfänger, heute wird gespidert! :wink:

Tommy56:
Wenn Du es im Gegensatz zu stoni99 mit den Beispiellibs zum Laufen bekommen hast, wären bestimmt alle an Deinem Code interessiert und natürlich den Links zu den Libs.

Gruß Tommy

Die EPD-Lib Demo läuft bei mir auch. Aber nicht diese GxEPD-Lib & Demo.

Hallo,

ich habe hier nur 1x 2,9" b/w im "Einsatz" mit einer relativ alten GxEPD-Lib, stabil als Uhr.
Ein 2,9" 3-farbig liegt rum, mal getestet mit besagter Lib, läuft.
In der aktuellen Version der GxEPD-Lib hat er was geändert, ich war aber zu faul, das anzupassen.
Mein Bekannter hat sein 2,9" mit der GxEPD2 laufen, keine Probleme.
Aaaaber: alles am ESP8266/ESP32, Displays, die gern etwas Ram haben wollen, hänge ich an AVR garnicht erst ran...

E-Paper.jpg
Die Uhr läuft mit Sekundenanzeige und partial-Refresh damit es nicht flackert. Die Sekinde schafft sie nicht wirklich, Refreshzeit ist knapp darüber, also gibt es ab und an eben einen 2-Sekundensprung.

Gruß aus Berlin
Michael

E-Paper.jpg

amithlon:
...partial-Refresh damit es nicht flackert. /quote]

Was ist das? Wie geht das?

Hallo,

stoni99:

amithlon:
...partial-Refresh damit es nicht flackert. /quote]

Was ist das? Wie geht das?

Das Display muß das können, prinzipiell wohl sowieso nur die s/w, die 3-farbigen generell nicht.
Ich habe jtzt nur in meiner alten Version der GcEPD-Lib geschaut, Dein Display dürfte dort ja das GxGDEP015OC1 sein, das scheint es zu können:
// paged drawing to screen rectangle at (x,y) using partial update
void drawPagedToWindow(void (*drawCallback)(void), uint16_t x, uint16_t y, uint16_t w, uint16_t h);
Ab und an muß man einen kompletten Refresh machen, sonst vergisst es einzelne Pixel bzw. der Kontrast wird ungleichmäßig. Ich mache den so alle 5 Minuten, ich habe es nicht weiter ausgetestet, bleibenden Schaden richtet es ja nicht an, nur die aktuelle Darstellung kann leiden.

Gruß aus Berlin
Michael

Ich habe in meiner Wühlkiste noch einen Mega 2560 gefunden. Ich möchte das ePaper mal am Mega probieren. Hat ja auch mehr SRam.

Wie ist das dort mit dem SPI Bus? Gleiche Anschlüsse wie beim UNO? Oder müssen Anpassungen vorgenommen werden? Anschluß Uno hier.

Ich habe bisher noch nix weiter mit dem Mega gemacht.

Hi

Nein, die Anschlüsse sind Andere.
Siehe hierzu
Arduino Reference, SPI

MfG

Edit
Rechtschreibung ... Vorschau rules ...

Danke!

Geht aber leider auch nicht.
Pin 12 ist im Beispielanschluss mit dem UNO nicht belegt?!

Hi

Pin12 ist beim Uno MISO - Master IN, Slave OUT.
Da das Display keine Daten zurück gibt, muß der Uno Da auch nicht mitlesen.

MfG

Ich habe es mal am ICSP angeschlossen - jetzt geht es. THX!

Mit den Mega kann ich auch im Sketch mehr Speicher reservieren und damit auch das Display mit einmal vollschreiben.

...
unsigned char image[4096];
...
...
  //2x löschen notwendig damit Display frei wird
  epd.ClearFrameMemory(0xFF);   // bit set = white, bit reset = black
  epd.DisplayFrame();
  epd.ClearFrameMemory(0xFF);   // bit set = white, bit reset = black
  epd.DisplayFrame();

  paint.SetWidth(200);
  paint.SetHeight(160);
  
  paint.Clear(UNCOLORED);
  epd.DisplayFrame();   //Anzeigen
  paint.DrawStringAt(0, 0, "1 Schiebetor", &Font16, COLORED);
  paint.DrawStringAt(0, 12, "2 Schiebetor", &Font16, COLORED);
  paint.DrawStringAt(0, 24, "3 Schiebetor", &Font16, COLORED);
  paint.DrawStringAt(0, 36, "4 Schiebetor", &Font16, COLORED);
  paint.DrawStringAt(0, 48, "5 Schiebetor", &Font16, COLORED);
  paint.DrawStringAt(0, 60, "6 Schiebetor", &Font16, COLORED);
  paint.DrawStringAt(0, 72, "7 Schiebetor", &Font16, COLORED);
  paint.DrawStringAt(0, 84, "8 Schiebetor", &Font16, COLORED);
  paint.DrawStringAt(0, 96, "9 Schiebetor", &Font16, COLORED);
  paint.DrawStringAt(0, 108, "10 Schiebetor", &Font16, COLORED);
  paint.DrawStringAt(0, 120, "11 Schiebetor", &Font16, COLORED);
  paint.DrawStringAt(0, 132, "12 Schiebetor", &Font16, COLORED);
  epd.SetFrameMemory(paint.GetImage(), 0, 0, paint.GetWidth(), paint.GetHeight());
  epd.DisplayFrame();   //Anzeigen
...

Was mich noch stört ist dieses Geflacker beim Neuschreiben einer Displayanzeige.

Das macht der merkwürdiger Weise im Democode nicht wenn das Hintergrundbild geladen ist und die Zeit angezeigt wird.

In welchem Verzeichnis steht denn eigentlich diese imagedata.h?

#include <SPI.h>
#include <epd1in54.h>
#include <epdpaint.h>
#include "imagedata.h"

#define COLORED     0
#define UNCOLORED   1
epd.SetFrameMemory(IMAGE_DATA);
  epd.DisplayFrame();
  epd.SetFrameMemory(IMAGE_DATA);
  epd.DisplayFrame();

Ich habe mal versucht dieses vorgegebene Hintergrundbild (IMAGE_DATA) durch ein eigenes zu ersetzen.

Wird leider nur gequirlte Sch... angezeigt. :grin:

Was mache ich falsch?

.....

#include <SPI.h>
#include <epd1in54.h>
#include <epdpaint.h>
//#include "imagedata.h"

#define COLORED     0
#define UNCOLORED   1


const unsigned char gImage_weiss[3556] = { 0X00,0X01,0XC7,0X00,0X8E,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
.......
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,};


unsigned char image[1024];
Paint paint(image, 0, 0);    // width should be the multiple of 8 
Epd epd;
unsigned long time_start_ms;
unsigned long time_now_s;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  if (epd.Init(lut_full_update) != 0) {
      Serial.print("e-Paper init failed");
      return;
  }

 
 
  epd.ClearFrameMemory(0xFF);   // bit set = white, bit reset = black
  epd.DisplayFrame();
  epd.ClearFrameMemory(0xFF);   // bit set = white, bit reset = black
  epd.DisplayFrame();

......

  /** 
   *  there are 2 memory areas embedded in the e-paper display
   *  and once the display is refreshed, the memory area will be auto-toggled,
   *  i.e. the next action of SetFrameMemory will set the other memory area
   *  therefore you have to set the frame memory and refresh the display twice.
   */
  epd.SetFrameMemory(gImage_weiss);
  epd.DisplayFrame();
  epd.SetFrameMemory(gImage_weiss);
  epd.DisplayFrame();

  time_start_ms = millis();
}

void loop() {
  // put your main code here, to run repeatedly:
  time_now_s = (millis() - time_start_ms) / 1000;
  char time_string[] = {'0', '0', ':', '0', '0', '\0'};
  time_string[0] = time_now_s / 60 / 10 + '0';
  time_string[1] = time_now_s / 60 % 10 + '0';
  time_string[3] = time_now_s % 60 / 10 + '0';
  time_string[4] = time_now_s % 60 % 10 + '0';

  paint.SetWidth(32);
  paint.SetHeight(96);
  paint.SetRotate(ROTATE_270);

  paint.Clear(UNCOLORED);
  paint.DrawStringAt(0, 4, time_string, &Font24, COLORED);
  epd.SetFrameMemory(paint.GetImage(), 80, 72, paint.GetWidth(), paint.GetHeight());
  epd.DisplayFrame();

  delay(500);
}

Wir wissen ja nicht, was Du getan hast. Woher sollen wir da wissen, was Du falsch machst?

Gruß Tommy