OLED-scherm
Op een OLED-scherm van 128 × 64 pixels zet je tekst en getallen, zodat je op de robot zelf ziet wat hij meet.
Materiaal
Een OLED-scherm laat je tekst en getallen zien op je robot, zonder dat hij aan de laptop hoeft te hangen. Ideaal om sensorwaardes te volgen tijdens het rijden. Het scherm praat via I2C (pinnen SDA en SCL).
- Nano op het shieldArduino Nano RP2040 Connect op het Leaphy Murphy Shield
- OLED-scherm128 × 64 pixels
- SDA/SCL-moduleEen multiplexer, aanbevolen
Verder: 4-pins jumperkabel female/female
Het uiterlijk van het scherm verschilt per merk, maar de aansluitingen zijn hetzelfde: VCC, GND, SDA, SCL. De multiplexer heb je nodig als je ook TOF-sensoren gebruikt: dan werkt alles tegelijk.
Controlevraag
Hoeveel pinnen heeft het OLED-scherm minimaal nodig op de microcontroller?
Antwoord
Vier: VCC (3,3V), GND, SDA (A4) en SCL (A5).
Aansluiten

Sluit het OLED-scherm via een 4-pins jumperkabel aan op de multiplexer, die in de bus rechts op het shield steekt:
- VCC → VCC op channel 7 van de multiplexer
- GND → GND op channel 7 van de multiplexer
- SDA → SDA op channel 7 van de multiplexer
- SCL → SCL op channel 7 van de multiplexer
Op het scherm zit SCL boven SDA, op de multiplexer andersom: die twee draden kruisen. In dit voorbeeld zit het scherm dus op channel 7. Steek het in een ander kanaal? Pas dan het getal in de code aan.
Code
Voorbeeld
from leaphymicropython.actuators.oled_screen import OLEDSH1106
oled = OLEDSH1106(width=128, height=64, channel=7)
oled.fill("white")
oled.text('Hello, World 1!', x=0, y=0)
oled.text('Hello, World 2!', x=0, y=10)
oled.text('Hello, World 3!', x=0, y=20)
oled.show()
Op het scherm verschijnen nu drie regels.
Uitleg
oled = OLEDSH1106(width=128, height=64, channel=7)
- width: breedte in pixels (128).
- height: hoogte in pixels (64).
- channel: het channel van de multiplexer waar het scherm op zit.
oled.text('Hallo!', x=0, y=0)
oled.show()
text()zet tekst klaar op positie (x, y). Een letter is 8 bij 8 pixels.show()stuurt alles wat je klaargezet hebt naar het scherm. Vergeet deze niet, anders blijft het scherm leeg.
Andere handige functies
Scherm leeg maken
oled.fill("white") # alles wit
oled.show()
oled.fill("black") # alles zwart
oled.show()
Tekst is standaard zwart. Op een wit scherm zie je hem meteen. Maak je het
scherm zwart, geef je tekst dan color="white" mee, anders zet je zwart op
zwart:
oled.fill("black")
oled.text('Wit op zwart', x=0, y=0, color="white")
oled.show()
Een getal tonen
Getallen zet je in een f-string om ze als tekst te tonen:
temperatuur = 22.5
oled.fill("white")
oled.text(f'Temp: {temperatuur}C', x=0, y=40)
oled.show()
Opdracht: teller op het scherm
Laat het scherm elke seconde een teller een nummer hoger laten zien (0, 1, 2, 3, ...).
Tip
Maak elke ronde het scherm leeg met oled.fill("white") en zet de nieuwe waarde erop met oled.text(...). Vergeet oled.show() niet.
Oplossing
from leaphymicropython.actuators.oled_screen import OLEDSH1106
from time import sleep
oled = OLEDSH1106(width=128, height=64, channel=7)
teller = 0
while True:
oled.fill("white")
oled.text(f'Teller: {teller}', x=0, y=0)
oled.show()
teller = teller + 1
sleep(1)
Grotere tekst
Een meetwaarde lees je van een afstand beter als hij groot op het scherm
staat. Met scale maak je de letters groter: bij scale=2 wordt elke
pixel een blokje van 2 bij 2, en is een letter 16 bij 16 pixels.
from leaphymicropython.actuators.oled_screen import OLEDSH1106
oled = OLEDSH1106(width=128, height=64, channel=7)
oled.fill("white")
oled.text('Klein', x=0, y=0)
oled.text('Groot', x=0, y=16, scale=2)
oled.show()
Hoe groter de letters, hoe minder er op een regel past:
scale | Een letter | Tekens op een regel |
|---|---|---|
| 1 | 8 × 8 pixels | 16 |
| 2 | 16 × 16 pixels | 8 |
| 3 | 24 × 24 pixels | 5 |
Wat niet past, valt van het scherm af: de tekst gaat niet verder op een
nieuwe regel. Zet een volgende regel ook verder omlaag, minstens 8 × scale
pixels. scale is een heel getal, dus 1, 2 of 3. Met scale=1.5 krijg je
een foutmelding.
Opdracht: een grote teller
Maak de teller van de vorige opdracht groot: het woord Teller klein
bovenaan, en het getal eronder met scale=3.
Tip
Dat zijn twee keer oled.text(...). Het woord is 8 pixels hoog, dus het getal
kan op y=16.
Oplossing
from leaphymicropython.actuators.oled_screen import OLEDSH1106
from time import sleep
oled = OLEDSH1106(width=128, height=64, channel=7)
teller = 0
while True:
oled.fill("white")
oled.text('Teller', x=0, y=0)
oled.text(f'{teller}', x=0, y=16, scale=3)
oled.show()
teller = teller + 1
sleep(1)
Met scale=3 passen er vijf cijfers op een regel, dus tot 99999.