Forum: Projekte & Code ESP8266 an OLED (Wemos D1 Mini, SSD1306, IIC, Arduino)


von Sven K. (oog)


Angehängte Dateien:

Lesenswert?

Im Zip-File liegen zwei Demo-Projekte, die ich für den ESP8266 (hier als 
Wemos D1 Mini Modul) mit OLED (128x64, IIC Interface) erstellt habe.

Das OLED wird beim  D1 Mini mit Gnd an G und Vcc an 3V3 angeschlossen. 
SCL des OLED kommt beim D1 Mini an den mit D1 gekennzeichneten Pin, SDA 
an D2.

Beispiel 1 -  Web1234Oled
Das erste Beispiel "Web1234Oled" basiert auf dem Programmcode von Stefan 
Thesen. Der ESP erzeugt hierbei ein eigenes WLAN im AP Mode. Die 
Programmvorlage wurde um Soft-AP, OLED-Aunsteuerug und 
Nachrichtenanzeige erweitert.
Die Verbindungsdaten werden beim starten kurz als Übersicht angezeigt:
1
SSID: ESP-IP 1.2.3.4
2
PASS: 12345678
3
URL:  http://1.2.3.4

Soft-AP
Der ESP ist mittels Soft-AP unter der IP-Adresse 1.2.3.4 erreichbar. 
Dies ist einfacher zu merken als die Default IP 192.168.4.1. Da der ESP 
der einzig erreichbare Host in seinem eigenen WLAN ist, stört es nicht, 
dass die IP keine offiziell private Netzwerkadresse ist. Wen es stört, 
der kann es im Quelltext leicht abändern z.B: in 10.2.3.4.

OLED-Ansteuerung
Die OLED-Lib funktioniert im wesentlichen ohne RAM-Buffer, da sie 
Zeichen direkt auf das Display schreibt. Daher ist der auszugebende Text 
in Y-Richtung nicht frei positionierbar, sondern nur im 8-Zeilen raster 
(Y-Koordinaten 0..7). Horizontal kann pixelgenau positioniert werden.
Für die Scrolltext-Funktion wird derzeit noch ein Grafikpuffer in halber 
Displayhöhe reserviert. Wenn die Scrollfunktion nicht benötigt wird, 
lässt sich diese für mehr freien Speicher abschalten (Zeile #define 
OLEDSSD1306_SCROLL in oled_ssd1306.h auskommentieren).
Da das Display sehr klein ist, habe ich die Textausgabe skalierbach 
implementiert, siehe Beispielprogramm (oled._charStretchX, 
oled._charStretchY). Die Zeichen können somit vergrößert angezeigt 
werden. In Y-Richtung stehen die Werte 1,2 und 4 für die Skalierung zur 
Verfügung, in X-Richtung ist es frei, sinnvoll sind die Werte 1,2,3 und 
4.

Nachrichtenanzeige
Neben den Buttons für LED ein/aus der Programmvorlage von Stefan Thesen 
wurde ein Eingabefeld für Nachrichten ergänzt, welche dann auf dem 
Display angezeigt werden.


Beispiel 2 -  WiFiScanOled
Das zweite Beispiel ist ein simpler WiFi-Scanner, der erkannte 
Netzwerknamen auf dem Display in Reihenfolge der Signalstärke anzeigt. 
Starke Netze liegen vorne.

Die oberste Zeile dient dabei als Statusanzeige.
"nn W" zeigt die Anzahl der gefundenen WLANs an.
"*n" zeigt die Anzahl unverschlüsselter WLANs (z.B. öffentliche 
Hotspots) an.
"->" signalisiert den nächsten Scan-Vorgang.

von Sven K. (oog)


Angehängte Dateien:

Lesenswert?

--- Update 19.10.2018 ---
Verbesserung beim OLED Treiber:
Scrollen funktioniert jetzt ohne Pufferspeicher, redundante Funktionen 
wurden entfernt.
Skalieren der Textausgabe (Strecken der Pixel in X- und Y-Richtung) 
wurde vereinfacht.
Text außerhalb des Sichtbereichs wird abgeschnitten (Clipping).

--- ---

Im Zip-File liegen zwei Demo-Projekte, für den ESP8266 (hier am Beispiel 
des Wemos D1 Mini Moduls) mit OLED (128x64, IIC Interface).

Verindung zwischen OLED und D1 Mini:
1
OLED  -  D1-Mini
2
GND   -  G
3
VCC   -  3V3
4
SCL   -  D1 (SCL)
5
SDA   -  D2 (SDA)

Beispiel 1 -  Web1234Oled
Das erste Beispiel "Web1234Oled" basiert auf dem Programmcode von Stefan 
Thesen. Der ESP erzeugt hierbei ein eigenes WLAN im AP Mode. Die 
Programmvorlage wurde um Soft-AP, OLED-Ansteuerung und 
Nachrichtenanzeige erweitert.
Die Verbindungsdaten werden beim starten kurz als Übersicht angezeigt:
1
SSID: ESP-IP 1.2.3.4
2
PASS: 12345678
3
URL:  http://1.2.3.4
Soft-AP
Der ESP ist mittels Soft-AP unter der IP-Adresse 1.2.3.4 erreichbar. 
Dies ist einfacher zu merken als die Default IP 192.168.4.1. Da der ESP 
der einzig erreichbare Host in seinem eigenen WLAN ist, stört es nicht, 
dass die IP keine offiziell private Netzwerkadresse ist. Wen es stört, 
der kann es im Quelltext leicht abändern z.B: in 10.2.3.4.
OLED-Ansteuerung
Die OLED-Lib funktioniert im wesentlichen ohne RAM-Buffer, da sie 
Zeichen direkt auf das Display schreibt. Daher ist der auszugebende Text 
in Y-Richtung nicht frei positionierbar, sondern nur im 8-Zeilen Raster 
(Y-Koordinaten 0..7). Horizontal kann pixelgenau positioniert werden.
Um einen Text auf dem kleinen Display auf Entfernung besser erkennen zu 
können, kann die Textausgabe skaliert werden, siehe Beispielprogramm 
(oled.scaleX, oled.scaleY). Die Zeichen können somit vergrößert 
angezeigt werden. In Y-Richtung stehen die Werte 1,2 und 4 für die 
Skalierung zur Verfügung, in X-Richtung ist es frei, sinnvoll sind die 
Werte 1,2,3 und 4.

Nachrichtenanzeige
Neben den Buttons für LED ein/aus der Programmvorlage von Stefan Thesen 
wurde ein Eingabefeld für Nachrichten im HTML-Code ergänzt. Nachrichten 
werden auf dem Display als vergrößerte Laufschrift angezeigt werden.

Beispiel 2 -  WiFiScanOled
Das zweite Beispiel ist ein simpler WiFi-Scanner, der Netzwerknamen auf 
dem Display in Reihenfolge der Signalstärke sortiert anzeigt.
Zunächst erscheinen nur die Namen in großer Laufschrift. Offene 
unverschlüsselte Netze sind mit "(*)" vor dem Namen markiert. 
Anschließend erfolgt die Anzeige mit weiteren Infos als verkleinerte 
Übersicht.
Die oberste Zeile dient dabei als Statusanzeige.
"nn W" zeigt die Anzahl der gefundenen WLANs an.
"*n" zeigt die Anzahl unverschlüsselter WLANs (z.B. öffentliche 
Hotspots) an.
"->" signalisiert den nächsten Scan-Vorgang.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.