OLED display 128×32 aansluiten via de I2C interface

Je kunt een Raspberry Pi voorzien van verschillende LCD schermen, dit kan handig zijn voor systeemmeldingen of voor het uitvoeren van acties. Je kunt je Raspberry Pi ook voorzien van een OLED display, deze heeft een zeer hoge contrast ratio en kan per pixel worden aangestuurd.

In dit stappenplan gaan we een mini OLED display (128×32 pixels) aansluiten de Raspberry Pi, waarbij we gebruik maken van enkele speciale Python libraries om het display aan te kunnen sturen via de I2C interface.

Gebruikte componenten

• 0.92-inch OLED I2C module display 128X32 pixels (3€) 
• 8x Dupont verbindingskabel (female/female)

Raspberry Pi Zero, Raspberry Pi 2, Raspberry Pi 3
Raspbian Jessie (2016-11-25 kernel 4.4)

Aansluitschema OLED display

Je kunt de OLED display aansluiten op de Raspberry Pi volgens onderstaand schema. De pinnen op de OLED module kunnen verschillende labels hebben, bijvoorbeeld VDD of 3v3 in plaats van VIN. Let op dat de pin volgorde ook per gebruikte OLED module kan verschillen.

Raspberry Pi I2C OLED Module
3.3V (PIN #1) VCC
SDA (PIN #3) SDA
SCL (PIN #5) SCL
GND (PIN #6) GND

I2C Activeren

Om tekst op het LCD scherm te krijgen gebruiken we een speciaal Python script dat de I2C interface aanstuurt. Om toegang te krijgen tot de interface dient deze in de Raspberry Pi geactiveerd te zijn. Je kunt deze activeren met behulp van raspi-config.

sudo raspi-config

Selecteer de optie ‘Advanced Options’ ▸ ‘I2C’ en kies ‘YES’ om de I2C interface te activeren.

Controleren werking I2C

Nadat de module is aangesloten op de I2C bus kun je controleren of deze ook daadwerkelijk wordt gedetecteerd. Dit kun je doen met de I2C tools, heb je deze niet geïnstalleerd dan kun je dit doen met behulp van:

sudo apt-get install i2c-tools

Controleer hierna of de module zichtbaar is:

sudo i2cdetect -y 1

OLED display

De OLED module heeft als ID #03C. Mocht de module niet zichtbaar zijn controleer dan of de kabels goed zijn aangesloten.

Wordt er een andere waarde dan #03C weergeven, wijzig dan in het script de parameter I2C_ADDR in de waarde die verschijnt in de i2cdetect tool.

 

Benodigde Python libraries installeren

Om te kunnen communiceren met de OLED module maken we gebruik van een speciale SSD1306 library geschreven door Adafruit.

Python GPIO library:

sudo apt-get install build-essential python-dev python-pip
sudo pip install RPi.GPIO

Python Imaging library:

sudo apt-get install python-imaging python-smbus

Adafruit SSD1306 Python library:

sudo apt-get install git
git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git

cd Adafruit_Python_SSD1306; sudo python setup.py install

OLED display 128x32 i2c RPI

Werking testen

Nadat alles is aangesloten, geconfigureerd en geïnstalleerd kunnen we gaan testen of de OLED module werkt. Dit doen met het onderstaande test script.

import Adafruit_GPIO.SPI as SPI
import Adafruit_SSD1306
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
disp = Adafruit_SSD1306.SSD1306_128_32(rst=24)
disp.begin()
disp.clear()
disp.display()
image = Image.new('1', (disp.width, disp.height))
draw = ImageDraw.Draw(image)
draw.rectangle((0,0,disp.width-1,disp.height-1), outline=1, fill=0)
font = ImageFont.load_default()
draw.text((16, 8),'RASPBERRYTIPS.NL', font=font, fill=255)
disp.image(image)
disp.display()

Je kunt dit script downloaden met behulp van:

wget https://raspberrytips.nl/oledi2c128x32.py

Voer hierna het script uit:

python oled128x64test.py

Op scherm verschijnt nu een rechthoek met daarin de url van deze website, mocht dit niet verschijnen controleer dan de bekabeling, installatie van de benodigde libraries en of de I2C interface is geactiveerd.

Systeem informatie weergeven

Systeem informatie weergeven kan een toepassing zijn van het OLED scherm. Hiervoor hebben we het onderstaande script gemaakt, dit script toont op het scherm de CPU belasting en de temperatuur van de CPU. Omdat het standaard lettertype van de Python Imaging library niet super duidelijk is maken we gebruik van een schaalbaar TTF font.

OLED 128x32 i2c RPI

import time
import sys
import subprocess
import Adafruit_GPIO.SPI as SPI
import Adafruit_SSD1306
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
from time import sleep
# commandline instructies om de gegevens op te vragen
GET_LOADAVG_CMD = "grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage }'"
GET_TEMP_CMD = "/opt/vc/bin/vcgencmd measure_temp"
def run_cmd(cmd):
return subprocess.check_output(cmd, shell=True).decode('utf-8')
def write_load():
load = float ( run_cmd(GET_LOADAVG_CMD)[:-1] )
cpu = "CPU {:.2f}% \n".format(load)
draw.text((8, 7), cpu, font=font, fill=255)
def write_temp_mem():
cputemp = "TEMP {} C".format( run_cmd(GET_TEMP_CMD)[5:9] )
draw.text((8, 19), cputemp, font=font, fill=255)
disp = Adafruit_SSD1306.SSD1306_128_32(rst=24)
disp.begin()
disp.clear()
disp.display()
# Lege afbeelding voorbereiden
width = disp.width
height = disp.height
image = Image.new('1', (width, height))
draw = ImageDraw.Draw(image)
# Apple 2 font moet in dezelfde map staan als het script
font = ImageFont.truetype('Apple2.ttf', 8)
# loop voor het weergeven van de informatie
while True:
draw.rectangle((0,0,width-1,height-1), outline=1, fill=0)
write_load()
write_temp_mem()
disp.image(image)
disp.display()
sleep(3)

Je kunt het script en het lettertype downloaden met behulp van:

wget https://raspberrytips.nl/files/Apple2.ttf
wget https://raspberrytips.nl/oledsystemdemo.py

Voer hierna het script uit:

python oledsystemdemo.py

Plaats een reactie