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

Raspberry PI Pico #7: geometrische Figuren am OLED Display

Posted on 31. Januar 20229. März 2024 by Stefan Draeger

In diesem Beitrag möchte ich dir zeigen, wie du geometrische Figuren auf einem OLED Display am Raspberry Pi Pico programmieren und anzeigen lassen kannst.

Raspberry Pi Pico - geometrische Figuren zeichnen
Raspberry Pi Pico – geometrische Figuren zeichnen

Im letzten Beitrag Raspberry PI Pico #6: OLED Display betreiben habe ich dir bereits gezeigt, wie man das Display anschließt, den Mikrocontroller für CircuitPython einrichtest und einen Text auf dem Display mit der Adafruit_SSD1306 Bibliothek anzeigen kannst.

Raspberry Pi Pico mit OLED Display
Raspberry Pi Pico mit OLED Display

Für diesen Beitrag verwende ich jedoch ein 0,96 Zoll (2,44 cm) OLED Display, welches etwas größer und somit für einen Beitrag besser geeignet ist.

0,96" OLED Display
0,96″ OLED Display
0,96" OLED Display - Rückseite
0,96″ OLED Display – Rückseite
0,96" OLED Display (ohne Displayfolie)
0,96″ OLED Display (ohne Displayfolie)

Vorsicht: Dieses Display gibt es mit dem Treiberchip SH1106 & SSD1306, für diesen Beitrag verwende ich das Display mit dem SSD1306 Chip.

  • Benötigte Ressourcen für dieses Projekt
  • Aufbau der Schaltung
  • Programmieren von geometrischen Figuren am Raspberry Pi Pico mit CircuitPython
    • ein Rechteck / Quadrat zeichnen
    • eine Linie zeichnen
    • ein Pixel Zeichnen
      • einen Kreis zeichnen

Benötigte Ressourcen für dieses Projekt

Wenn du das Beispiel aus diesem Beitrag nachbauen möchtest, dann benötigst du:

  • einen Raspberry Pi Pico*,
    • ein Micro USB Datenkabel*,
  • ein OLED Display*,
  • vier Breadboardkabel*, weiblich-weiblich, 20 cm

Das OLED Display kannst du entweder direkt an den Pi Pico über die Breadboardkabel anschließen oder aber wie ich es mache über ein 170 Pin Breadboard*, dazu benötigst du jedoch vier Breadboardkabel* mit männlich-weiblichen Anschlüssen.

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Des Weiteren verwende ich für Aufbauten rund um den Pi Pico ein selbst erstelltes Expansionsboard welches ich dir im Beitrag DIY Expansion Board für Raspberry PI Pico mit Grove Adapter vorgestellt habe.

DIY Expansion Board für den Raspberry PI Pico mit Grove Adapter
DIY Expansion Board für den Raspberry PI Pico mit Grove Adapter
Expansion Board fertig aufgebaut
Expansion Board fertig aufgebaut

Aber natürlich funktioniert der Aufbau auch ohne ein solches Board!

Aufbau der Schaltung

Zunächst einmal einen kurzen Rückblick auf den vorherigen Beitrag wo ich dir bereits gezeigt habe wie ein OLED Display an ein Pi Pico über I2C angeschlossen wird.

OLED DisplayRaspberry Pi Pico
VCCPin 36, 3.3 V
GNDPin 38, GND
SCLPin 4, GP2, SCL
SDAPin 5, GP3, SDA

Hier nun die Grafik wie ich das OLED Display an den Pi Pico angeschlossen habe.

Aufbau der Schaltung - Raspberry Pi Pico mit OLED Display
Aufbau der Schaltung – Raspberry Pi Pico mit OLED Display

Programmieren von geometrischen Figuren am Raspberry Pi Pico mit CircuitPython

Bevor wir mit der Programmierung von geometrischen Figuren kommen, müssen wir zunächst die benötigten Bibliotheken installieren.

Für diesen Beitrag benötigst du die beiden Bibliotheken:

  • Adafruit_SSD1306
  • Adafruit_framebuff

Diese findest du im Adafruit CircuitPython Bundle unter https://circuitpython.org/libraries. Die Bibliotheken werden in den Ordner „lib“ kopiert welcher sich auf deim Pico befindet.

ein Rechteck / Quadrat zeichnen

Zeichnen wir zunächst ein Quadrat bzw. ein Rechteck. Ein Quadrat ist ja lediglich ein Rechteck, bei welchem alle Seiten gleich lang sind.

Ein Rechteck wird mit der Funktion „rect“ gezeichnet wobei als Parameter die Werte:

  • X Position begin
  • Y Position begin
  • X Position ende
  • Y Position ende
  • Farbe
import board
import busio
import adafruit_ssd1306
from time import sleep

SDA = board.GP2
SCL = board.GP3
i2c = busio.I2C(SCL, SDA)

oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=60)
oled.fill(0)

startX = 0
startY = 0
endX = 128
endY = 64
color = 1 # white = 1, black = 0
oled.rect(startX, startY, endX, endY, color) 
sleep(0.1)
oled.show()

Als Ausgabe haben wir nun ein Rechteck um die Ecken unseres OLED Displays gezeichnet.

Rechteck
Rechteck auf dem OLED Display

eine Linie zeichnen

Zeichen wir als nächstes eine Linie.

Auch für die Linie (wie auch beim Rechteck) benötigen wir die Parameter:

  • X Position begin
  • Y Position begin
  • X Position ende
  • Y Position ende
  • Farbe
import board
import busio
import adafruit_ssd1306
from time import sleep

SDA = board.GP2
SCL = board.GP3
i2c = busio.I2C(SCL, SDA)

oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=60)
oled.fill(0)

startX = 0
startY = 10
endX = 64
endY = 20
color = 1 # white = 1, black = 0
oled.line(startX, startY, endX, endY, color) 
sleep(0.1)
oled.show()

Die Linie startet an der Position X=0, Y=10 und endet an X=64, Y=20.

Linie
Linie auf dem OLED Display

ein Pixel Zeichnen

Wir können auch beliebige Pixels an Positionen X & Y Zeichnen und somit zbsp. einen Kreis zeichnen.

Die Funktion „pixel“ benötigt lediglich 3 Parameter:

  • Position X,
  • Position Y,
  • Farbe

Wir können nun mit einer For-Schleife eine gestrichelte Linie auf dem Display zeichnen.

import board
import busio
import adafruit_ssd1306
from time import sleep

SDA = board.GP2
SCL = board.GP3
i2c = busio.I2C(SCL, SDA)

oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=60)
oled.fill(0)

for i in range(0,128,5):
    startX = i
    startY = 10
    color = 1 # white = 1, black = 0
    oled.pixel(startX, startY, color) 

sleep(0.1)
oled.show()

Auf dem Display wird nun die gepunktete Linie angezeigt.

gestrichelte Linie
gestrichelte Linie auf dem OLED Display

einen Kreis zeichnen

Es fehlt der Bibliothek eine Funktion, welche dazu dient einen Kreis zu zeichnen. Aus den Beispielen zur Adafruit SSD1306 Bibliothek für CircuitPython findest du das Beispiel „ssd1306_bouncing_ball.py“ bei welchem ein Kreis auf dem Display springt. Hier wird der Kreis mit der zuvor gezeigten Funktion „pixel“ und einer Schleife gezeichnet.

Dieser Funktion wird der Mittelpunkt des Kreises sowie der Radius übergeben, als letzter Parameter wird die Farbe gesetzt, wobei diese per Default aus „weiß“ gesetzt ist.

def draw_circle(xpos0, ypos0, rad, col=1):
    x = rad - 1
    y = 0
    dx = 1
    dy = 1
    err = dx - (rad << 1)
    while x >= y:
        oled.pixel(xpos0 + x, ypos0 + y, col)
        oled.pixel(xpos0 + y, ypos0 + x, col)
        oled.pixel(xpos0 - y, ypos0 + x, col)
        oled.pixel(xpos0 - x, ypos0 + y, col)
        oled.pixel(xpos0 - x, ypos0 - y, col)
        oled.pixel(xpos0 - y, ypos0 - x, col)
        oled.pixel(xpos0 + y, ypos0 - x, col)
        oled.pixel(xpos0 + x, ypos0 - y, col)
        if err <= 0:
            y += 1
            err += dy
            dy += 2
        if err > 0:
            x -= 1
            dx += 2
            err += dx - (rad << 1)

Hier nun ein kleines Beispiel wie du mithilfe der Funktion „draw_circle“ einen Kreis zeichnen kannst.

import board
import busio
import adafruit_ssd1306
from time import sleep

def draw_circle(xpos0, ypos0, rad, col=1):
    x = rad - 1
    y = 0
    dx = 1
    dy = 1
    err = dx - (rad << 1)
    while x >= y:
        oled.pixel(xpos0 + x, ypos0 + y, col)
        oled.pixel(xpos0 + y, ypos0 + x, col)
        oled.pixel(xpos0 - y, ypos0 + x, col)
        oled.pixel(xpos0 - x, ypos0 + y, col)
        oled.pixel(xpos0 - x, ypos0 - y, col)
        oled.pixel(xpos0 - y, ypos0 - x, col)
        oled.pixel(xpos0 + y, ypos0 - x, col)
        oled.pixel(xpos0 + x, ypos0 - y, col)
        if err <= 0:
            y += 1
            err += dy
            dy += 2
        if err > 0:
            x -= 1
            dx += 2
            err += dx - (rad << 1)

SDA = board.GP2
SCL = board.GP3
i2c = busio.I2C(SCL, SDA)

oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=60)
oled.fill(0)

center_x =40
center_y = 40
radius = 20

draw_circle(center_x, center_y, radius)

sleep(0.1)
oled.show()

Auf dem Display wird nun ein Kreis angezeigt.

Kreis
Kreis auf dem OLED Display

1 thought on “Raspberry PI Pico #7: geometrische Figuren am OLED Display”

  1. Pingback: 1,77 Zoll TFT Display am Arduino UNO R3 - 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}