StatusDisplay ESP8266 ePaper ioBroker

Allgemein

So nach dem ich in einer Geschäftsauflösung einige elektronische Preisschilder bekomme habe diese aber wegen einer verschlüsselung nur für das ausschlachten geeignet sind, hatte ich einige 2,13 und 4,9 inch e-Paper Displays.

Als Controller habe ich mir bei exp-Tech diese hier bestellt

nach diesen angaben einfach anschliesen

  • BUSY -> GPIO4, RST -> GPIO2, DC -> GPIO0, CS -> GPIO15, CLK -> GPIO14, DIN -> GPIO13, GND -> GND, 3.3V -> 3.3V

Einige Bibliotheken benötigt man noch

  1. GxEPD
  2. ESP8266WiFi
  3. PubSubClient

Meine Script habe ich mir aus diesen zwei zusammen bebastelt,

https://github.com/ZinggJM/GxEPD

www.smarthome-tricks.de  übrigens eine mega geniale Seite zum Thema ioBroker und Homeautomatisierung

[codesyntax lang=“php“]

#include <GxEPD.h>
#include <GxGDEW042T2/GxGDEW042T2.cpp>      // 4.2" b/w
#include <GxIO/GxIO_SPI/GxIO_SPI.cpp>
#include <GxIO/GxIO.cpp>
#include <SPI.h>
#include <Wire.h>
#include <PubSubClient.h>
#include <ESP8266WiFi.h>



// Update these with values suitable for your network.
const char* ssid = "SSID";
const char* password = "PASSWORD";
const char* mqtt_server = "IP-des ioBroker";
 
String _DisplayLine1 = "";
String _DisplayLine2 = "";
String _DisplayLine3 = "";
String _DisplayLine4 = "";
String _DisplayLine5 = "";
String _DisplayLine6 = "";
String _DisplayLine7 = "";
String _DisplayLine8 = "";
String _DisplayLine9 = "";


 

 
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;


GxIO_Class io(SPI, /*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2); // arbitrary selection of D3(=0), D4(=2), selected for default of GxEPD_Class
GxEPD_Class display(io /*RST=D4*/ /*BUSY=D2*/); // default selection of D4(=2), D2(=4)


//Schriftarten includieren, https://learn.adafruit.com/adafruit-gfx-graphics-library/using-fonts
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeSans12pt7b.h>
#include <Fonts/FreeMono12pt7b.h>
#include <Fonts/FreeSerif9pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeSerifBold9pt7b.h>

void setup_wifi() {
 
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  Serial.print(".");
  }
 
randomSeed(micros());
 
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}



 
void callback
    (char* topic, byte* payload, unsigned int length) {
    Serial.print("Message arrived [");
    Serial.print(topic);
    Serial.print("] ");
 
if ( strcmp( topic, "display_line1" ) == 0 )
  {
  _DisplayLine1 = "";
  for (int i = 0; i < length; i++) { _DisplayLine1 += (char)payload[i]; }
  }
  
if ( strcmp( topic, "display_line2" ) == 0 )
  {
  _DisplayLine2 = "";
  for (int i = 0; i < length; i++) { _DisplayLine2 += (char)payload[i]; }
  }
 
if ( strcmp( topic, "display_line3" ) == 0 )
  {
  _DisplayLine3 = "";
  for (int i = 0; i < length; i++) { _DisplayLine3 += (char)payload[i]; }
  }
 
if ( strcmp( topic, "display_line4" ) == 0 )
  {
  _DisplayLine4 = "";
  for (int i = 0; i < length; i++) { _DisplayLine4 += (char)payload[i]; }
  }

if ( strcmp( topic, "display_line5" ) == 0 )
  {
  _DisplayLine5 = "";
  for (int i = 0; i < length; i++) { _DisplayLine5 += (char)payload[i]; }
  }

if ( strcmp( topic, "display_line6" ) == 0 )
  {
  _DisplayLine6 = "";
  for (int i = 0; i < length; i++) { _DisplayLine6 += (char)payload[i]; }
  }

if ( strcmp( topic, "display_line7" ) == 0 )
  {
  _DisplayLine7 = "";
  for (int i = 0; i < length; i++) { _DisplayLine7 += (char)payload[i]; }
  }

if ( strcmp( topic, "display_line8" ) == 0 )
  {
  _DisplayLine8 = "";
  for (int i = 0; i < length; i++) { _DisplayLine8 += (char)payload[i]; }
  }

if ( strcmp( topic, "display_line9" ) == 0 )
  {
  _DisplayLine9 = "";
  for (int i = 0; i < length; i++) { _DisplayLine9 += (char)payload[i]; }
  }
}

 
void reconnect() { // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Create a random client ID
  String clientId = "ESP8266Client-";
    clientId += String(random(0xffff), HEX);
    // Attempt to connect
  if (client.connect(clientId.c_str())) {
  Serial.println("connected");
 
  client.subscribe("display_line1");
  client.subscribe("display_line2");
  client.subscribe("display_line3");
  client.subscribe("display_line4");
  client.subscribe("display_line5");
  client.subscribe("display_line6");
  client.subscribe("display_line7");
  client.subscribe("display_line8");
  client.subscribe("display_line9");


  
  } else {
  Serial.print("failed, rc=");
  Serial.print(client.state());
  Serial.println(" try again in 5 seconds");
  // Wait 5 seconds before retrying
  delay(5000);
}
}
}


void setup()
{
  
  Serial.begin(115200);
  Serial.println();
  Serial.println("GxEPD_WiFi_Example");

  setup_wifi();
  client.setServer(mqtt_server, 1883);  //MQTT Port
  client.setCallback(callback);
 


  display.init(115200);
  display.init();                   // e-Ink Display initialisieren
  display.fillScreen(GxEPD_WHITE);  // Display Weiss füllen
  display.setRotation(0);           // Display um 90° drehen
  
  }


void loop()

  {
    display.fillScreen(GxEPD_WHITE);
    delay(500);
    display.fillScreen(GxEPD_WHITE);
    display.setTextColor(GxEPD_BLACK);     // Schriftfarbe Schwarz
    

    // Rechteck mit weissem Hintergrund erstellen
    //X-Position, Y-Position, Breite, Höhe, Farbe
    //display.fillRect(0, 0, 200, 128, GxEPD_WHITE); //Xpos,Ypos,box-w,box-h

    // Überschrift
    display.setFont(&FreeMonoBold18pt7b);  // Schrift definieren
    display.setCursor(35, 25);
    display.print("ioBroker Display");
    // URL
    display.setFont(&FreeMonoBold12pt7b);  // Schrift definieren
    display.setCursor(80, 50);
    //display.print("www.ossilampe.de");
    // Zeile 1
    display.setFont(&FreeSerif9pt7b);  // Schrift definieren
    display.setCursor(15, 90);
    display.print("-");
    display.setCursor(30, 90);
    display.print(_DisplayLine1.c_str());
    // Zeile 2
    display.setCursor(15, 110);
    display.print("-");    
    display.setCursor(30, 110);
    display.print(_DisplayLine2.c_str());
    // Zeile 3
    display.setCursor(15, 130);
    display.print("-");    
    display.setCursor(30, 130);
    display.print(_DisplayLine3.c_str());
    // Zeile 4
    display.setCursor(15, 150);
    display.print("-");    
    display.setCursor(30, 150);
    display.print(_DisplayLine4.c_str());    
    // Zeile 5
    display.setCursor(15, 170);
    display.print("-");    
    display.setCursor(30, 170);
    display.print(_DisplayLine5.c_str());    
    // Zeile 6
    display.setCursor(15, 190);
    display.print("-");    
    display.setCursor(30, 190);
    display.print(_DisplayLine6.c_str());    
    // Zeile 7
    display.setCursor(15, 210);
    display.print("-");    
    display.setCursor(30, 210);
    display.print(_DisplayLine7.c_str());    
    // Zeile 8
    display.setCursor(15, 230);
    display.print("-");    
    display.setCursor(30, 230);
    display.print(_DisplayLine8.c_str());


    // Fusszeile
    display.setFont(&FreeSerifBold9pt7b);  // Schrift definieren
    display.setCursor(5, 290);
    display.print(_DisplayLine9.c_str());

    // Teil refresh vom  Display
    display.updateWindow(0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, false);
    if (!client.connected()) {
    reconnect();
    }
    
    client.loop();
    ;
    //delay(600000);
     }

[/codesyntax]

12 Gedanken zu „StatusDisplay ESP8266 ePaper ioBroker“

  1. Ich brauche Deine Hilfe,

    absoluter Anfänger, ich habe ein epaper ESP8266 Driver und ein Waveshare 1.54

    ich hab das Board mit dem DemoCode soweit am laufen das die LED blinkt

    wenn ich jetzt Deinen Code lade giebt es Fehlermeldungen, ich weiss mann müsste Deinen Code auf mein Display anpassen. diese drei
    GxEPD
    ESP8266WiFi

    PubSubClient

    habe ich installiert
    Bitte kannst Du mir Zeigen Schritt für Schritt was ich alles über die Adurino IDE laden muss

    Guten Rutsch ins 2020

  2. Guten Abend, Danke sehr für die schnelle Antwort,
    Es kommt …adafruit_gfx.h no such file or directory

    Aber die Adafruit GFX Bibliothek braucht man ja für dieses Display nicht und es kommt auch der include in Deinem Script nicht vor, oder Doch?

    • Hier nochmal das Protokol beim Kompillieren:

      Arduino: 1.8.10 (Windows 7), Board: „Generic ESP8266 Module, 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), dtr (aka nodemcu), 26 MHz, 40MHz, DOUT (compatible), 1MB (FS:64KB OTA:~470KB), 2, nonos-sdk 2.2.1+100 (190703), v2 Lower Memory, Disabled, None, Only Sketch, 115200“

      In file included from C:\Users\gsiw764\Documents\Arduino\epaperGSI\sketch_jan01a\sketch_jan01a.ino:1:0:

      C:\Users\gsiw764\Documents\Arduino\libraries\GxEPD\src/GxEPD.h:19:26: fatal error: Adafruit_GFX.h: No such file or directory

      #include

      ^

      compilation terminated.

      Mehrere Bibliotheken wurden für „GxEPD.h“ gefunden
      Benutzt: C:\Users\gsiw764\Documents\Arduino\libraries\GxEPD
      Mehrere Bibliotheken wurden für „SPI.h“ gefunden
      Benutzt: C:\Users\gsiw764\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\SPI
      exit status 1
      Fehler beim Kompilieren für das Board Generic ESP8266 Module.

      Dieser Bericht wäre detaillierter, wenn die Option
      „Ausführliche Ausgabe während der Kompilierung“
      in Datei -> Voreinstellungen aktiviert wäre.

      • jetzt habe ich die Adafruit Bibliothek installiert, jetzt gehts ein bisschen weiter aber jetzt kommt

        collect2.exe: error: ld returned 1 exit status

  3. Hallo

    Du nutzt die neuste Version von der IDE, könnte sein das diese ein Problem mit irgendwelchen libs hat.. ich habe damals die 1.6.7 verwendet..

  4. Ich brauche nochmal Hilfe,

    jetzt läuft alles so weit, aber ich kann mit dem MQTT Client immer nur 2 Zeilen einlesen, nach der zweiten fängt er wieder bei der ersten an

    15:32:18.292 -> Attempting MQTT connection…connected
    15:32:22.737 -> Message arrived [display_line1]
    Message arrived [display_line2]
    Attempting MQTT connection…connected
    15:33:27.876 -> Message arrived [display_line1]
    Message arrived [display_line2]
    Attempting MQTT connection…connected
    15:34:33.205 -> Message arrived [display_line1] usw….

    was kann das sein?

    Schöne Grüße Gerhard

  5. Hallo Thomas,

    danke für Deine Beschreibung!
    Ich hab mir gerade so ein Driver-Board – allerdings mit schwarz/weiß-Display bestellt:
    https://ossilampe.de/e-paper-esp8266-driver-board-3_600x600
    Das MQTT-Zeugs brauche ich eigentlich nicht, ich möchte nur von der Webseite meiner Zisternen-Füllstandsanzeige ein json-File abrufen und auf dem Display Wasserstand und Füllmenge ausgeben. Das sollte damit doch problemlos machbar sein, oder?
    Bisher bin ich ziemlich blutiger Neuling auf dem Gebiet. Hast Du mir ggf. einen Link, wo so eine Abfrage einer Webseite weiterverarbeitet wird? Ich finde fast immer nur MQTT-Sachen.

    Danke und Grüße,
    Didi

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.