Guide: Brug en OLED-skærm til din Raspberry Pi

Dette praktiske projekt fører til en lillebitte OLED-skærm, som leverer nyttige data om en Raspberry Pi. Vi kan også køre vores projekt under boot, således at vi kan overvåge systemet.

Artikel top billede

(Foto: Computerworld)

Af Torben Okholm, Alt om Data

Denne artikel er oprindeligt bragt på Alt om Data. Computerworld overtog i november 2022 Alt om Data. Du kan læse mere om overtagelsen her.

OLED-skærmen bliver forbundet til Raspberry Pis GPIO ved hjælp af et I2C-interface. Det er et specielt interface, der kun kræver fire pins på denne Pi for at kunne sende data. Når du skal tilslutte din Pi, bør du holde dig til diagrammet herunder [Billede A].

Når den fysiske forbindelse er foretaget, skal vi aktivere I2C på din Pi – det foregår i værktøjet Raspberry Pi Configuration. Vi vil også installere to Python-biblioteker til dette projekt, og derfor skal du i en terminal skrive den følgende kommando: $ sudo pip3 install Adafruit-SSD1306 netifaces . Det første bibliotek er til vores OLED-skærm, mens det andet gør det muligt for vores kode at arbejde med netværksinterfaces.

Billede A

1 Koden skal skrives

Når vi skal skrive koden, bruger vi Thonny, der er standard-editoren til Python på den nyeste Raspbian. Du kan bruge enhver editor, men husk at gemme koden som “live-data.py” – og gem ofte. Vi begynder koden med en linje, der angiver, hvor vores Python 3-interpreter befinder sig. Vores projekt skal være en baggrunds-app i systemet, og dette får den til at køre.
#! /usr/bin/env python3

> Nu importerer vi tre biblioteker for at føje funktioner til vores kode. Det første gør det muligt for os at bruge OLED-skærmen med Python. Det andet bruger vi til at få adgang til systeminformation i Python. Det tredje giver adgang til netværksinterface-information. Bemærk, at vi importerer netifaces, men for nemheds skyld kan du henvise til det som “ni”. import Adafruit_SSD1306 import psutil import netifaces as ni

>> Tre yderligere importer, der alle er fra Python Imaging Library (PIL), skal håndtere tegning på skærmen. From PIL import Image, ImageDraw, ImageFont

>> For at kunne bruge OLED-skærmen [Billede B] skal vi fortælle Python, hvor den er, og hvilken størrelse den har. I den forbindelse opretter vi et objekt ved navn disp , og der bruger vi Adafruit-biblioteket – specifikt funktionen 128_64 . Bemærk, at skærmen ikke har en reset-pin ( rst ), og derfor sætter vi den til None . Så begynder vi på forbindelsen til skærmen.
disp = Adafruit_SSD1306.SSD1306_128_64(rst=None)
disp.begin()

Billede B

>> Når vi skal konfigurere skærmen, har vi brug for at kende bredden og højden; det klarer funktionen heldigvis for os. Disse tal bliver gemt til variabler, og dernæst bliver skærmen sat til 1-bit-farve (sort-hvid).
width = disp.width
height = disp.height
image = Image.new(‘1’, (width, height))

>> Mens vi forbereder skærmen på output, opretter vi et objekt, som vi kan tegne til.
draw = ImageDraw.Draw(image)

> Nu indstiller vi skærmens begrænsninger. Variablen padding sætter os i stand til at blive inden for skærmen; vi sætter toppen, så den svarer til vores padding, og bunden af skærmen som højden minus vores padding. Vi opretter også en variabel, x , til at holde styr på, hvor teksten fremkommer på den vandrette akse.
padding = -2
top = padding
bottom = height-padding
x = 0

2 Datadetaljer

Nu skal vi samle data til vores skærm. De første indsamlede data er cpu’ens temperatur, og derfor åbner vi en fil i skrivebeskyttet tilstand. Denne fil lagrer data fra cpu-temperatur-sensoren, og dem gemmer vi til en variabel ved navn f .
f = open(“/sys/class/thermal/thermal_zone0/temp”, “r”)
t = f.readline()
>> Eftersom disse data bliver gemt som en streng, skal vi, hvis vi ønsker at lave beregninger med den, konvertere den til en float. Den gemte værdi er alt for stor, og derfor dividerer vi den med 1000 og afrunder tallet til én decimal, og så har vi den korrekte temperatur.
t = float(t)
t = round(t/1000,1)

>> Når vi ønsker at kende procentværdien for cpu-brug, opretter vi en variabel ved navn cpu og gemmer outputtet fra funktionen psutil.cpu_percent() i den. Vi runder tallet ned uden decimaler, så det bliver nemmere at huske.
cpu = psutil.cpu_percent(interval=1)
cpu = round(cpu)

>> Når vi vil kende ram-forbruget, bruger vi igen psutil , i dette tilfælde den virtuelle ram-funktion. Den leverer en liste over data, og fra denne liste skal vi bruge den sekundære værdi, som er tilgængelig hukommelse. For at finde den sekundære værdi bruger vi [1] , fordi en liste begynder med 0. Så regner vi lidt på værdien i hukommelse, som står for bytes. Vi er nødt til at konvertere den til megabytes, og derfor dividerer vi værdien med 1024 – to gange.
memory = psutil.virtual_memory()
memory = memory[1]
memory = round(memory / 1024 / 1024)

3 Adresser og advarsler

Den sidste stump data er den interne ip-adresse på Ethernet-porten. Derfor opretter vi en variabel med navnet ip og gemmer de data, vi har opnået fra netifaces-funktionen ifaddresses i den. Det kræver interfacenavnet som argument, og i de returnerede data skal vi gå ind i en række af indlejrede lister: først ved position 2, derefter ind i den liste, position 0. Dernæst bruger vi nøglen addr til at hente de data, der er gemt i en mappe.
ip = ni.ifaddresses(‘eth0’)[2][0][‘addr’]

> Det næste skridt består i at tilføje en advarsel til vores cpu. Hvis temperaturen ( t ) er over 50 grader, bliver teksten på skærmen ændret. Ellers får vi NOMINAL .
if t > 50:
ALERT = “CPU TEMP ALERT”
else:
ALERT = “NOMINAL”

4 Tekst på skærmen

Nu begynder vi at skrive tekst til skærmen. De første to linjer skriver cpu-temperatur og brug. Den første linje er vores cpu-temperatur, og du kan se, at vi begynder med at skrive øverst til venstre ( x ) to pixel fra toppen af skærmen (toppen er -2). Vi skriver en tekststreng og konverterer den til en streng t . Så bruger vi standardskrifttypen og sætter farven til 255 (hvid). Den anden linje er den samme, men vi rykker otte pixel ned.
draw.text((x, top), “CPU Temp is “+str(t)+”C”, font=ImageFont
load_default(), fill=255)
draw.text((x, top+8), “CPU usage is “+str(cpu)+”%”,
font=ImageFont.load_default(), fill=255)

>> De næste tre linjer er vores Advarselsstatus, tilgængelig ram og ip-adresse.
draw.text((x, top+16), ALERT, font=ImageFont.load_default(),
fill=255)
draw.text((x, top+25), str(memory)+”MB Free”, font=ImageFont.
load_default(), fill=255)
draw.text((x, top+33), “eth0:”+ip,
font=ImageFont.load_default(),
fill=255)

>> De allersidste to linjer af denne kode opdaterer skærmbilledet og viser de levende data.
disp.image(image)
disp.display()

>> Gem koden, og klik “Run”. Nu vågner din OLED-skærm til live og viser de seneste data for din maskine. I boksen nedenfor kan du se, hvordan du får denne kode kørt under boot. Hvis du får brug for at ændre I2C-adressen på din skærm, ændrer du forbindelsen til 0x78 og opretter en ny til 0x7A [Billede C].

Billede C
Læses lige nu

    Annonce

    Computerworld Events

    Vi samler hvert år mere end 6.000 deltagere på mere end 70 events for it-professionelle.

    Ekspertindsigt – Lyt til førende specialister og virksomheder, der deler viden om den nyeste teknologi og de bedste løsninger.
    Netværk – Mød beslutningstagere, kolleger og samarbejdspartnere på tværs af brancher.
    Praktisk viden – Få konkrete cases, værktøjer og inspiration, som du kan tage direkte med hjem i organisationen.
    Aktuelle tendenser – Bliv opdateret på de vigtigste dagsordener inden for cloud, sikkerhed, data, AI og digital forretning.

    Sikkerhed | København

    Cyber Security Festival 2026

    Mød Danmarks skrappeste it-sikkerhedseksperter og bliv klar til at planlægge og eksekvere en operationel og effektiv cybersikkerhedsstrategi, når vi åbner dørene for +1.700 it-professionelle. Du kan glæde dig til oplæg fra mere end 80 talere og...

    It-løsninger | København

    Dynamics 365 FO: Næste niveau for data, AI og forretning

    Få overblik over vejen fra Dynamics AX til Finance & Operations – eller løft værdien af Dynamics FO. Hør praksisnære cases om strategi, migration og optimering. Vælg spor, få dyb faglig indsigt, styrk beslutningerne. Tilmeld dig konferencen i...

    It-løsninger | København

    Data & Analytics Day 2026

    Computerworld samler danske cases og skarpe keynotes om operationel brug af data. Få greb til automatisering, generativ AI, predictive analytics og tættere dataintegration. Omsæt analyser til handling i hverdagen. Læs mere og tilmeld dig Data &...

    Se alle vores events inden for it

    Navnenyt fra it-Danmark

    T-Systems har pr. 1. september 2026 ansat Mikael Falk som Business Development Director. Mikael skal især beskæftige sig med forretningsudvikling indenfor Manufacturing & Life Science og styrke T-Systems position med fokus på Cloud, AI og sikkerhed. Mikael kommer fra en stilling som Regional Business Development Director hos DXC Technology. Nyt job

    Mikael Falk

    T-Systems

    Fellowmind Denmark A/S har pr. 1. september 2026 ansat Morten Jakobi som Business Unit Director. Han skal især beskæftige sig med at samle og udvikle Fellowminds forretning inden for Managed Services, Cloud Infrastructure & Security. Han kommer fra en stilling som Chief Executive Officer hos Inventio.it A/S. Han har tidligere beskæftiget sig med Ledelse og udvikling af Managed Services, serviceforretninger og transformation i Norden og Benelux. Nyt job

    Morten Jakobi

    Fellowmind Denmark A/S

    Arctic Wolfs Network har pr. 1. september 2026 ansat Victor Dohlmann som Sales Director for Nordics. Nyt job

    Victor Dohlmann

    Arctic Wolfs Network

    Softwarevirksomheden Idura, som udvikler løsninger til digital identifikation og autentifikation, har pr. 1. august 2026 ansat Maria Binger, 44 år,  som CFO. Hun skal især beskæftige sig med den finansielle styring i takt med Iduras vækst i Danmark og internationalt med fokus på blandt andet forecasting. Hun kommer fra en stilling som Director Business Finance hos Danelec. Hun er uddannet cand.merc.aud. fra Copenhagen Business School. Hun har tidligere beskæftiget sig med finance hos Agillic, Cobham SATCOM og Saxo Bank. Nyt job

    Maria Binger

    Softwarevirksomheden Idura, som udvikler løsninger til digital identifikation og autentifikation,