Programmieren der OLED UNIT SH1107 am M5Stack ATOM

In diesem neuen Beitrag möchte ich dir zeigen wie du die OLED UNIT SH1107 am M5Stack ATOM programmieren kannst.

Dieses kleine Display habe ich mir von einem Coupon der Firma M5Stack gekauft. D.h. dieser Beitrag ist indirekt durch die gleichnamige Firma gesponsert geworden.

Für diesen Beitrag verwende ich zusätzlich den M5Stack ATOM Lite welchen ich ebenfalls bereits im gleichnamigen Beitrag ATOM Lite von M5Stack vorgestellt habe.

programmieren der OLED UNIT SH1107 von M5Stack mit UIFlow
Dieses Video ansehen auf YouTube.

Bezug

Dieses kleine OLED Display bekommst du über den offiziellen Shop auf https://shop.m5stack.com für 10,95 $ zzgl. Versandkosten.

Lieferumfang

Zum Lieferumfang gehört neben dem OLED Display noch ein Grove Kabel (HY2.0-4P) sowie eine RFID – Karte mit nettem Aufdruck.

Technische Daten

  • Stromaufnahme – 58 mA
  • I²C Adresse – 0x3C
  • Umgebungstemperatur 0 °C bis max. 40 °C bzw. 32 °F bis 104 °F
  • Auflösung 128 x 64 Pixel
  • Abmaße
    • Display (L x B) – 14,7 mm x 29,42 mm
    • inkl. Gehäuse (L x B x H) – 24 mm x 56 mm x 8 mm
    • Pixelgröße – 0,15 mm x 0,15 mm
  • Gewicht – 20g

Wie für ein OLED Display üblich kann man den Inhalt des Displays aus jedem Blickwinkel auf das Display erkennen.

Anschluss an den M5Stack ATOM

Die OLED UNIT SH1107 verfügt wie bereits erwähnt über eine Grove Schnittstelle und wird über das mitgelieferte Kabel an ein passenden Mikrocontroller angeschlossen.

Grove Schnittstelle an der OLED UNIT SH1107
Grove Schnittstelle an der OLED UNIT SH1107

Du kannst dieses Display auch an den M5Stack ATOM Matrix anschließen, dieser verfügt ebenfalls über eine Grove Schnittstelle.

M5Stack ATOM Matrix & ATOM Lite
M5Stack ATOM Matrix & ATOM Lite

M5Stack OLED UNIT SH1107 über UIFlow programmieren

Die wohl einfachste Art einen Mikrocontroller von M5Stack zu programmieren ist über UIFlow. Hier musst du lediglich die entsprechenden Elemente zusammenstecken und so baut sich der Quellcode einfach und übersichtlich auf.

Auf dem GitHub Repository StefanDraeger / m5Stack findest du alle hier dargestellten Beispiel zum einfachen Download.

Einrichten der Web-App UIFlow

Damit wir das OLED Display in UIFlow verwenden können, müssen wir dieses zunächst aktivieren. Das geschieht, indem wir unten links auf das “+” Symbol klicken.

Schaltfläche zum hinzufügen einer UNIT in UIFlow
Schaltfläche zum Hinzufügen einer UNIT in UIFlow

Aus dem neu geöffneten Fenster wählen wir nun das OLED das entsprechende Modul auswählen.

M5Stack UIFlow OLED UNIT
M5Stack UIFlow OLED UNIT

Ausgeben eines Zählers auf der UNIT SH1107

Als Erstes möchte ich dir zeigen wie du im Takt von 250ms einen Zähler inkrementierst und diesen Wert auf dem Display ausgeben kannst.

UIFlow Programm zum Anzeigen eines Zählers auf der SH1107 Unit
UIFlow Programm zum Anzeigen eines Zählers auf der SH1107 Unit

Video

Anzeigen von langen Texten auf dem OLED Display

Das OLED Display kann nur eine maximale Anzahl von Zeichen auf einmal pro Zeile anzeigen. Wir können aber den Text durch das Display scrollen lassen.

UIFlow Programm zum Scrollen von langem Text auf dem Display
UIFlow Programm zum Scrollen von langem Text auf dem Display

Video

Ausgeben von Datum & Zeit eines NTP Servers auf dem OLED Display

Ein etwas komplexeres Beispiel ist das Ausgeben von Datum & Uhrzeit auf dem Display. Für dieses kleine Beispiel benötigst du zusätzlich eine WiFi Verbindung für den Mikrocontroller!

Eigentlich ist die “programmierung” mit UIFlow recht einfach aber dieses Beispiel wird etwas komplexer aber dazu an entsprechender Stelle mehr.

Aufbau der WiFi Verbindung zum lokalen WLAN Netzwerk

Als Erstes bauen wir die lokale WiFi Verbindung auf, dazu benötigen wir lediglich die SSID sowie das Passwort. Das Element dazu finden wir unter “Hardwares” (1) > “Network” (2) > “Verbinde mit ….”(3).

Einrichten der WiFi Verbindung - Schritt 1
Einrichten der WiFi Verbindung – Schritt 1

In diesem Element setzen wir in die Platzhalter die Werte für die Verbindung ein.

SSID & Passwort zum lokalen WLAN
SSID & Passwort zum lokalen WLAN

Damit wird die Verbindung aufgebaut, sobald der Mikrocontroller gestartet wird. Im nächsten Schritt müssen wir nun prüfen, ob diese Verbindung erfolgreich aufgebaut wurde oder eben nicht.

Wenn eine Verbindung nicht aufgebaut werden konnte, wird dieses leider erst nach ca. 2 Minuten im Programm erkannt und behandelt.

prüfen des WiFi Status
prüfen des WiFi Status

Wenn die Verbindung erfolgreich war, dann wird “OK” auf dem Display ausgegeben und andernfalls “FAIL!”.

Funktion zum Anzeigen von Datum & Uhrzeit

Wenn der Aufbau der Verbindung erfolgreich war, wollen wir die Verbindung zum NTP Server aufnehmen und dort Datum & Uhrzeit empfangen. Diese Werte wollen wir dann formatiert auf dem Display anzeigen lassen.

Zunächst erstellen wir die Funktion “display_datetime” und rufen diese im positiven Fall der if-Bedingung auf.

In der Funktion “display_datetime” wird zunächst die Verbindung mit dem NTP Server “cn.pool.ntp.org” aufgebaut (1). Alternativ kann man auch den deutschen NTP Server unter “de.pool.ntp.org” verwenden. Jedoch wird jeweils als Timezone der Wert “2” gesetzt das bedeutet die “Greenwich Mean Time” +2 Stunden.

In einer Schleife (2) welche 100 mal durchlaufen wird sorgen wir dafür das der lange Text durch das Display von rechts nach links scrollt. Dazu dekrementieren wir eine Variable “x” um -1 (3) und positionieren den Text an dieser Position (4). Danach wird der Text angezeigt bzw. das Display aktualisiert und eine Pause von 25ms eingelegt (5).

Funktion zum anzeigen von Datum & Uhrzeit auf dem OLED Display SH1107

Video

Programmieren des OLED Displays SH1107 mit MicroPython

Neben der Möglichkeit den Mikrocontroller M5Stack ATOM mit UIFlow zu programmieren gibt es noch die Skriptsprache MicroPython. Für die Programmierung in MicroPython brauchst du keine extra Software installieren, denn du kannst einfach in UIFlow von der grafischen Programmierung mit Blockly zu Python mit einem klick wechseln.

Einbinden des OLED Displays

Zunächst müssen wir das OLED Display einbinden. Hier ist es am einfachsten, wenn wir zurück zur Ansicht “Blockly” wechseln und dort die entsprechende UNIT aktivieren.

Alternativ kann man natürlich auch den Import Befehl selber implementieren.

import unit

oled_0 = unit.get(unit.OLED, unit.PORTA)

Programmieren eines Zählers und Anzeigen auf der OLED UNIT SH1107 mit MicroPython

Wollen wir nun ein kleines Programm schreiben, um einen Zähler im Takt von 250ms um eins zu inkrementieren und diese auf dem Display anzeigen zu lassen.

from m5stack import *
from m5ui import *
from uiflow import *
import time
import unit

# OLED Display am Port A angeschlossen
# sollte ein Grove Hub verwendet werden muss hier der entsprechende Port eingestellt werden
oled_0 = unit.get(unit.OLED, unit.PORTA)

# Zähler initial auf 0 setzen
counter = 0
# Endlosschleife
while True:
  # Zähler um eins inkrementieren
  counter = counter + 1
  # füllen des Displays mit der Farbe "schwarz"
  oled_0.fill(0x000000)
  # umwandeln des Zahlenwertes in eine Zeichenkette und setzen des Textes an Spalte 0 & Zeile 0
  # in der Farbe Schwarz
  oled_0.text(str(counter), 0, 0, 0xffffff)
  # Anzeigen des zuvor positionierten Textes
  oled_0.show()
  # eine Pause von 250ms einlegen
  wait_ms(250)

Ausblick & Fazit

Da meine kleinen M5Stack ATOM Lite & ATOM Matrix nur über eine Grove Schnittstelle verfügen muss ich mir noch ein passenden Grove Hub besorgen.

M5Stack Grove Hub auf aliexpress.com
M5Stack Grove Hub auf aliexpress.com

Diese “M5Stack I2C Hub 1 to 6 Expansion Unit” habe ich mir bei Eckstein Komponente für 5,99 € zzgl. 1,99 € Versandkosten bestellt und sobald dieser da ist, werde ich mit ein paar Sensoren und Aktoren ein kleines Beispiel aufbauen und auf diesem Blog präsentieren.

Kommentar hinterlassen

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