🍪 Privacy & Transparency

We and our partners use cookies to Store and/or access information on a device. We and our partners use data for Personalised ads and content, ad and content measurement, audience insights and product development. An example of data being processed may be a unique identifier stored in a cookie. Some of our partners may process your data as a part of their legitimate business interest without asking for consent. To view the purposes they believe they have legitimate interest for, or to object to this data processing use the vendor list link below. The consent submitted will only be used for data processing originating from this website. If you would like to change your settings or withdraw consent at any time, the link to do so is in our privacy policy accessible from our home page..

Vendor List | Privacy Policy
Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry PI

Menu
  • Projekte
    • LED’s
    • Servo & Schrittmotoren
    • Sound
    • LCD’s
    • Kommunikation
    • Sicherheit
    • Weekend Project
  • Arduino
    • Tutorials
    • ProMini
      • Anschließen & Programmieren
    • Nano
      • Arduino Nano – Übersicht
    • UNO
      • Übersicht
    • MEGA 2560
      • Übersicht
    • Leonardo
      • Übersicht
    • NodeMCU
      • NodeMCU – “Einer für (fast) Alles!”
    • Lilypad
      • Arduino: Lilypad “Jetzt Geht’s Rund!”
    • WEMOS
      • WEMOS D1 – Arduino UNO kompatibles Board mit ESP8266 Chip
      • WEMOS D1 Mini – Übersicht
      • Wemos D1 mini Shields
    • STM32x
      • STM32F103C8T6 – Übersicht
    • Maker UNO
      • Maker UNO – Überblick und Test
    • ATTiny85
      • Mini Arduino mit ATTiny85 Chip
      • ATtiny85 mit dem Arduino UNO beschreiben
  • Android
  • Über mich
  • DeutschDeutsch
  • EnglishEnglish
Menu

Raspberry PI Pico #7: geometrische Figuren am OLED Display

Veröffentlicht am 31. Januar 202229. April 2023 von 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.

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

Schreibe einen Kommentar Antworten abbrechen

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

Kategorien

Tools

  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator
  • Widerstandsrechner
  • Rechner für Strom & Widerstände
  • ASCII Tabelle

Meta

  • Videothek
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Kontakt
  • Cookie-Richtlinie (EU)

Links

Blogverzeichnis Bloggerei.de Blogverzeichnis TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com
©2023 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
x
x