- Ziele des Projekts
- Die Hardware
- Benötigte Bauteile
- Konfiguration der Mikrocontroller
- Benötigte Bibliotheken
- Anschluss des Displays
- Grafikfunktionen
- Anzeige der Messdaten als Text
- Anzeige der Messdaten als Text und der mit WiFi ermittelten Zeit der letzten Messung
- Anzeige der Messdaten als Text, mit Symbolen und der mit WiFi ermittelten Zeit der letzten Messung
- Quellen
Ziele des Projekts
Die Messdaten eines DHT-Sensors auf einem 1,54 Zoll E-Ink-Display darstellen
- als Text
- als Text und dem Zeitpunkt der letzten Messung
- als Text mit Symbolen und dem Zeitpunkt der letzten Messung
So sieht es aus:
Die Hardware
Als Elektronisches Papier (E-Paper/-E-Ink) wird die Technik bezeichnet das Aussehen von Tinte auf Papier nachzubilden. Die Anzeige leuchtet nicht selbst, der Inhalt wird solange dargestellt bis eine Änderung erfolgt. Die Anzeige ist träge, ein Wechsel des Inhalts dauert mehrere Sekunden, schnelle Bildwechsel sind nicht möglich.
Das Waveshare 1,54 Zoll E-Ink Display hat eine Auflösung von 200×200 Pixeln und kann die Farben weiß, rot und schwarz darstellen.
Die Sensoren DHT11 und DHT22 messen Temperatur und Luftfeuchtigkeit
Vergleich DHT11/DHT22
DHT11 | DHT22 | |
---|---|---|
Messbereich Temperatur | 0 - +50°C | -40 - +80°C |
Auflösung Temperatur | 1°C | 0,1°C |
Messgenauigkeit Temperatur | ± 2 °C | ± 0,5 °C |
Messbereich Luftfeuchtigkeit | 20 - 90% | 0 - 100% |
Auflösung Luftfeuchtigkeit | 1% | 0,1% |
Messgenauigkeit Luftfeuchtigkeit | ± 5 % | ± 2 % |
Benötigte Bauteile
- ESP32-Mikrocontroller oder ESP8266-Mikrocontroller
- DHT11/DHT22 Temperatursensoren
- Leitungsdrähte
Konfiguration der Mikrocontroller
Benötigte Bibliotheken
Installiere auch die benötigten zusätzlichen Bibliotheken
Anschluss des Displays
Die Pins CLK und DIN (COPI) sind durch den SPI-Bus des jeweiligen Mikrocontrollers festgelegt, die anderen Pins können frei vergeben werden.
Pin | ESP32 WROOM | NodeMCU | ESP32-C6 | Arduino Nano ESP32 |
---|---|---|---|---|
BUSY | 4 | D1 | 11 | D9 |
RST | 22 | D2 | 2 | D7 |
DC | 23 | D6 | 3 | D6 |
CS | 5 | D4 | 18 | D10 |
CLK | 18 (SPI) | D5 (SPI) | 21 (SPI) | D13 (SPI) |
DIN | 23 (SPI) | D7 (SPI) | 19 (SPI) | D11 (SPI) |
GND | GND | GND | GND | GND |
VCC | 3,3V | 3,3V | 3,3V | 3,3V |
Grafikfunktionen
Funktionen der Bibliothek GxEPD2
Schlüsselwort | Parameter | Aktion |
---|---|---|
width(); | Bildschirmbreite feststellen | |
height(); | Bildschirmhöhe feststellen | |
init(); | Display starten | |
setRotation(Richtung); | Richtung = 0 → nicht drehen Richtung = 1 → 90° drehen Richtung = 2 → 180° drehen Richtung = 3 → 270 ° drehen | Bildschirm ausrichten |
fillScreen(Farbe); | Standardfarben: GxEPD_WHITE GxEPD_BLACK GxEPD_RED | Bildschirmhintergrund |
setFullWindow(); | gesamten Bildschirm nutzen | |
setPartialWindow(StartX, StartY, EndeX, EndeY); | Teil des Bildschirm nutzen | |
drawPixel(x, y, Farbe); | einzelnen Pixel zeichnen | |
drawLine(StartX, StartY, EndeX, EndeY, Farbe); | Linie zeichnen | |
drawFastHLine(StartX, StartY, Länge, Farbe); | horizontale Linie zeichnen | |
drawFastVLine(StartX, StartY, Länge, Farbe); | vertikale Linie zeichnen | |
drawRect(StartX, StartY,, Breite, Höhe, Farbe); | Rechteck zeichnen | |
drawRoundRect(StartX, StartY, Breite, Höhe, Eckenradius, Farbe); | abgerundetes Rechteck zeichnen | |
fillRect(StartX, StartY, Breite, Höhe, Füllfarbe); | ausgefülltes Rechteck zeichnen | |
drawCircle(MittelpunkX, MittelpunktY, Radius, Farbe); | Kreis zeichnen | |
fillCircle(MittelpunktX, MittelpunktY, Radius, Füllfarbe); | Ausgefüllten Kreis zeichnen | |
setCursor(x, y); | Cursor setzen | |
setTextSize(Textgröße); | Textgröße bestimmen | |
setTextColor(Farbe); | Textfarbe setzen | |
print("Text"); println("Text"); | Text schreiben | |
setTextWrap(true/false); | false → Text fließt über den Rand des Displays hinaus true → Text wird am Ende umgebrochen | Zeilenumbruch |
drawBitmap(x, y, Bitmap_Array, Breite, Höhe, Farbe); | Bitmap dartsellen |
Beispielprogramm
Das Programm zeigt
- mit der internen Funktion der Bibliothek Text an
- mit der Bibliothek U8g2_for_Adafruit_GFX Text an
Diese Bibliothek verfügt über eine große Auswahl von Schriften in verschiedenen Größen, sie kann im Gegensatz zur internen Textdarstellung auch Sonderzeichen und Umlaute darstellen - Kreise, Linien und Rechtecke
Text mit u8g2 | Kreise | horizontale Linien | abgerundete Rechtecke |
Du musst ab Zeile 10 den entsprechenden Mikrocontroller auswählen.
#include "GxEPD2_3C.h"
#include "U8g2_for_Adafruit_GFX.h"
// Objekt u8g2Schriften
U8G2_FOR_ADAFRUIT_GFX u8g2Schriften;
#define GxEPD2_DISPLAY_CLASS GxEPD2_3C
#define GxEPD2_DRIVER_CLASS GxEPD2_154_Z90c
// ESP32-Wroom
// Anschlüsse: CLK -> 18, DIN -> 23, CS -> 5, DC-> 2, RST -> 22, BUSY -> 4
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/5, /*DC=*/2, /*RST=*/22, /*BUSY=*/4));
// NodeMCU
// CLK - D5, DIN -> D7, CS -> D8, DC -> D6, RST -> D2, BUSY -> D1
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/D4, /*DC=*/D6, /*RST=*/D2, /*BUSY=*/D1));
// ESP32-C6
// Anschlüsse: CLK -> 21, DIN -> 19, CS -> 18, DC-> 3, RST -> 10, BUSY -> 11
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/ 18, /*DC=*/ 3, /*RST=*/2, /*BUSY=*/11));
// Nano ESP32
// Anschlüsse: CLK -> D13, DIN -> D11, CS -> D10, DC-> D6, RST -> D8, BUSY -> D9
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/ D10, /*DC=*/ D6, /*RST=*/ D7, /*BUSY=*/ D9));
void setup()
{
display.init(115200, true, 2, false);
// Schriften von u8g2 display zuordnen
u8g2Schriften.begin(display);
// interne Schriften
Text();
delay(5000);
// u8g2 Schriften
TextFonts();
delay(5000);
// ausgefüllte Kreise
Kreise();
delay(5000);
// horizontale Linien
LinienHorizontal();
delay(5000);
// vertikale Linien
LinienVertikal();
delay(5000);
// abgerundete Rechtecke
Rechtecke();
display.hibernate();
}
void Text()
{
display.setFullWindow();
display.fillScreen(GxEPD_WHITE);
display.firstPage();
do
{
display.setCursor(1, 10);
display.setTextColor(GxEPD_BLACK);
display.setTextSize(2);
display.print("Text");
display.setCursor(1, 40);
display.setTextColor(GxEPD_RED);
display.setTextSize(3);
display.print("Text");
display.setCursor(1, 80);
display.setTextColor(GxEPD_BLACK);
display.setTextSize(4);
display.print("Text");
display.setCursor(1, 120);
display.setTextColor(GxEPD_RED);
display.setTextSize(6);
display.print("Text");
}
while (display.nextPage());
}
// alle Schriften können Umlaute darstellen
void TextFonts()
{
display.setFullWindow();
display.fillScreen(GxEPD_WHITE);
u8g2Schriften.setForegroundColor(GxEPD_BLACK);
u8g2Schriften.setBackgroundColor(GxEPD_WHITE);
display.firstPage();
do
{
u8g2Schriften.setCursor(1, 30);
u8g2Schriften.setFont(u8g2_font_helvB24_tf);
u8g2Schriften.print("Text");
u8g2Schriften.setCursor(1, 70);
u8g2Schriften.setFont(u8g2_font_fub30_tf);
u8g2Schriften.print("Text");
u8g2Schriften.setCursor(1, 120);
u8g2Schriften.setFont(u8g2_font_inb38_mf);
u8g2Schriften.print("Text");
u8g2Schriften.setCursor(1, 190);
u8g2Schriften.setFont(u8g2_font_inb49_mr);
u8g2Schriften.print("Text");
}
while (display.nextPage());
}
void Kreise()
{
display.setFullWindow();
display.fillScreen(GxEPD_WHITE);
display.firstPage();
do
{
int Radius = 5;
int StartX = Radius;
int StartY = 5;
while (StartX < display.width() - Radius)
{
for (int i = StartY; i < display.height() - Radius; i += 15)
{
display.fillCircle(StartX, i, Radius, GxEPD_RED);
delay(1);
}
StartX += 15;
}
}
while (display.nextPage());
}
void LinienHorizontal()
{
display.setFullWindow();
display.fillScreen(GxEPD_WHITE);
do
{
for (int i = 0; i < display.height() - 1; i += 10)
{
display.drawFastHLine(0, i, display.width(), GxEPD_BLACK);
delay(1);
}
}
while (display.nextPage());
}
void LinienVertikal()
{
display.setFullWindow();
display.fillScreen(GxEPD_WHITE);
do
{
for (int i = 0; i < display.width() - 1; i += 10)
{
display.drawFastVLine(i, 0, display.height(), GxEPD_BLACK);
delay(1);
}
}
while (display.nextPage());
}
void Rechtecke()
{
display.setFullWindow();
display.fillScreen(GxEPD_WHITE);
do
{
for (int i = 0; i < display.height() / 2; i += 10)
{
display.drawRoundRect(i, i, display.width() - 2 * i, display.height() - 2 * i, 5, GxEPD_BLACK);
delay(10);
}
}
while (display.nextPage());
}
void loop()
{
// bleibt leer, Programm läuft nur einmal
}
Bitmaps darstellen
Array des Bitmaps erstellen
Bitmaps können nicht direkt auf dem Display dargestellt werden, sie müssen als Array hexadezimaler Werte vorliegen.
Wähle oder erstelle ein Bild mit den maximalen Maßen 200×200 Pixeln. Das Online-Tool 🔗https://javl.github.io/image2cpp/ wandelt das Bild in ein Array um.
Das Programm
Das erstellte Array muss in den Kopf des Programms eingefügt werden.
drawBitmap zeigt das Bild an.
Du musst ab Zeile 8 den entsprechenden Mikrocontroller auswählen.
#include "GxEPD2_3C.h"
// Display-Parameter
// GxEPD2_154_Z90c: Chip SSD1681 Bildschirm: 200x200 3C: 3 Farben
#define GxEPD2_DISPLAY_CLASS GxEPD2_3C
#define GxEPD2_DRIVER_CLASS GxEPD2_154_Z90c
// Board wählen:
// ESP32-Wroom
// Anschlüsse: CLK -> 18, DIN -> 23, CS -> 5, DC -> 2, RST -> 22, BUSY -> 4
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/ 5, /*DC=*/ 2, /*RST=*/ 22, /*BUSY=*/ 4));
// NodeMCU
// CLK - D5, DIN -> D7, CS -> D8, DC -> D6, RST -> D2, BUSY -> D1
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/D4, /*DC=*/ D6, /*RST=*/ D2, /*BUSY=*/ D1));
// ESP32-C6
// Anschlüsse: CLK -> 21, DIN -> 19, CS -> 18, DC -> 3, RST -> 10, BUSY -> 11
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/ 18, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 11));
// Nano ESP32
// Anschlüsse: CLK -> D13, DIN -> D11, CS -> D10, DC-> D6, RST -> D8, BUSY -> D9
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/ D10, /*DC=*/ D6, /*RST=*/ D7, /*BUSY=*/ D9));
const unsigned char Thermometer[] PROGMEM = {
// '231080, 49x100px
0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01,
0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff,
0xe0, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x01, 0xf8, 0x00,
0x00, 0x00, 0x1f, 0x80, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00,
0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c,
0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00,
0x07, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff,
0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,
0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00,
0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07,
0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00,
0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c,
0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00,
0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f,
0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00,
0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x7c, 0x00,
0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x07, 0xe0, 0x7c, 0x00, 0x00, 0x00,
0x1f, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x0f,
0xf0, 0x7c, 0x00, 0x00, 0x03, 0xff, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x0f, 0xf0, 0x7c,
0x00, 0x00, 0x07, 0xff, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x0f, 0xf0, 0x7c, 0x00, 0x00,
0x00, 0x3f, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x1f,
0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x0f, 0xf0,
0x7c, 0x00, 0x00, 0x00, 0x1f, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x0f, 0xf0, 0x7c, 0x00,
0x00, 0x00, 0x1f, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x3f, 0x0f, 0xf0, 0x7e, 0x00, 0x00, 0x00,
0x7f, 0x0f, 0xf0, 0x7f, 0x00, 0x00, 0x01, 0xff, 0x0f, 0xf0, 0x7f, 0xc0, 0x00, 0x03, 0xfe, 0x0f,
0xf0, 0x3f, 0xe0, 0x00, 0x03, 0xf8, 0x0f, 0xf0, 0x1f, 0xe0, 0x00, 0x07, 0xf0, 0x0f, 0xf0, 0x07,
0xf0, 0x00, 0x0f, 0xe0, 0x0f, 0xf0, 0x03, 0xf8, 0x00, 0x0f, 0xc0, 0x1f, 0xfc, 0x01, 0xf8, 0x00,
0x1f, 0x80, 0x7f, 0xfe, 0x01, 0xfc, 0x00, 0x3f, 0x00, 0xff, 0xff, 0x80, 0xfe, 0x00, 0x3f, 0x01,
0xff, 0xff, 0xc0, 0x7e, 0x00, 0x3e, 0x03, 0xff, 0xff, 0xe0, 0x7e, 0x00, 0x7e, 0x07, 0xff, 0xff,
0xe0, 0x3f, 0x00, 0x7c, 0x0f, 0xff, 0xff, 0xf0, 0x3f, 0x00, 0x7c, 0x0f, 0xff, 0xff, 0xf0, 0x3f,
0x00, 0x7c, 0x0f, 0xff, 0xff, 0xf8, 0x1f, 0x00, 0xfc, 0x1f, 0xff, 0xff, 0xf8, 0x1f, 0x80, 0xfc,
0x1f, 0xff, 0xff, 0xf8, 0x1f, 0x80, 0xf8, 0x1f, 0xff, 0xff, 0xf8, 0x1f, 0x80, 0xf8, 0x1f, 0xff,
0xff, 0xf8, 0x1f, 0x80, 0xf8, 0x1f, 0xff, 0xff, 0xf8, 0x1f, 0x80, 0xfc, 0x1f, 0xff, 0xff, 0xf8,
0x1f, 0x80, 0xfc, 0x1f, 0xff, 0xff, 0xf8, 0x1f, 0x80, 0xfc, 0x0f, 0xff, 0xff, 0xf8, 0x1f, 0x80,
0x7c, 0x0f, 0xff, 0xff, 0xf0, 0x3f, 0x00, 0x7c, 0x0f, 0xff, 0xff, 0xf0, 0x3f, 0x00, 0x7e, 0x07,
0xff, 0xff, 0xe0, 0x3f, 0x00, 0x7e, 0x03, 0xff, 0xff, 0xe0, 0x7f, 0x00, 0x3f, 0x01, 0xff, 0xff,
0xc0, 0x7e, 0x00, 0x3f, 0x00, 0xff, 0xff, 0x80, 0xfe, 0x00, 0x1f, 0x80, 0x7f, 0xfe, 0x01, 0xfc,
0x00, 0x1f, 0xc0, 0x1f, 0xf8, 0x01, 0xfc, 0x00, 0x0f, 0xe0, 0x01, 0x80, 0x03, 0xf8, 0x00, 0x0f,
0xf0, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x03, 0xfe, 0x00,
0x00, 0x3f, 0xe0, 0x00, 0x01, 0xff, 0x80, 0x00, 0xff, 0xc0, 0x00, 0x00, 0xff, 0xf0, 0x07, 0xff,
0x80, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x0f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00
};
const unsigned char Uhr [] PROGMEM = {
// 'Uhr, 80x80px
0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff,
0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff,
0xe0, 0x07, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00,
0x00, 0x01, 0xff, 0xf0, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x03, 0xff, 0x80, 0x00, 0x00,
0x01, 0xff, 0xc0, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x0f,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x03, 0xc0, 0x00, 0x0f,
0xf8, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x03, 0xc0, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x7f, 0xc0, 0x00,
0x01, 0x80, 0x00, 0x03, 0xfe, 0x00, 0x00, 0xff, 0x80, 0x70, 0x00, 0x00, 0x0e, 0x01, 0xff, 0x00,
0x00, 0xff, 0x00, 0x70, 0x00, 0x00, 0x0e, 0x00, 0xff, 0x00, 0x01, 0xfe, 0x00, 0x70, 0x00, 0x00,
0x0e, 0x00, 0x7f, 0x80, 0x03, 0xfc, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x3f, 0xc0, 0x03, 0xf8,
0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x1f, 0xc0, 0x07, 0xf0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00,
0x0f, 0xe0, 0x07, 0xf0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x0f, 0xe0, 0x00, 0x00,
0x01, 0x80, 0x00, 0x00, 0x07, 0xf0, 0x0f, 0xc0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x03, 0xf0,
0x1f, 0xc0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x03, 0xf8, 0x1f, 0x80, 0xe0, 0x00, 0x01, 0x80,
0x00, 0x03, 0x81, 0xf8, 0x3f, 0x80, 0xe0, 0x00, 0x01, 0x80, 0x00, 0x03, 0x81, 0xfc, 0x3f, 0x80,
0xe0, 0x00, 0x01, 0x80, 0x00, 0x03, 0x81, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00,
0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0xfe, 0x7e, 0x00, 0x00, 0x00,
0x01, 0x80, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x7e,
0x7e, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x01, 0x80,
0x00, 0x00, 0x00, 0x7e, 0xfe, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00,
0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00,
0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x0c, 0x00, 0x00,
0x01, 0x80, 0x00, 0x00, 0x30, 0x3f, 0xfc, 0x1c, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x78, 0x3f,
0xfc, 0x1c, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x78, 0x3f, 0xfc, 0x0c, 0x00, 0x00, 0x1f, 0x80,
0x00, 0x00, 0x30, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00,
0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00,
0x00, 0x3f, 0xfe, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7e, 0x00, 0x00, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e,
0x7e, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x07, 0xe0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7e, 0x7f, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03,
0x80, 0xfc, 0x3f, 0x81, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x81, 0xfc, 0x1f, 0x80, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x03, 0x81, 0xf8, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8,
0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x07, 0xf0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0xc0, 0x03, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x01, 0xfe, 0x00, 0x70,
0x00, 0x00, 0x0e, 0x00, 0x7f, 0x80, 0x00, 0xff, 0x00, 0x70, 0x00, 0x00, 0x0e, 0x00, 0xff, 0x00,
0x00, 0xff, 0x80, 0x70, 0x00, 0x00, 0x0e, 0x01, 0xff, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x01, 0x80,
0x00, 0x03, 0xfe, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x03, 0xc0, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x1f,
0xf0, 0x00, 0x03, 0xc0, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f,
0xf0, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x03, 0xff, 0x80,
0x00, 0x00, 0x01, 0xff, 0xc0, 0x00, 0x00, 0x01, 0xff, 0xf0, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00,
0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x07,
0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00
};
const unsigned char Arduino [] PROGMEM = {
// 'Arduino, 100x72px
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, 0x0f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf8, 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x00, 0x00, 0x0f, 0xff, 0xf8, 0x7c, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0f,
0xff, 0xf8, 0xfd, 0x24, 0x01, 0x25, 0xc0, 0x24, 0x90, 0x0c, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xfd,
0x20, 0x00, 0x25, 0xc0, 0x04, 0x80, 0x0c, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x01,
0xe0, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfc, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x0e, 0xff, 0xe0,
0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x0c, 0x7f, 0xf1, 0x87, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xc1, 0xff, 0x1f, 0xc7, 0xff, 0xff, 0xfc, 0x00,
0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x07, 0x01, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff,
0xfd, 0x5f, 0xc3, 0xfc, 0xf2, 0x39, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x07, 0xc3,
0xfd, 0xf8, 0xfc, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xf9, 0x9c, 0xc4,
0xff, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xe0, 0x03, 0xc1, 0xf9, 0xf8, 0xec, 0xff, 0xff, 0xff,
0x00, 0x1f, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xfc, 0xf0, 0x7c, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xff,
0xff, 0xe0, 0x03, 0xc3, 0xfc, 0x43, 0x11, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xf0, 0x03,
0xc3, 0xfe, 0x0f, 0x83, 0xf0, 0xc3, 0xfb, 0x80, 0x1f, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xff,
0xff, 0xf0, 0xc3, 0xf9, 0x80, 0x1f, 0xff, 0xff, 0xf0, 0x03, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf9, 0x80, 0x1f, 0xff, 0xff, 0xf0, 0x07, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x1f,
0xff, 0xff, 0xfd, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x08, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0c, 0x7f, 0xf0, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x81, 0x80, 0x00, 0x0f, 0xff, 0xe0, 0x39, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x85, 0x80,
0x00, 0x0f, 0xff, 0xc0, 0x39, 0xff, 0xf8, 0x3d, 0xb6, 0xe4, 0x27, 0x83, 0x80, 0x00, 0x0f, 0xff,
0xe0, 0x79, 0xc3, 0xfc, 0x3f, 0xff, 0xe0, 0x07, 0x81, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xc3,
0xff, 0xff, 0xff, 0xfb, 0xcf, 0xa5, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xff,
0xfb, 0xcf, 0x81, 0x80, 0x00, 0x0f, 0xff, 0xf3, 0x1f, 0xc1, 0xf8, 0x00, 0x7f, 0xfb, 0xcf, 0x81,
0x80, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x7f, 0xf1, 0x8f, 0xa5, 0x80, 0x00, 0x0f,
0xff, 0xff, 0xff, 0xc3, 0xf8, 0x00, 0x7f, 0xe4, 0x27, 0x81, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xff,
0xc3, 0xf8, 0x00, 0xe0, 0xec, 0x37, 0xff, 0x80, 0x00, 0x0f, 0xff, 0xfc, 0x03, 0xff, 0xff, 0xff,
0xf0, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0xff, 0xfc, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x80, 0x00, 0x0f, 0xff, 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
0x0f, 0x00, 0xfc, 0x03, 0xff, 0x5a, 0xad, 0x5a, 0xad, 0x5a, 0xff, 0x80, 0x00, 0x0e, 0x00, 0x18,
0x01, 0xff, 0x52, 0xa1, 0x42, 0xa1, 0x42, 0xff, 0x80, 0x00, 0x0c, 0x00, 0x1c, 0x03, 0xfe, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x0c, 0x00, 0x78, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7f, 0x80, 0x00, 0x0c, 0x00, 0x1c, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80,
0x00, 0x0c, 0x00, 0x1f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x0c, 0x00,
0x7f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x0c, 0x00, 0x1f, 0xff, 0xfe,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0xff, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7f, 0x80, 0x00, 0x0f, 0xff, 0xf8, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f,
0x80, 0x00, 0x0f, 0xff, 0xf8, 0x07, 0xff, 0x52, 0xa5, 0x52, 0xa5, 0x42, 0xff, 0x80, 0x00, 0xff,
0xff, 0xb8, 0x07, 0xff, 0x5e, 0xbf, 0x7e, 0xbd, 0x7e, 0xff, 0x80, 0x00, 0xff, 0xff, 0xfc, 0x07,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0x8f, 0x07, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x80, 0x00, 0xff, 0xff, 0x8e, 0x03, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x80, 0x00,
0xff, 0xff, 0x8c, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x80, 0x00, 0xff, 0xff, 0x8c,
0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x80, 0x00, 0xff, 0xff, 0xfc, 0x01, 0x00, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfd, 0x80, 0x00, 0xff, 0xff, 0xfc, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0xfe, 0x03, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
0x00, 0xff, 0xff, 0xff, 0x07, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xf0,
0x7f, 0xff, 0xff, 0xe0, 0x00, 0x07, 0x80, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0xf0, 0xff, 0xff, 0xff,
0xe9, 0x24, 0x97, 0xa4, 0x92, 0x2c, 0x00, 0x00, 0x0f, 0xfd, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x07,
0x80, 0x00, 0x0c, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
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
};
const unsigned char Laptop [] PROGMEM = {
// 'Laptop, 85x85px
0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f,
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00,
0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00,
0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8,
0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00,
0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00,
0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8,
0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00,
0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00,
0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x37, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb8,
0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x60, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x60, 0x00, 0x01, 0x8c, 0xf9,
0xe7, 0x8f, 0x3c, 0xf9, 0xe3, 0xce, 0xc0, 0x00, 0x01, 0x98, 0xf1, 0xc3, 0x0e, 0x38, 0x71, 0xe3,
0x8c, 0xc0, 0x00, 0x03, 0x18, 0xe3, 0xc7, 0x1e, 0x38, 0xe1, 0xc3, 0x0d, 0x80, 0x00, 0x03, 0x3f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x80, 0x00, 0x06, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfb, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0c,
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x06, 0x00, 0x00, 0x0c, 0x1f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x06, 0x00, 0x00, 0x18, 0x18, 0xe1, 0xc7, 0x1c, 0x38, 0xe1, 0xc6, 0x0c, 0x00, 0x00,
0x18, 0x10, 0xe3, 0x86, 0x1c, 0x78, 0xe3, 0x86, 0x0c, 0x00, 0x00, 0x30, 0x31, 0xe3, 0x8f, 0x3c,
0x79, 0xe3, 0x8c, 0x18, 0x00, 0x00, 0x30, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x18, 0x00,
0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0xe7, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x60,
0x00, 0x00, 0xc6, 0x36, 0x00, 0x00, 0x00, 0x01, 0xe3, 0xc6, 0x60, 0x00, 0x00, 0xcc, 0x36, 0x00,
0x00, 0x00, 0x01, 0xe3, 0x8c, 0xc0, 0x00, 0x01, 0x8c, 0x6c, 0x00, 0x00, 0x00, 0x01, 0xc3, 0x8c,
0xc0, 0x00, 0x01, 0x8f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x80, 0x00, 0x03, 0x0f, 0xcf,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x80, 0x00, 0x03, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x00,
0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x01, 0x80, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00,
0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x03, 0x00,
0x00, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x18,
0x00, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x04,
0x00, 0x00, 0x0c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x18, 0x00, 0x0c, 0x00, 0x00, 0x18, 0x00, 0x00,
0x30, 0x00, 0x00, 0x3f, 0xff, 0xfc, 0x00, 0x00, 0x18, 0x00, 0x00, 0x60, 0x00, 0x00, 0x1f, 0xff,
0xf8, 0x00, 0x00, 0x30, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00
};
void setup()
{
// Bildschirm starten
display.init(115200, true, 2, false);
display.setRotation(2);
// vollständigen Bildschirm nutzen
display.setFullWindow();
display.fillScreen(GxEPD_WHITE);
display.firstPage();
do
{
// x, y, Bild-Array, Breite, Höhe, Farbe
display.drawBitmap(20, 1, Thermometer, 49, 100, GxEPD_BLACK);
display.drawBitmap(90, 1, Uhr, 80, 80, GxEPD_BLACK);
display.drawBitmap(5, 120, Arduino, 100, 72, GxEPD_BLACK);
display.drawBitmap(110, 110, Laptop, 85, 85, GxEPD_BLACK);
} while (display.nextPage());
}
void loop()
{
// bleibt leer, Programm läuft nur einmal
}
Teilbereiche des Bildschirms verwenden
Das Programm zeigt im setup-Teil zunächst auf der linken Seite einen Text an. Im loop-Teil wird mit setPartialWindow ein Bildschirmbereich definiert. Dort werden die Bitmaps angezeigt, der linke Teil des Bildschirms bleibt unverändert.
Du musst ab Zeile 9 den entsprechenden Mikrocontroller auswählen.
#include "GxEPD2_3C.h"
#include "U8g2_for_Adafruit_GFX.h"
// Display-Parameter
// GxEPD2_154_Z90c: Chip SSD1681 Bildschirm: 200x200
#define GxEPD2_DISPLAY_CLASS GxEPD2_3C
#define GxEPD2_DRIVER_CLASS GxEPD2_154_Z90c
// ESP32-Wroom
// Anschlüsse: CLK -> 18, DIN -> 23, CS -> 5, DC-> 2, RST -> 22, BUSY -> 4
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/5, /*DC=*/2, /*RST=*/22, /*BUSY=*/4));
// NodeMCU
// CLK - D5, DIN -> D7, CS -> D8, DC -> D6, RST -> D2, BUSY -> D1
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/D4, /*DC=*/D6, /*RST=*/D2, /*BUSY=*/D1));
// ESP32-C6
// Anschlüsse: CLK -> 21, DIN -> 19, CS -> 18, DC-> 3, RST -> 10, BUSY -> 11
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/ 18, /*DC=*/ 3, /*RST=*/2, /*BUSY=*/11));
// Nano ESP32
// Anschlüsse: CLK -> D13, DIN -> D11, CS -> D10, DC-> D6, RST -> D8, BUSY -> D9
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/ D10, /*DC=*/ D6, /*RST=*/ D7, /*BUSY=*/ D9));
// Objekt u8g2Schriften
U8G2_FOR_ADAFRUIT_GFX u8g2Schriften;
const unsigned char Thermometer[] PROGMEM = {
// '231080, 49x100px
0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01,
0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff,
0xe0, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x01, 0xf8, 0x00,
0x00, 0x00, 0x1f, 0x80, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00,
0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c,
0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00,
0x07, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff,
0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,
0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00,
0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07,
0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00,
0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c,
0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00,
0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f,
0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00,
0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x7c, 0x00,
0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x07, 0xe0, 0x7c, 0x00, 0x00, 0x00,
0x1f, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x0f,
0xf0, 0x7c, 0x00, 0x00, 0x03, 0xff, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x0f, 0xf0, 0x7c,
0x00, 0x00, 0x07, 0xff, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x07, 0xff, 0x0f, 0xf0, 0x7c, 0x00, 0x00,
0x00, 0x3f, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x1f,
0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x0f, 0xf0,
0x7c, 0x00, 0x00, 0x00, 0x1f, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x0f, 0xf0, 0x7c, 0x00,
0x00, 0x00, 0x1f, 0x0f, 0xf0, 0x7c, 0x00, 0x00, 0x00, 0x3f, 0x0f, 0xf0, 0x7e, 0x00, 0x00, 0x00,
0x7f, 0x0f, 0xf0, 0x7f, 0x00, 0x00, 0x01, 0xff, 0x0f, 0xf0, 0x7f, 0xc0, 0x00, 0x03, 0xfe, 0x0f,
0xf0, 0x3f, 0xe0, 0x00, 0x03, 0xf8, 0x0f, 0xf0, 0x1f, 0xe0, 0x00, 0x07, 0xf0, 0x0f, 0xf0, 0x07,
0xf0, 0x00, 0x0f, 0xe0, 0x0f, 0xf0, 0x03, 0xf8, 0x00, 0x0f, 0xc0, 0x1f, 0xfc, 0x01, 0xf8, 0x00,
0x1f, 0x80, 0x7f, 0xfe, 0x01, 0xfc, 0x00, 0x3f, 0x00, 0xff, 0xff, 0x80, 0xfe, 0x00, 0x3f, 0x01,
0xff, 0xff, 0xc0, 0x7e, 0x00, 0x3e, 0x03, 0xff, 0xff, 0xe0, 0x7e, 0x00, 0x7e, 0x07, 0xff, 0xff,
0xe0, 0x3f, 0x00, 0x7c, 0x0f, 0xff, 0xff, 0xf0, 0x3f, 0x00, 0x7c, 0x0f, 0xff, 0xff, 0xf0, 0x3f,
0x00, 0x7c, 0x0f, 0xff, 0xff, 0xf8, 0x1f, 0x00, 0xfc, 0x1f, 0xff, 0xff, 0xf8, 0x1f, 0x80, 0xfc,
0x1f, 0xff, 0xff, 0xf8, 0x1f, 0x80, 0xf8, 0x1f, 0xff, 0xff, 0xf8, 0x1f, 0x80, 0xf8, 0x1f, 0xff,
0xff, 0xf8, 0x1f, 0x80, 0xf8, 0x1f, 0xff, 0xff, 0xf8, 0x1f, 0x80, 0xfc, 0x1f, 0xff, 0xff, 0xf8,
0x1f, 0x80, 0xfc, 0x1f, 0xff, 0xff, 0xf8, 0x1f, 0x80, 0xfc, 0x0f, 0xff, 0xff, 0xf8, 0x1f, 0x80,
0x7c, 0x0f, 0xff, 0xff, 0xf0, 0x3f, 0x00, 0x7c, 0x0f, 0xff, 0xff, 0xf0, 0x3f, 0x00, 0x7e, 0x07,
0xff, 0xff, 0xe0, 0x3f, 0x00, 0x7e, 0x03, 0xff, 0xff, 0xe0, 0x7f, 0x00, 0x3f, 0x01, 0xff, 0xff,
0xc0, 0x7e, 0x00, 0x3f, 0x00, 0xff, 0xff, 0x80, 0xfe, 0x00, 0x1f, 0x80, 0x7f, 0xfe, 0x01, 0xfc,
0x00, 0x1f, 0xc0, 0x1f, 0xf8, 0x01, 0xfc, 0x00, 0x0f, 0xe0, 0x01, 0x80, 0x03, 0xf8, 0x00, 0x0f,
0xf0, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x03, 0xfe, 0x00,
0x00, 0x3f, 0xe0, 0x00, 0x01, 0xff, 0x80, 0x00, 0xff, 0xc0, 0x00, 0x00, 0xff, 0xf0, 0x07, 0xff,
0x80, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x0f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00
};
const unsigned char Uhr [] PROGMEM = {
// 'Uhr, 80x80px
0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff,
0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff,
0xe0, 0x07, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00,
0x00, 0x01, 0xff, 0xf0, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x03, 0xff, 0x80, 0x00, 0x00,
0x01, 0xff, 0xc0, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x0f,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x03, 0xc0, 0x00, 0x0f,
0xf8, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x03, 0xc0, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x7f, 0xc0, 0x00,
0x01, 0x80, 0x00, 0x03, 0xfe, 0x00, 0x00, 0xff, 0x80, 0x70, 0x00, 0x00, 0x0e, 0x01, 0xff, 0x00,
0x00, 0xff, 0x00, 0x70, 0x00, 0x00, 0x0e, 0x00, 0xff, 0x00, 0x01, 0xfe, 0x00, 0x70, 0x00, 0x00,
0x0e, 0x00, 0x7f, 0x80, 0x03, 0xfc, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x3f, 0xc0, 0x03, 0xf8,
0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x1f, 0xc0, 0x07, 0xf0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00,
0x0f, 0xe0, 0x07, 0xf0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x0f, 0xe0, 0x00, 0x00,
0x01, 0x80, 0x00, 0x00, 0x07, 0xf0, 0x0f, 0xc0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x03, 0xf0,
0x1f, 0xc0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x03, 0xf8, 0x1f, 0x80, 0xe0, 0x00, 0x01, 0x80,
0x00, 0x03, 0x81, 0xf8, 0x3f, 0x80, 0xe0, 0x00, 0x01, 0x80, 0x00, 0x03, 0x81, 0xfc, 0x3f, 0x80,
0xe0, 0x00, 0x01, 0x80, 0x00, 0x03, 0x81, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00,
0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0xfe, 0x7e, 0x00, 0x00, 0x00,
0x01, 0x80, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x7e,
0x7e, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x01, 0x80,
0x00, 0x00, 0x00, 0x7e, 0xfe, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00,
0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00,
0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x0c, 0x00, 0x00,
0x01, 0x80, 0x00, 0x00, 0x30, 0x3f, 0xfc, 0x1c, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x78, 0x3f,
0xfc, 0x1c, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x78, 0x3f, 0xfc, 0x0c, 0x00, 0x00, 0x1f, 0x80,
0x00, 0x00, 0x30, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00,
0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00,
0x00, 0x3f, 0xfe, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7e, 0x00, 0x00, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e,
0x7e, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x07, 0xe0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7e, 0x7f, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03,
0x80, 0xfc, 0x3f, 0x81, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x81, 0xfc, 0x1f, 0x80, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x03, 0x81, 0xf8, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8,
0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x07, 0xf0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0xc0, 0x03, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x01, 0xfe, 0x00, 0x70,
0x00, 0x00, 0x0e, 0x00, 0x7f, 0x80, 0x00, 0xff, 0x00, 0x70, 0x00, 0x00, 0x0e, 0x00, 0xff, 0x00,
0x00, 0xff, 0x80, 0x70, 0x00, 0x00, 0x0e, 0x01, 0xff, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x01, 0x80,
0x00, 0x03, 0xfe, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x03, 0xc0, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x1f,
0xf0, 0x00, 0x03, 0xc0, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f,
0xf0, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x03, 0xff, 0x80,
0x00, 0x00, 0x01, 0xff, 0xc0, 0x00, 0x00, 0x01, 0xff, 0xf0, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00,
0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x07,
0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00
};
const unsigned char Arduino [] PROGMEM = {
// 'Arduino, 100x72px
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, 0x0f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf8, 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x00, 0x00, 0x0f, 0xff, 0xf8, 0x7c, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0f,
0xff, 0xf8, 0xfd, 0x24, 0x01, 0x25, 0xc0, 0x24, 0x90, 0x0c, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xfd,
0x20, 0x00, 0x25, 0xc0, 0x04, 0x80, 0x0c, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x01,
0xe0, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfc, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x0e, 0xff, 0xe0,
0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x0c, 0x7f, 0xf1, 0x87, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xc1, 0xff, 0x1f, 0xc7, 0xff, 0xff, 0xfc, 0x00,
0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x07, 0x01, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff,
0xfd, 0x5f, 0xc3, 0xfc, 0xf2, 0x39, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x07, 0xc3,
0xfd, 0xf8, 0xfc, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xf9, 0x9c, 0xc4,
0xff, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xe0, 0x03, 0xc1, 0xf9, 0xf8, 0xec, 0xff, 0xff, 0xff,
0x00, 0x1f, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xfc, 0xf0, 0x7c, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xff,
0xff, 0xe0, 0x03, 0xc3, 0xfc, 0x43, 0x11, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xf0, 0x03,
0xc3, 0xfe, 0x0f, 0x83, 0xf0, 0xc3, 0xfb, 0x80, 0x1f, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xff,
0xff, 0xf0, 0xc3, 0xf9, 0x80, 0x1f, 0xff, 0xff, 0xf0, 0x03, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf9, 0x80, 0x1f, 0xff, 0xff, 0xf0, 0x07, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x1f,
0xff, 0xff, 0xfd, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x08, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0c, 0x7f, 0xf0, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x81, 0x80, 0x00, 0x0f, 0xff, 0xe0, 0x39, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x85, 0x80,
0x00, 0x0f, 0xff, 0xc0, 0x39, 0xff, 0xf8, 0x3d, 0xb6, 0xe4, 0x27, 0x83, 0x80, 0x00, 0x0f, 0xff,
0xe0, 0x79, 0xc3, 0xfc, 0x3f, 0xff, 0xe0, 0x07, 0x81, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xc3,
0xff, 0xff, 0xff, 0xfb, 0xcf, 0xa5, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xff,
0xfb, 0xcf, 0x81, 0x80, 0x00, 0x0f, 0xff, 0xf3, 0x1f, 0xc1, 0xf8, 0x00, 0x7f, 0xfb, 0xcf, 0x81,
0x80, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x7f, 0xf1, 0x8f, 0xa5, 0x80, 0x00, 0x0f,
0xff, 0xff, 0xff, 0xc3, 0xf8, 0x00, 0x7f, 0xe4, 0x27, 0x81, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xff,
0xc3, 0xf8, 0x00, 0xe0, 0xec, 0x37, 0xff, 0x80, 0x00, 0x0f, 0xff, 0xfc, 0x03, 0xff, 0xff, 0xff,
0xf0, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0xff, 0xfc, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x80, 0x00, 0x0f, 0xff, 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
0x0f, 0x00, 0xfc, 0x03, 0xff, 0x5a, 0xad, 0x5a, 0xad, 0x5a, 0xff, 0x80, 0x00, 0x0e, 0x00, 0x18,
0x01, 0xff, 0x52, 0xa1, 0x42, 0xa1, 0x42, 0xff, 0x80, 0x00, 0x0c, 0x00, 0x1c, 0x03, 0xfe, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x0c, 0x00, 0x78, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7f, 0x80, 0x00, 0x0c, 0x00, 0x1c, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80,
0x00, 0x0c, 0x00, 0x1f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x0c, 0x00,
0x7f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x0c, 0x00, 0x1f, 0xff, 0xfe,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0xff, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7f, 0x80, 0x00, 0x0f, 0xff, 0xf8, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f,
0x80, 0x00, 0x0f, 0xff, 0xf8, 0x07, 0xff, 0x52, 0xa5, 0x52, 0xa5, 0x42, 0xff, 0x80, 0x00, 0xff,
0xff, 0xb8, 0x07, 0xff, 0x5e, 0xbf, 0x7e, 0xbd, 0x7e, 0xff, 0x80, 0x00, 0xff, 0xff, 0xfc, 0x07,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0x8f, 0x07, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x80, 0x00, 0xff, 0xff, 0x8e, 0x03, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x80, 0x00,
0xff, 0xff, 0x8c, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x80, 0x00, 0xff, 0xff, 0x8c,
0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x80, 0x00, 0xff, 0xff, 0xfc, 0x01, 0x00, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfd, 0x80, 0x00, 0xff, 0xff, 0xfc, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0xfe, 0x03, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
0x00, 0xff, 0xff, 0xff, 0x07, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xf0,
0x7f, 0xff, 0xff, 0xe0, 0x00, 0x07, 0x80, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0xf0, 0xff, 0xff, 0xff,
0xe9, 0x24, 0x97, 0xa4, 0x92, 0x2c, 0x00, 0x00, 0x0f, 0xfd, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x07,
0x80, 0x00, 0x0c, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
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
};
const unsigned char Laptop [] PROGMEM = {
// 'Laptop, 85x85px
0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f,
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00,
0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00,
0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8,
0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00,
0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00,
0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8,
0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0xf8, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00,
0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00,
0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x37, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb8,
0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x60, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x60, 0x00, 0x01, 0x8c, 0xf9,
0xe7, 0x8f, 0x3c, 0xf9, 0xe3, 0xce, 0xc0, 0x00, 0x01, 0x98, 0xf1, 0xc3, 0x0e, 0x38, 0x71, 0xe3,
0x8c, 0xc0, 0x00, 0x03, 0x18, 0xe3, 0xc7, 0x1e, 0x38, 0xe1, 0xc3, 0x0d, 0x80, 0x00, 0x03, 0x3f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x80, 0x00, 0x06, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfb, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0c,
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x06, 0x00, 0x00, 0x0c, 0x1f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x06, 0x00, 0x00, 0x18, 0x18, 0xe1, 0xc7, 0x1c, 0x38, 0xe1, 0xc6, 0x0c, 0x00, 0x00,
0x18, 0x10, 0xe3, 0x86, 0x1c, 0x78, 0xe3, 0x86, 0x0c, 0x00, 0x00, 0x30, 0x31, 0xe3, 0x8f, 0x3c,
0x79, 0xe3, 0x8c, 0x18, 0x00, 0x00, 0x30, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x18, 0x00,
0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0xe7, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x60,
0x00, 0x00, 0xc6, 0x36, 0x00, 0x00, 0x00, 0x01, 0xe3, 0xc6, 0x60, 0x00, 0x00, 0xcc, 0x36, 0x00,
0x00, 0x00, 0x01, 0xe3, 0x8c, 0xc0, 0x00, 0x01, 0x8c, 0x6c, 0x00, 0x00, 0x00, 0x01, 0xc3, 0x8c,
0xc0, 0x00, 0x01, 0x8f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x80, 0x00, 0x03, 0x0f, 0xcf,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x80, 0x00, 0x03, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x00,
0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x01, 0x80, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00,
0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x03, 0x00,
0x00, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x18,
0x00, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x04,
0x00, 0x00, 0x0c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x18, 0x00, 0x0c, 0x00, 0x00, 0x18, 0x00, 0x00,
0x30, 0x00, 0x00, 0x3f, 0xff, 0xfc, 0x00, 0x00, 0x18, 0x00, 0x00, 0x60, 0x00, 0x00, 0x1f, 0xff,
0xf8, 0x00, 0x00, 0x30, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00
};
void setup()
{
// Bildschirm starten
display.init(115200, true, 2, false);
display.setRotation(1);
// Schriften von u8g2 display zuordnen
u8g2Schriften.begin(display);
display.firstPage();
do
{
display.fillScreen(GxEPD_WHITE);
u8g2Schriften.setFont(u8g2_font_fub20_tr);
u8g2Schriften.setForegroundColor(GxEPD_BLACK);
u8g2Schriften.setBackgroundColor(GxEPD_WHITE);
u8g2Schriften.setCursor(10, 100);
u8g2Schriften.print("Bild ");
}
while (display.nextPage());
}
void loop()
{
display.setPartialWindow(90, 50, 200, 150);
display.firstPage();
do
{
display.fillScreen(GxEPD_WHITE);
display.drawBitmap(100, 50, Thermometer, 49, 100, GxEPD_BLACK);
}
while(display.nextPage());
delay(5000);
do
{
display.fillScreen(GxEPD_WHITE);
display.drawBitmap(100, 50, Uhr, 80, 80, GxEPD_BLACK);
}
while(display.nextPage());
delay(5000);
do
{
display.fillScreen(GxEPD_WHITE);
display.drawBitmap(100, 50, Arduino, 100, 72, GxEPD_BLACK);
}
while(display.nextPage());
delay(5000);
do
{
display.fillScreen(GxEPD_WHITE);
display.drawBitmap(100, 50, Laptop, 85, 85, GxEPD_BLACK);
}
while(display.nextPage());
delay(5000);
}
Anzeige der Messdaten als Text
Du musst in Zeile 9 den Pin des DHT-Sensors, in Zeile 13 den Typ des DHT-Sensors anpassen und ab Zeile 26 den passenden Mikrocontroller auswählen.
#include "GxEPD2_3C.h"
#include "DHT.h"
#include "U8g2_for_Adafruit_GFX.h"
// Objekt u8g2Schriften
U8G2_FOR_ADAFRUIT_GFX u8g2Schriften;
// freien Pin auf dem Board wählen
int SENSOR_DHT = 9;
// Sensortyp festlegen
// DHT22
#define SensorTyp DHT22
// DHT11
// #define SensorTyp DHT11
// Sensor einen Namen zuweisen
DHT dht(SENSOR_DHT, SensorTyp);
// Display-Parameter
// GxEPD2_154_Z90c: Chip SSD1681 Bildschirm: 200x200
#define GxEPD2_DISPLAY_CLASS GxEPD2_3C
#define GxEPD2_DRIVER_CLASS GxEPD2_154_Z90c
// Board wählen:
// ESP32-Wroom
// Anschlüsse: CLK -> 18, DIN -> 23, CS -> 5, DC -> 2, RST -> 22, BUSY -> 4
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/ 5, /*DC=*/ 2, /*RST=*/ 22, /*BUSY=*/ 4));
// NodeMCU
// CLK - D5, DIN -> D7, CS -> D8, DC -> D6, RST -> D2, BUSY -> D1
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/D4, /*DC=*/ D6, /*RST=*/ D2, /*BUSY=*/ D1));
// ESP32-C6
// Anschlüsse: CLK -> 21, DIN -> 19, CS -> 18, DC -> 3, RST -> 10, BUSY -> 11
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/ 18, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 11));
// Nano ESP32
// Anschlüsse: CLK -> D13, DIN -> D11, CS -> D10, DC-> D6, RST -> D8, BUSY -> D9
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/ D10, /*DC=*/ D6, /*RST=*/ D7, /*BUSY=*/ D9));
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
delay(1000);
// Sensor starten
dht.begin();
// Bildschirm starten
display.init(115200, true, 2, false);
// Bildschirm um 90° drehen
display.setRotation(1);
// vollständigen Bildschirm nutzen
display.setFullWindow();
// weißer Hintergrund
display.fillScreen(GxEPD_WHITE);
// Schriften von u8g2 display zuordnen
u8g2Schriften.begin(display);
}
void loop()
{
// Temperatur lesen
String Temperatur = String(dht.readTemperature());
// replace -> . durch , ersetzen
Temperatur.replace(".", ",");
// Luftfeuchtigkeit lesen
String Luftfeuchtigkeit = String(dht.readHumidity());
// replace -> . durch , ersetzen
Luftfeuchtigkeit.replace(".", ",");
// Anzeige aufbauen
display.firstPage();
do
{
display.fillScreen(GxEPD_WHITE);
u8g2Schriften.setForegroundColor(GxEPD_BLACK);
u8g2Schriften.setBackgroundColor(GxEPD_WHITE);
u8g2Schriften.setFont(u8g2_font_fub35_tf);
u8g2Schriften.setCursor(1, 80);
u8g2Schriften.print(Temperatur + " °C");
u8g2Schriften.setCursor(1, 180);
u8g2Schriften.print(Luftfeuchtigkeit + " %");
}
while (display.nextPage());
// alle 5 Minuten aktualisieren
delay(300000);
}
Anzeige der Messdaten als Text und der mit WiFi ermittelten Zeit der letzten Messung
Du musst die entsprechende WiFi-Bibliothek auswählen, in Zeile 16 den Pin des DHT-Sensors, in Zeile 20 den Typ des DHT-Sensors anpassen und ab Zeile 70 den passenden Mikrocontroller auswählen.
Die Zeit der letzten Messung wird erst nach dem ersten Durchlauf (im Beispiel nach fünf Minuten) angezeigt.
// ESP32
// #include "WiFi.h"
// ESP8266
// #include "ESP8266WiFi.h"
#include "time.h"
#include "GxEPD2_3C.h"
#include "U8g2_for_Adafruit_GFX.h"
#include "DHT.h"
// Objekt u8g2Schriften
U8G2_FOR_ADAFRUIT_GFX u8g2Schriften;
// freien Pin auf dem Board wählen
int SENSOR_DHT = 9;
// Sensortyp festlegen
// DHT22
#define SensorTyp DHT22
// DHT11
// #define SensorTyp DHT11
// Sensor einen Namen zuweisen
DHT dht(SENSOR_DHT, SensorTyp);
// Schriftart
#include "Fonts/FreeMonoBold24pt7b.h"
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";
// NTP-Server aus dem Pool
#define Zeitserver "de.pool.ntp.org"
/*
Liste der Zeitzonen
https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
Zeitzone CET = Central European Time -1 -> 1 Stunde zurück
CEST = Central European Summer Time von
M3 = März, 5.0 = Sonntag 5. Woche, 02 = 2 Uhr
bis M10 = Oktober, 5.0 = Sonntag 5. Woche 03 = 3 Uhr
*/
#define Zeitzone "CET-1CEST,M3.5.0/02,M10.5.0/03"
// time_t enthält die Anzahl der Sekunden seit dem 1.1.1970 0 Uhr
time_t aktuelleZeit;
/*
Struktur tm
tm_hour -> Stunde: 0 bis 23
tm_min -> Minuten: 0 bis 59
tm_sec -> Sekunden 0 bis 59
tm_mday -> Tag 1 bis 31
tm_mon -> Monat: 0 (Januar) bis 11 (Dezember)
tm_year -> Jahre seit 1900
tm_yday -> vergangene Tage seit 1. Januar des Jahres
tm_isdst -> Wert > 0 = Sommerzeit (dst = daylight saving time)
*/
tm Zeit;
WiFiServer Server(80);
WiFiClient Client;
// Display-Parameter
// GxEPD2_154_Z90c: Chip SSD1681 Bildschirm: 200x200
#define GxEPD2_DISPLAY_CLASS GxEPD2_3C
#define GxEPD2_DRIVER_CLASS GxEPD2_154_Z90c
// Board wählen:
// ESP32-Wroom
// Anschlüsse: CLK -> 18, DIN -> 23, CS -> 5, DC -> 2, RST -> 22, BUSY -> 4
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/ 5, /*DC=*/ 2, /*RST=*/ 22, /*BUSY=*/ 4));
// NodeMCU
// CLK - D5, DIN -> D7, CS -> D8, DC -> D6, RST -> D2, BUSY -> D1
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/D4, /*DC=*/ D6, /*RST=*/ D2, /*BUSY=*/ D1));
// ESP32-C6
// Anschlüsse: CLK -> 21, DIN -> 19, CS -> 18, DC -> 3, RST -> 10, BUSY -> 11
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/ 18, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 11));
// Nano ESP32
// Anschlüsse: CLK -> D13, DIN -> D11, CS -> D10, DC-> D6, RST -> D8, BUSY -> D9
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/ D10, /*DC=*/ D6, /*RST=*/ D7, /*BUSY=*/ D9));
void setup()
{
// Schriften von u8g2 display zuordnen
u8g2Schriften.begin(display);
// Zeitzone: Parameter für die zu ermittelnde Zeit
configTzTime(Zeitzone, Zeitserver);
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
delay(1000);
// WiFi starten
WiFi.begin(Router, Passwort);
Serial.println("------------------------");
while (WiFi.status() != WL_CONNECTED) {
delay(200);
Serial.print(".");
}
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(Router);
Serial.print("IP über DHCP: ");
Serial.println(WiFi.localIP());
// Sensor starten
dht.begin();
// Bildschirm starten
display.init(115200, true, 2, false);
// Bildschirm um 90° drehen
display.setRotation(1);
// vollständigen Bildschirm nutzen
display.setFullWindow();
// weißer Hintergrund
display.fillScreen(GxEPD_WHITE);
}
void loop()
{
// aktuelle Zeit holen
time(&aktuelleZeit);
// localtime_r -> Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
// Temperatur lesen
String Temperatur = String(dht.readTemperature());
// replace -> . durch , ersetzen
Temperatur.replace(".", ",");
// Luftfeuchtigkeit lesen
String Luftfeuchtigkeit = String(dht.readHumidity());
// replace -> . durch , ersetzen
Luftfeuchtigkeit.replace(".", ",");
// Anzeige aufbauen
display.firstPage();
do
{
display.fillScreen(GxEPD_WHITE);
u8g2Schriften.setForegroundColor(GxEPD_BLACK);
u8g2Schriften.setBackgroundColor(GxEPD_WHITE);
u8g2Schriften.setFont(u8g2_font_fub35_tf);
u8g2Schriften.setCursor(1, 50);
// Stunde: wenn Stunde < 10 -> 0 davor setzen
if (Zeit.tm_hour < 10) u8g2Schriften.print("0");
u8g2Schriften.print(Zeit.tm_hour);
u8g2Schriften.print(":");
// Minuten
if (Zeit.tm_min < 10) u8g2Schriften.print("0");
u8g2Schriften.print(Zeit.tm_min);
// horizontale Linie
display.fillRect(1, 62, display.width(), 4, GxEPD_BLACK);
u8g2Schriften.setCursor(1, 110);
u8g2Schriften.print(Temperatur + " °C");
u8g2Schriften.setCursor(1, 170);
u8g2Schriften.print(Luftfeuchtigkeit + " %");
}
while (display.nextPage());
// alle 5 Minuten aktualisieren
delay(300000);
}
Anzeige der Messdaten als Text, mit Symbolen und der mit WiFi ermittelten Zeit der letzten Messung
Du musst die entsprechende WiFi-Bibliothek auswählen, in Zeile 16 den Pin des DHT-Sensors, in Zeile 20 den Typ des DHT-Sensors anpassen und ab Zeile 67 den passenden Mikrocontroller auswählen.
// ESP8266
// #include "ESP8266WiFi.h"
// ESP32
// #include "WiFi.h"
#include "time.h"
#include "GxEPD2_3C.h"
#include "U8g2_for_Adafruit_GFX.h"
#include "DHT.h"
// Objekt u8g2Schriften
U8G2_FOR_ADAFRUIT_GFX u8g2Schriften;
// Pin DHT
int SENSOR_DHT = 9;
// Sensortyp festlegen
// DHT22
#define SensorTyp DHT22
// DHT11
// #define SensorTyp DHT11
// Sensor einen Namen zuweisen
DHT dht(SENSOR_DHT, SensorTyp);
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";
// NTP-Server aus dem Pool
#define Zeitserver "de.pool.ntp.org"
/*
Liste der Zeitzonen
https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
Zeitzone CET = Central European Time -1 -> 1 Stunde zurück
CEST = Central European Summer Time von
M3 = März, 5.0 = Sonntag 5. Woche, 02 = 2 Uhr
bis M10 = Oktober, 5.0 = Sonntag 5. Woche 03 = 3 Uhr
*/
#define Zeitzone "CET-1CEST,M3.5.0/02,M10.5.0/03"
// time_t enthält die Anzahl der Sekunden seit dem 1.1.1970 0 Uhr
time_t aktuelleZeit;
/*
Struktur tm
tm_hour -> Stunde: 0 bis 23
tm_min -> Minuten: 0 bis 59
tm_sec -> Sekunden 0 bis 59
tm_mday -> Tag 1 bis 31
tm_mon -> Monat: 0 (Januar) bis 11 (Dezember)
tm_year -> Jahre seit 1900
tm_yday -> vergangene Tage seit 1. Januar des Jahres
tm_isdst -> Wert > 0 = Sommerzeit (dst = daylight saving time)
*/
tm Zeit;
WiFiServer Server(80);
WiFiClient Client;
// Display-Parameter
// GxEPD2_154_Z90c: Chip SSD1681 Bildschirm: 200x200
#define GxEPD2_DISPLAY_CLASS GxEPD2_3C
#define GxEPD2_DRIVER_CLASS GxEPD2_154_Z90c
// ESP32-Wroom
// Anschlüsse: CLK -> 18, DIN -> 23, CS -> 5, DC-> 2, RST -> 22, BUSY -> 4
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/5, /*DC=*/2, /*RST=*/22, /*BUSY=*/4));
// NodeMCU
// CLK - D5, DIN -> D7, CS -> D8, DC -> D6, RST -> D2, BUSY -> D1
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/D4, /*DC=*/D6, /*RST=*/D2, /*BUSY=*/D1));
// ESP32-C6
// Anschlüsse: CLK -> 21, DIN -> 19, CS -> 18, DC-> 3, RST -> 10, BUSY -> 11
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/ 18, /*DC=*/ 3, /*RST=*/2, /*BUSY=*/11));
// Nano ESP32
// Anschlüsse: CLK -> D13, DIN -> D11, CS -> D10, DC-> D6, RST -> D8, BUSY -> D9
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, 200>
// display(GxEPD2_DRIVER_CLASS(/*CS=*/ D10, /*DC=*/ D6, /*RST=*/ D7, /*BUSY=*/ D9));
const unsigned char Thermometer [] PROGMEM = {
// 'Thermometer, 34x70px
0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x00,
0x7c, 0x0f, 0x00, 0x00, 0x00, 0x70, 0x07, 0x80, 0x00, 0x00, 0xe0, 0x03, 0xc0, 0x00, 0x00, 0xe0,
0x01, 0xc0, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x01, 0xc0, 0x01,
0xc0, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x0f, 0xc0, 0x01, 0xc0, 0x00, 0x0f, 0xc0, 0x01, 0xc0,
0x00, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0xc0, 0x01, 0xc0, 0x00,
0x00, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0xc0, 0x01, 0xc0, 0x00, 0x0f, 0xc0, 0x01, 0xc0, 0x00, 0x0f,
0xc0, 0x01, 0xc0, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0xc0,
0x01, 0xc0, 0x00, 0x00, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0xc0, 0x01, 0xc0, 0x00, 0x0f, 0xc0, 0x01,
0xc0, 0x00, 0x0f, 0xc0, 0x01, 0xc0, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0xc3, 0xe1, 0xc0,
0x00, 0x00, 0xc3, 0xf1, 0xc0, 0x00, 0x00, 0xc3, 0xf1, 0xc0, 0x00, 0x0f, 0xc3, 0xf1, 0xc0, 0x00,
0x0f, 0xc3, 0xf1, 0xc0, 0x00, 0x0f, 0xc3, 0xf1, 0xc0, 0x00, 0x00, 0xc3, 0xf1, 0xc0, 0x00, 0x00,
0xc3, 0xf1, 0xc0, 0x00, 0x00, 0xc3, 0xf1, 0xc0, 0x00, 0x00, 0xc3, 0xf1, 0xc0, 0x00, 0x00, 0xc3,
0xf1, 0xc0, 0x00, 0x00, 0xc3, 0xf1, 0xc0, 0x00, 0x03, 0xc3, 0xf1, 0xf0, 0x00, 0x07, 0xc3, 0xf0,
0xf8, 0x00, 0x0f, 0x03, 0xf0, 0x7c, 0x00, 0x0e, 0x03, 0xe0, 0x3c, 0x00, 0x1c, 0x07, 0xf0, 0x1e,
0x00, 0x3c, 0x1f, 0xfc, 0x0f, 0x00, 0x38, 0x3f, 0xfe, 0x0f, 0x00, 0x78, 0x7f, 0xff, 0x07, 0x80,
0x70, 0x7f, 0xff, 0x87, 0x80, 0x70, 0x7f, 0xff, 0x83, 0x80, 0xf0, 0xff, 0xff, 0x83, 0xc0, 0xf0,
0xff, 0xff, 0xc3, 0xc0, 0xf0, 0xff, 0xff, 0xc3, 0xc0, 0xf0, 0xff, 0xff, 0xc3, 0xc0, 0xf0, 0xff,
0xff, 0xc3, 0xc0, 0xf0, 0xff, 0xff, 0x83, 0xc0, 0x70, 0x7f, 0xff, 0x83, 0x80, 0x70, 0x7f, 0xff,
0x87, 0x80, 0x78, 0x3f, 0xff, 0x07, 0x80, 0x38, 0x3f, 0xfe, 0x0f, 0x00, 0x3c, 0x0f, 0xfc, 0x0f,
0x00, 0x1e, 0x03, 0xe0, 0x1e, 0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00, 0x0f, 0x00, 0x00, 0x7c, 0x00,
0x07, 0xe0, 0x01, 0xf8, 0x00, 0x03, 0xf8, 0x07, 0xf0, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00,
0x7f, 0xff, 0x80, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00
};
const unsigned char Regen [] PROGMEM = {
// 'Regen, 60x49px
0x00, 0x00, 0x00, 0x08, 0x20, 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, 0x02, 0x08, 0x21, 0x04, 0x10, 0x00, 0x00, 0x00, 0x06, 0x18, 0x63, 0x0c, 0x30, 0x80, 0x00,
0x00, 0x06, 0x10, 0x63, 0x0c, 0x31, 0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x20, 0x84, 0x10, 0x41, 0x08, 0x20, 0x00, 0x00, 0x61, 0x8c, 0x30, 0xc3, 0x18, 0x60, 0x00,
0x08, 0xc1, 0x8c, 0x30, 0xc3, 0x18, 0x61, 0x00, 0x00, 0x41, 0x04, 0x20, 0x82, 0x08, 0x40, 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, 0x08, 0x30, 0x86, 0x18, 0x43, 0x04, 0x30, 0x80,
0x18, 0x71, 0x86, 0x18, 0xc3, 0x0c, 0x31, 0x80, 0x18, 0x21, 0x84, 0x10, 0xc3, 0x0c, 0x21, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x18, 0x21, 0x04, 0x10, 0x42, 0x18, 0x40,
0x86, 0x18, 0x63, 0x0c, 0x30, 0xc6, 0x18, 0xc0, 0x86, 0x10, 0x63, 0x0c, 0x30, 0xc6, 0x18, 0xc0,
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,
0x18, 0x21, 0x04, 0x10, 0xc2, 0x0c, 0x21, 0x00, 0x30, 0x63, 0x0c, 0x31, 0xc6, 0x0c, 0x63, 0x00,
0x30, 0x63, 0x0c, 0x31, 0x86, 0x18, 0x63, 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,
0x06, 0x10, 0x43, 0x08, 0x20, 0x86, 0x10, 0x00, 0x06, 0x30, 0xc3, 0x18, 0x61, 0x86, 0x30, 0x00,
0x04, 0x30, 0xc2, 0x18, 0x61, 0x8c, 0x30, 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, 0x08, 0x00, 0x80, 0x00, 0x00, 0x0c, 0x30, 0xc6, 0x18, 0x61, 0x00, 0x00,
0x00, 0x00, 0x61, 0xc6, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x86, 0x10, 0x60, 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
};
const unsigned char Uhr [] PROGMEM = {
// Uhr, 50x50px
0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x03,
0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x01,
0xfe, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x1f, 0xc0,
0x00, 0x01, 0xf8, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x03, 0xf0, 0x00, 0xc0, 0x03, 0xf0, 0x00, 0x07,
0xc0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x07, 0x80, 0xc0, 0x00, 0x40, 0x78, 0x00, 0x0f, 0x80, 0x00,
0x00, 0x00, 0x7c, 0x00, 0x1f, 0x00, 0x00, 0x80, 0x00, 0x3e, 0x00, 0x1e, 0x00, 0x00, 0xc0, 0x00,
0x1e, 0x00, 0x3e, 0x00, 0x00, 0xc0, 0x00, 0x1f, 0x00, 0x3c, 0x00, 0x00, 0xc0, 0x00, 0x0f, 0x00,
0x38, 0x30, 0x00, 0xc0, 0x01, 0x07, 0x00, 0x78, 0x00, 0x00, 0xc0, 0x00, 0x07, 0x80, 0x78, 0x00,
0x00, 0xc0, 0x00, 0x07, 0x80, 0x70, 0x00, 0x00, 0xc0, 0x00, 0x03, 0x80, 0xf0, 0x00, 0x00, 0xc0,
0x00, 0x03, 0xc0, 0xf0, 0x00, 0x00, 0xc0, 0x00, 0x03, 0xc0, 0xf0, 0x00, 0x00, 0xc0, 0x00, 0x03,
0xc0, 0xf0, 0x00, 0x00, 0xc0, 0x00, 0x03, 0xc0, 0xf1, 0x80, 0x00, 0xc0, 0x00, 0x63, 0xc0, 0xf1,
0x80, 0x01, 0x80, 0x00, 0x63, 0xc0, 0xf0, 0x00, 0x07, 0x00, 0x00, 0x03, 0xc0, 0xf0, 0x00, 0x1c,
0x00, 0x00, 0x03, 0xc0, 0xf0, 0x00, 0x78, 0x00, 0x00, 0x03, 0xc0, 0xf0, 0x00, 0xe0, 0x00, 0x00,
0x03, 0xc0, 0x70, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x78, 0x07, 0x00, 0x00, 0x00, 0x07, 0x80,
0x78, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x78, 0x20, 0x00, 0x00, 0x01, 0x07, 0x80, 0x3c, 0x00,
0x00, 0x00, 0x00, 0x0f, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x00, 0x1e, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x7c,
0x00, 0x07, 0x80, 0x80, 0x00, 0xc0, 0x78, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x03,
0xf0, 0x00, 0xc0, 0x03, 0xf0, 0x00, 0x01, 0xf8, 0x00, 0xc0, 0x07, 0xe0, 0x00, 0x00, 0xfe, 0x00,
0x00, 0x1f, 0xc0, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x1f, 0xe0, 0x01, 0xfe,
0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xf0, 0x00, 0x00,
0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00
};
void setup()
{
// Schriften von u8g2 display zuordnen
u8g2Schriften.begin(display);
// Zeitzone: Parameter für die zu ermittelnde Zeit
configTzTime(Zeitzone, Zeitserver);
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
delay(1000);
// WiFi starten
WiFi.begin(Router, Passwort);
Serial.println("------------------------");
while (WiFi.status() != WL_CONNECTED) {
delay(200);
Serial.print(".");
}
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(Router);
Serial.print("IP über DHCP: ");
Serial.println(WiFi.localIP());
// Bildschirm starten
display.init(115200, true, 2, false);
// Bildschirm um 90° drehen
display.setRotation(1);
// vollständigen Bildschirm nutzen
display.setFullWindow();
display.fillScreen(GxEPD_WHITE);
// Sensor starten
dht.begin();
}
void loop()
{
// aktuelle Zeit holen
time(&aktuelleZeit);
// localtime_r -> Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
// Temperatur lesen
String Temperatur = String(dht.readTemperature());
// replace -> . durch , ersetzen
Temperatur.replace(".", ",");
// Luftfeuchtigkeit lesen
String Luftfeuchtigkeit = String(dht.readHumidity());
// replace -> . durch , ersetzen
Luftfeuchtigkeit.replace(".", ",");
// Anzeige aufbauen
display.firstPage();
do
{
u8g2Schriften.setForegroundColor(GxEPD_BLACK);
u8g2Schriften.setBackgroundColor(GxEPD_WHITE);
u8g2Schriften.setFont(u8g2_font_helvB24_tf);
u8g2Schriften.setCursor(70, 40);
// Stunde: wenn Stunde < 10 -> 0 davor setzen
if (Zeit.tm_hour < 10) u8g2Schriften.print("0");
u8g2Schriften.print(Zeit.tm_hour);
u8g2Schriften.print(":");
// Minuten
if (Zeit.tm_min < 10) u8g2Schriften.print("0");
u8g2Schriften.print(Zeit.tm_min);
// x, y, Bild-Array, Breite, Höhe, Farbe
display.drawBitmap(5, 5, Uhr, 50, 50, GxEPD_BLACK);
display.drawBitmap(15, 70, Thermometer, 34, 70, GxEPD_BLACK);
display.drawBitmap(5, 150, Regen, 60, 49, GxEPD_BLACK);
// Messdaten anzeigen
u8g2Schriften.setCursor(70, 110);
u8g2Schriften.print(Temperatur + " °C");
u8g2Schriften.setCursor(70, 180);
u8g2Schriften.print(Luftfeuchtigkeit + " %");
}
while (display.nextPage());
// alle 5 Minuten aktualisieren
delay(300000);
}
Quellen
- Liste der unterstützten Displays für die Bibliothek GxEPD2
- Schriftarten von Adafruit
- Schriftarten von u8g2
- Adafruit Grafik-Bibliothek
- Online Grafiken in Arrays umwandeln
- Grafiken von openclipart.org
- Espressif WiFi-API
Letzte Aktualisierung: