Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Heltec ESP8266 und OLED: Eine ideale Kombination für DIY-Projekte

Posted on 26. Juni 20238. November 2023 by Stefan Draeger

Hey, ich zeige dir heute, wie du den ESP8266 Mikrocontroller von Heltec programmierst und mit dem kleinen OLED Display beeindruckende Daten darstellen kannst. In meinem Beispiel werde ich eine API einer Newsseite anzapfen und die aktuellen News auf dem Display anzeigen lassen. Es ist erstaunlich, welche Möglichkeiten sich mit dem ESP8266 und dem Heltec OLED eröffnen. Als Anfänger wirst du Schritt für Schritt lernen, wie du den Mikrocontroller einrichtest und die Daten abrufst. Zusammen tauchen wir in die faszinierende Welt der Programmierung ein und entdecken, wie einfach es ist, Daten auf dem OLED Display zum Leben zu erwecken. Bereit für dieses spannende Abenteuer? Dann lass uns loslegen!

Heltec ESP8266 und OLED: Eine ideale Kombination für DIY-Projekte
Heltec ESP8266 und OLED: Eine ideale Kombination für DIY-Projekte

Disclaimer: Ich möchte darauf hinweisen, dass ich den erwähnten ESP8266 Mikrocontroller mit integriertem 0,91″ OLED Display von der Firma AZ-Delivery persönlich erworben habe. Ich stehe in keinem geschäftlichen Verhältnis zu AZ-Delivery und erhalte keinerlei finanzielle Vergütung für die Erwähnung oder Empfehlung ihrer Produkte. Falls du Interesse hast, den Mikrocontroller zu erwerben, kannst du ihn derzeit für 7,88 € zzgl. Versandkosten auf ihrer Website unter https://www.azdelivery.de/collections/esp8266/products/esp8266-mikrocontroller-mit-integrierten-0-91-oled-display finden.

ESP8266 mit OLED Display
ESP8266 mit OLED Display
ESP8266 mit OLED Display
ESP8266 mit OLED Display
ESP8266 mit OLED Display
ESP8266 mit OLED Display

Inhaltsverzeichnis

  • Schon wieder ein ESP8266?
  • Warum also genau dieser ESP8266?
  • Technische Daten des ESP8266 von Heltec mit OLED Display
  • Lieferumfang des ESP8266 von Heltec
  • Anschluss an den PC
  • Erfahrung mit dem Mikrocontroller
    • Schlechte Reichweite, instabile WiFi-Verbindung
  • News auf dem Display anzeigen lassen
    • Download des Codes als ZIP-Datei
    • Schritt 1 – Einrichten eines Accounts bei https://newsapi.org/
    • Schritt 2 – Abfrage der News Api per Postman
    • Schritt 3 – Programmieren des ESP8266 in der Arduino IDE 2.0
      • Installieren des Boardtreibers für den ESP8266
      • Auswahl des ESP8266
      • Installieren des Treibers für das OLED Display
      • Installieren der Bibliothek für JSON Verarbeitung
      • Aufbau einer WiFi-Verbindung
      • Laden von Daten aus der NewsApi
      • Absenden eines HTTP-Requests
      • Auswerten des JSON-Response
      • Anzeigen der News Titel auf dem OLED Display

Schon wieder ein ESP8266?

Es gibt bereits diverse Varianten des ESP8266 auf dem Markt und dieses ist auch nicht der erste mit einem OLED Display. Du findest zum Beispiel den Wemos D1 Mini mit einem kleinen OLED Display für denselben Preis.

Der Preis ist mit knapp 8€ zzgl. Versandkosten recht moderat, aber dieser wird aus Deutschland geliefert und somit war die Lieferzeit mit 3 Tagen recht flink.

Warum also genau dieser ESP8266?

Für mich war klar, dass ich diesen mir holen musste, weil ich einfach die kleinen Mikrocontroller sammle und viel mit diesen bastle. Ein großer Vorteil ist, dass bei diesem bereits ein OLED Display montiert ist und somit zumindest der Anschluss via I2C entfällt.

Ansicht von Oben
Ansicht von Oben
Ansicht von Unten
Ansicht von Unten

Ich kann dir diesen kleinen Mikrocontroller empfehlen, wenn du noch keinen ESP8266 hast und erste kleine Projekte mit diesem bewerkstelligen möchtest. Hier ist auch der Vorteil, dass bereits das Display vormontiert ist und du somit recht einfach Sensordaten oder in der Nähe befindliche WiFi-Netzwerke anzeigen lassen kannst.

Technische Daten des ESP8266 von Heltec mit OLED Display

Kommen wir zunächst zu den technischen Daten des Mikrocontrollers:

ChipESP8266, Tensilica L106 32-Bit-Prozessor
Taktgeschwindigkeitbis zu 160 MHz
HerstellerEspressif
SpeicherFlash: 4MB,
OTA: 512 KB
GPIOs11 GPIOs, davon neun PWM Pins, ein analoger Pin
SchnittstellenUART, SPI, I2C, I2S
OLED DisplayAuflösung: 128×32 Punkte,
Farbe: Schwarz / Weiß
WiFi802.11 b/g/n, 2,4 Ghz (2400 MHz ~ 2483.5 MHz)
Wi-Fi ModeStation, SoftAP, SoftAP+Station
SecurityWPA, WPA2
EncryptionWEP, TKIP, AES
Auszug aus den technischen Daten des ESP8266EX von Espressif

Das Datenblatt als PDF-Dokument zum ESP8266 findest du bei AZ-Delivery in englischer Sprache.

ESP8266EX Chip
ESP8266EX Chip

Lieferumfang des ESP8266 von Heltec

Der Mikrocontroller wird mit zwei Stiftleisten und ein Anschlusskabel für eine LiPo Batterie geliefert.

Lieferumfang des ESP8266 von Heltec
Lieferumfang des ESP8266 von Heltec

Anschluss an den PC

Für die USB-Serielle Verbindung ist ein CH9102 verbaut.

Solltest du also Probleme haben, dass der Mikrocontroller nicht erkannt wird, dann musst du den Treiber installieren. Diesen findest du zbsp. auf dem GitHub Repository Xinyuan-LilyGO/CH9102_Driver.

Erfahrung mit dem Mikrocontroller

Ich habe mit diesem kleinen Mikrocontroller einige kleine Projekte aufgebaut und möchte dir in diesem Abschnitt von meinen Erfahrungen berichten.

Schlechte Reichweite, instabile WiFi-Verbindung

Zunächst möchte ich damit beginnen, die doch recht mäßige Reichweite des WiFis zu erwähnen. Ich habe hier einen WiFi Accesspoint von der Firma TP-Link welcher seinen Dienst zuverlässig verrichtet und mit so ziemlich jedem WiFi-fähigen Mikrocontroller (2,4 HG & 5 GHz) zusammen arbeitet. Mit einem WiFi-Scanner konnte ich das Netzwerk sehen, aber im nächsten Durchgang war dieses wieder weg.

Ergebniss eines WiFi-Scan mit dem ESP8266 von Heltec
Ergebniss eines WiFi-Scan mit dem ESP8266 von Heltec

Ein Nachtest mit einem anderen ESP8266 ergab eine zuverlässige, stabile Verbindung.

Meine Lösung dazu war, dass ich mit meinem Handy einen Hotspot aufgebaut und mit diesem gearbeitet habe.

News auf dem Display anzeigen lassen

Wollen wir nun einmal mit der Programmierung beginnen und ein kleines Projekt mit diesem starten. Ich hatte dir ja bereits einige Beiträge mit dem ESP8266 auf diesem Blog präsentiert, wo ich diverse Sensoren & Aktoren angebunden habe.

  • ESP8266 für Blynk einrichten
  • Füllstandsanzeige mit ESP8266, Ultraschall Abstandssensor & ESPEasy
  • ESP8266 – Alexa gesteuerte Steckdose

Hier möchte ich jetzt einen Schritt weiter gehen und eine Schnittstelle von einer News-Seite anzapfen und auf dem Display die Daten anzeigen.

Download des Codes als ZIP-Datei

Hier nun das Programm zum Lesen der News von NewsApi.org für den ESP8266.

Programm zum laden von News von NewsApi.org für den ESP8266

Schritt 1 – Einrichten eines Accounts bei https://newsapi.org/

Es gibt im Internet diverse Seiten wo man News Beiträge abrufen kann, jedoch benötigst du bei den meisten leider einen kostenpflichtigen Account. Auf der Seite https://newsapi.org/ kannst du dir einen kostenfreien Account anlegen und über diesen bis zu 100 Beiträge pro Tag kostenfrei beziehen. Das sollte für unser kleines Projekt ausreichen.

Es gibt hier Double-Opt-in d.h. du bekommst keine E-Mail nach der Anmeldung, das ist rechtlich sehr schwierig. Jedoch kannst du hier auch Fake Daten eingeben und erhältst trotzdem einen gültigen ApiKey zum Portal.

Schritt 2 – Abfrage der News Api per Postman

Bevor wir mit der eigentlichen Programmierung beginnen, erstellen wir einen Request mit der Anwendung Postman dieses hat den Vorteil, dass wir erst einmal etwas herumspielen können und müssen nicht immer gleich das Programm auf den Mikrocontroller aufspielen.

Wenn wir nun einen Request mit der nachfolgenden Adresse absenden, dann erhalten wir einen JSON Response

https://newsapi.org/v2/top-headlines?country=de&pageSize=2&apiKey=7274xxxxxx05f3
{
    "status": "ok",
    "totalResults": 34,
    "articles": [
        {
            "source": {
                "id": "google-news",
                "name": "Google News"
            },
            "author": "DER SPIEGEL",
            "title": "+++ Krieg in der Ukraine +++: Offenbar Autoexplosion auf Krim – Berichte über verletzten russischen Besatzer - DER SPIEGEL",
            "description": null,
            "url": ",
            "urlToImage": null,
            "publishedAt": "2023-06-19T16:07:30Z",
            "content": null
        },
        {
            "source": {
                "id": "google-news",
                "name": "Google News"
            },
            "author": "NETZWELT",
            "title": "The Flash: Multiversen und andere Kleinigkeiten - diese Zeitreise-Filme ergeben wirklich Sinn! - NETZWELT",
            "description": null,
            "url": ",
            "urlToImage": null,
            "publishedAt": "2023-06-19T16:00:00Z",
            "content": null
        }
    ]
}

Schritt 3 – Programmieren des ESP8266 in der Arduino IDE 2.0

Nachdem wir nun ermittelt haben, wie wir einen Request an die Api von NewsApi.org absenden können, wollen wir dieses in ein kleines Arduino Sketch schreiben.

Installieren des Boardtreibers für den ESP8266

Damit wir den ESP8266 auswählen können, müssen wir zunächst die nachfolgende URL in den Einstellungen zu den „zusätzlichen Boardverwalter URLs“ hinzufügen.

https://arduino.esp8266.com/stable/package_esp8266com_index.json

Wenn diese Adresse eingetragen ist, dann kann im Boardverwalter (1) nach ESP8266 (2) gesucht werden. In meinem Fall habe ich diesen Treiber bereits installiert und sehe die Schaltfläche „REMOVE“ (3) in deinem Fall solltest du „INSTALL“ sehen. Wenn du diese Schaltfläche betätigt hast und danach der Treiber erfolgreich installiert wurde, dann sollte zusätzlich ein Label „<Versionsnummer> installed“ (4) erscheinen.

Auswahl des ESP8266

Nachdem der Boardtreiber installiert wurde, können wir diesen aus der Liste auswählen. In meinem Fall habe ich den Eintrag „NodeMCU 1.0 (ESP-12E Module)“ gewählt.

Installieren des Treibers für das OLED Display

Das Display selber ist quasi nur onboard auf dem ESP8266 und ist daher nicht im Boardtreiber enthalten. Für dieses müssen wir wiederum einen eigenen Treiber installieren. Hier wechseln wir vom Boardverwalter zum Bibliotheksverwalter (1) und suchen nach „adafruit ssd1306“ (2) auch diese habe ich bereits installiert und daher wird ebenso die Schaltfläche „REMOVE“ (3) angezeigt. Auch hier solltest du wieder die Schaltfläche „INSTALL“ sehen und wenn du diese installiert hast, kannst du mit der Programmierung beginnen.

Dur Bibliothek bekommst du zusätzlich noch ein paar Beispiele. Diese sind ohne Änderungen auf dem ESP8266 mit OLED Display von Heltec sofort lauffähig.

Im nachfolgenden kleinen Video zeige ich dir eines der Beispiele, in welchem auf dem Display verschiedene Features dieser Bibliothek abgespielt werden.

Heltec ESP8266 mit 0,91" OLED Display
Dieses Video auf YouTube ansehen.

Installieren der Bibliothek für JSON Verarbeitung

Wir erhalten von NewsApi.org einen JSON Response (Antwort) welche wir mit einer speziellen Bibliothek auswerten können. Das JSON-Datenformat ist im Internet sehr beliebt, da dieses sehr einfach aufgebaut und von Menschen sehr leicht zu lesen ist.

Im Abschnitt zuvor hatte ich dir bereits erläutert, wie man eine Bibliothek installiert, hier sind die Schritte gleich, jedoch suchen wir hier lediglich nach „JSON“ und wählen die „Arduino_JSON by Arduino“ Bibliothek.

Wie du einen JSON mit dieser Bibliothek verarbeitest, habe ich dir bereits im Beitrag JSON-Format zur Datenübertragung zwischen zwei Mikrocontroller erläutert.

Aufbau einer WiFi-Verbindung

Damit wir die Daten aus dem Internet abrufen können, müssen wir zunächst eine WiFi-Verbindung aufbauen. Hier benötigen wir die SSID sowie das Passwort vom lokalen 2.4 GHz WLAN Netzwerk.

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>

//Zugangsdaten zum lokalen WiFi-Netzwerk
const char* ssid = "*******";
const char* password = "*******";

void initWiFiConnection() {
  WiFi.begin(ssid, password);
  Serial.print("Aufbau der WiFi Verbindung zu ");
  Serial.println(ssid);
  //Solange die WiFi Verbindung nicht aufgebaut ist,
  //soll 500ms. gewartet und ein Punkt auf der seriellen Schnittstelle
  //ausgegeben werden.
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Verbindung erfolgreich aufgebaut!");
  Serial.print("IP-Adresse lautet: ");
  Serial.println(WiFi.localIP());
}

Laden von Daten aus der NewsApi

Nachdem wir nun die WiFi-Verbindung zum lokalen WLAN Netzwerk hergestellt haben, können wir jetzt die Daten aus der NewsApi auslesen. Dazu bauen wir uns zunächst einen String für die URL auf.

//Der ApiKey welcher die Berechtigung zum laden der
//Daten beinhaltet.
String newsApiKey = "7274266d9bb543fcbcb4d0ce907605f3";
//Sprache der News
String newsApiCountry = "de";
//Anzahl der News welche geladen werden sollen
const int newsApiPageSize = 6;
//Es kann gesucht werden oder nur die Top-Headlines geladen werden.
//everything
//top-headlines
String newsApiEndpoint = "top-headlines";
//URL zum laden der Daten, hier wird per HTTP und nicht per HTTPS die
//Daten abgerufen.
String newsApiRequest = "http://newsapi.org/v2/" + newsApiEndpoint + "?" + "country=" + newsApiCountry + "&pageSize=" + newsApiPageSize + "&apiKey=" + newsApiKey;

Absenden eines HTTP-Requests

An den Server stellen wir nun die Anfrage mit der URL und erhalten mit http.GET() die Antwort, welche wir wiederum mit http.getString() auslesen können. Diese Antwort ist, wenn der Vorgang erfolgreich war, ein JSON.

    //Wenn keine WiFi-Verbindung existiert, dann eine aufbauen
    if ((WiFi.status() != WL_CONNECTED)) {
      initWiFiConnection();
    }

    //Wenn eine aktive WiFi-Verbindung existiert, dann...
    if ((WiFi.status() == WL_CONNECTED)) {
      WiFiClient client;
      HTTPClient http;
      //Aufbau der Verbindung
      http.begin(client, newsApiRequest.c_str());
      //abgsenden des Requests und laden der Daten
      //der HTTP-Code repräsentiert das Ergebnis des Prozesses
      //in Zahlenform, wobei HTTP-200 für OK steht.
      //(https://de.wikipedia.org/wiki/HTTP-Statuscode)
      httpCode = http.GET();
      //Laden der Daten
      httpResponse = http.getString();
      //Beenden der Kommunikation
      http.end();
    }

Auswerten des JSON-Response

Wenn die Antwort HTTP-200 also OK ist dann werten wir diese aus und laden aus dem JSON die Titel der News Artikel. Da die Titel Umlaute & Symbole enthalten, welche nicht auf dem OLED Display angezeigt werden können, müssen wir diese zunächst durch andere ersetzen. Die Titel werden dann in einem Array gespeichert und im nächsten Schritt dann auf dem Display angezeigt.

#include <Arduino_JSON.h>

//Array zur Ablage der gelesenen News
String news[newsApiPageSize] = { "" };

void loop(){
  ....
  //Wenn eine Antwort erhalten wurde, dann...
  if (httpCode == 200) {
    handleResponse(httpResponse);
  }
}

//Ersetzt im Text Symbole welche nicht auf dem
//OLED Display angezeigt werden können.
String replaceSymbols(String text) {
  String result = text;
  result.replace("ä", "ae");
  result.replace("Ä", "Ae");
  result.replace("ö", "oe");
  result.replace("Ö", "Oe");
  result.replace("ü", "ue");
  result.replace("Ü", "Ue");
  result.replace("ß", "ss");
  result.replace("\"", "'");
  result.replace("„", "'");
  result.replace("“", "'");
  result.replace("–", "-");
  return result;
}

//Verarbeitet die Antwort vom Server
//Die Antwort ist ein JSON String, dieser muss geparst und aus dem Ergebnis
//die Titel der Artikel geladen werden.
//Die Titel werden in dem Array news abgelegt.
void handleResponse(String httpResponse) {
  //Parsen des JSON-Response
  JSONVar jsonVar = JSON.parse(httpResponse);
  //Schleife über die mögliche anzahl der geladenen Artikel
  for (int i = 0; i <= newsApiPageSize - 1; i++) {
    //extrahieren des Titels
    String title = replaceSymbols(jsonVar["articles"][i]["title"]);
    //ablegen im Array
    news[i] = title;
  }
}

Anzeigen der News Titel auf dem OLED Display

Kommen wir nun dazu, die News Titel auf dem OLED Display anzuzeigen. Dazu müssen wir zunächst das Display einrichten.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128  // OLED display width, in pixels
#define SCREEN_HEIGHT 32  // OLED display height, in pixels
#define OLED_RESET 16
#define SCREEN_ADDRESS 0x3C  ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void initDisplay() {
  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;)
      ;  // Don't proceed, loop forever
  }
  display.display();
  delay(5000);  // Pause for 2 seconds
  display.clearDisplay();
  delay(250);
}

void setup(){
   ...
   initDisplay();
   ...
}

1 thought on “Heltec ESP8266 und OLED: Eine ideale Kombination für DIY-Projekte”

  1. Pingback: ESP8266 Programmierung mit 0,96" OLED Display von Ideaspark: Eine Schritt-für-Schritt-Anleitung - Technik Blog

Schreibe einen Kommentar Antworten abbrechen

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

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}