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.

    Digital transformation | Frederiksberg

    Roundtable: AI i drift – fra eksperimenter til ansvar, værdi og kontrol

    AI-initiativerne breder sig hurtigt, men skaleringen halter. Kun hver fjerde virksomhed har flyttet en større del af sine AI-eksperimenter i produktion. Computerworld samler en udvalgt kreds af CIO’er og digitale beslutningstagere til et...

    Sikkerhed | Online

    Det du glemmer i Azure - men aldrig on-prem: Sådan genfinder du kontrollen

    Undgå dyre fejl i Azure. Få styr på udfasede services, skjulte omkostninger og governance. Lær, hvordan Reserved Instances, Azure Hybrid Benefit og de rette styringsmekanismer giver mere værdi, lavere omkostninger og en mere robust Azure-platform....

    Se alle vores events inden for it

    Navnenyt fra it-Danmark

    Systematic A/S har pr. 1. august 2026 ansat Casper Voldstedlund, 52 år,  som Director, Products. Han skal især beskæftige sig med drive produktudvikling inden for national sikkerhed og kritisk infrastruktur (NSI). Han kommer fra en stilling som Senior Director hos Stibo Systems A/S. Nyt job

    Casper Voldstedlund

    Systematic A/S

    Arctic Wolf Networks har pr. 3. august 2026 ansat Johnny Krogsboll som Head of Sales Engineering for Norden.Med base i Stockholm får han ansvaret for Arctic Wolfs samlede Sales Engineering-organisation i den nordiske region.<br /><br />Johnny Krogsboll skal være med til at udbygge Arctic Wolfs tilstedeværelse i Norden og hjælpe virksomheder og organisationer med at stå stærkere over for et stadig mere komplekst cybertrusselsbillede. Det skal blandt andet ske i tæt samarbejde med Arctic Wolfs vigtigste kanalpartnere i regionen.<br /><br />Gennem sin karriere har Johnny Krogsboll arbejdet med og rådgivet virksomheder hos blandt andre Hewlett-Packard, Trend Micro og Palo Alto Networks med fokus på at skabe konkret værdi af deres teknologiinvesteringer. Nyt job

    Johnny Krogsboll

    Arctic Wolf Networks

    Norriq Danmark A/S har pr. 1. juli 2026 ansat Nanna-Louise Aae Kudahl som Project Manager. Hun skal især beskæftige sig med drive vores Business Central-projekter i samarbejde med resten af sine nye kollegaer i ERP. Hun kommer fra en stilling som Product Manager hos KMD A/S. Hun er uddannet på Aalborg Universitet i kommunikation og Digitale Medier og har en kandidat i IT-ledelse. Nyt job

    Nanna-Louise Aae Kudahl

    Norriq Danmark A/S

    Norriq Danmark A/S har pr. 3. august 2026 ansat Jeppe Lindberg som Developer. Han skal især beskæftige sig med at være med til at analysere, designe og udvikle skræddersyede forretningsløsninger til vores kunder i Business Central. Han kommer fra en stilling som Business Central Developer hos Evexo. Han er uddannet hos Aalborg Universitet- Master's degree, Computer Software Engineering. Nyt job

    Jeppe Lindberg

    Norriq Danmark A/S