
Een OLED (Organic Light-Emitting Diode) display is een schermtechnologie waarbij miljoenen pixels zichzelf verlichten, in plaats van dat ze afhankelijk zijn van achtergrondverlichting zoals bij LED displays. Hierdoor kan elke pixel individueel aan of uit worden geschakeld, wat resulteert in perfect zwart beeld, een extreem hoog contrast en levendige kleuren. De zelfverlichtende pixels zorgen er ook voor dat OLED displays erg dun kunnen zijn en een uitstekende kijkhoek hebben, waardoor het beeld scherp blijft, zelfs als je niet recht voor het scherm zit.
Ofschoon ik meerdere OLED displays in mijn bezit heb, heb ik tot mijn verbazing nog geen project met een OLED display gepubliceerd. Dit is het moment.
Ik neem je mee in de basisaansturing van het display.
…daar gaan we!
Het SSD1306 OLED-scherm is verkrijgbaar in verschillende formaten (128×64, 128×32, 72×40, 64×48) en kleuren (wit, geel, blauw, geel + blauw).
Het scherm dat ik gebruik communiceert door middel van het I2C protocol met de Pico. Je hebt dus maar vier draden nodig om een opstelling te maken.
Aansluittabel
Sluit de draden als volgt aan:

Na het verbinden van het display met de Pico kun je nu Thonny opstarten, verbind de Pico ermee, kopieer onderstaande code in een nieuw bestand en start de code.
Thonny IDE
Ik ga er van uit dat je weet hoe Thonny IDE werkt en hoe je de Raspberry Pi Pico ermee verbind. Weet je het niet of twijfel je? Kijk dan hier waar ik uitleg hoe je het kunt doen.
De Code
Hieronder heb ik het basisscript geplaatst met als resultaat de bekende tekst als je iets voor het eerst op een display toont. De tekst start links op positie 0 en 10 punten van boven. Met de nummers kun je bepalen waar de tekst komt te staan.
import machine
from machine import Pin, SoftI2C
import ssd1306
from time import sleep
i2c = machine.SoftI2C(scl=machine.Pin(13), sda=machine.Pin(12))
pin = machine.Pin(16, machine.Pin.OUT)
pin.value(0)
pin.value(1)
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
oled.fill(0)
oled.text('Hello, World!', 0, 10)
oled.show()
SSD1306 commando’s
Het voordeel van de SSD1306 is dat je het display op tekst- en pixelniveau met een aantal commando’s kunt besturen. Hiermee kun je de output volledig naar je hand zetten.
oled.poweroff() # power off the display, pixels persist in memory
oled.poweron() # power on the display, pixels redrawn
oled.contrast(0) # dim
oled.contrast(255) # bright
oled.invert(1) # display inverted
oled.invert(0) # display normal
oled.rotate(True) # rotate 180 degrees
oled.rotate(False) # rotate 0 degrees
oled.show() # write the contents of the FrameBuffer to display memory
De subklasse FrameBuffer biedt ondersteuning voor grafische primitieven.
oled.fill(0) # fill entire screen with colour=0
oled.pixel(0, 10) # get pixel at x=0, y=10
oled.pixel(0, 10, 1) # set pixel at x=0, y=10 to colour=1
oled.hline(0, 8, 4, 1) # draw horizontal line x=0, y=8, width=4, colour=1
oled.vline(0, 8, 4, 1) # draw vertical line x=0, y=8, height=4, colour=1
oled.line(0, 0, 127, 63, 1) # draw a line from 0,0 to 127,63
oled.rect(10, 10, 107, 43, 1) # draw a rectangle outline 10,10 to 117,53, colour=1
oled.fill_rect(10, 10, 107, 43, 1) # draw a solid rectangle 10,10 to 117,53, colour=1
oled.text('Hello World', 0, 0, 1) # draw some text at x=0, y=0, colour=1
oled.scroll(20, 0) # scroll 20 pixels to the right
Deze routine is ook interessant:
# teken een andere FrameBuffer bovenop de huidige coördinaten
import framebuf
fbuf = framebuf.FrameBuffer(bytearray(8 * 8 * 1), 8, 8, framebuf.MONO_VLSB)
fbuf.line(0, 0, 7, 7, 1)
oled.blit(fbuf, 10, 10, 0) # draw on top at x=10, y=10, key=0
oled.show()Met onderstaande codes teken je het MicroPython-logo:
oled.fill(0)
oled.fill_rect(0, 0, 32, 32, 1)
oled.fill_rect(2, 2, 28, 28, 0)
oled.vline(9, 8, 22, 1)
oled.vline(16, 2, 22, 1)
oled.vline(23, 8, 22, 1)
oled.fill_rect(26, 24, 2, 4, 1)
oled.text('MicroPython', 40, 0, 1)
oled.text('SSD1306', 40, 12, 1)
oled.text('OLED 128x64', 40, 24, 1)
oled.text('Picademie.nl', 0, 50)
oled.show()
Veel plezier ermee! Mocht je vragen of opmerkingen hebben, laat dan hieronder een reactie achter.
Have A Nice Day!

Laat een reactie achter