User Tools

Site Tools


Translations of this page:

en:bpi-r3:display

Display

writing down some notes for getting ssd1306 oled display to work on r3

to avoid using adafruit libs i try luma-oled which is available on pypi

https://luma-oled.readthedocs.io/en/latest/python-usage.html

apt install python3 python3-venv

add user and create python3 venv and activate it

frank@bpi-r3:~$ python3 -m venv .venv_display
frank@bpi-r3:~$ . .venv_display/bin/activate
(.venv_display) frank@bpi-r3:~$

install luma-oled package

pip3 install luma-oled

spidev needs compiler for target

  aarch64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -ffile-prefix-map=/build/python
3.9-PN012d/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -fPIC -I/home/frank/.venv_dis
play/include -I/usr/include/python3.9 -c spidev_module.c -o build/temp.linux-aarch64-cpython-39/spidev_module.o
  error: command 'aarch64-linux-gnu-gcc' failed: No such file or directory
  ----------------------------------------
  ERROR: Failed building wheel for spidev
Failed to build spidev
ERROR: Could not build wheels for spidev which use PEP 517 and cannot be installed directly
apt install gcc python3-dev

at least gcc installs many depencies which should be removed from router when all is done:

The following NEW packages will be installed:
  binutils binutils-aarch64-linux-gnu binutils-common cpp cpp-10
  fontconfig-config fonts-dejavu-core gcc gcc-10 libasan6 libatomic1
  libbinutils libbrotli1 libc-dev-bin libc-devtools libc6-dev libcc1-0
  libcrypt-dev libctf-nobfd0 libctf0 libdeflate0 libfontconfig1 libfreetype6
  libgcc-10-dev libgd3 libgomp1 libisl23 libitm1 libjbig0 libjpeg62-turbo
  liblsan0 libmpc3 libmpfr6 libnsl-dev libpng16-16 libtiff5 libtirpc-dev
  libtsan0 libubsan1 libwebp6 libxpm4 linux-libc-dev manpages manpages-dev

alternative way: building wheels in chroot

apt install python3 python3-pip python3.11-venv
python3 -m venv venv
. venv/bin/activate
pip3 install luma-oled #install into venv

#next commands for creating wheel files (in a arm64 chroot) to avoid install compile-tools on router
pip install wheel #needed for RPi.GPIO
pip wheel --wheel-dir tmp luma-oled

cd tmp
tar -czf ../luma-oled.tar.gz *.whl

luma-oled.tar.gz

connect it (3v3,gnd,sda,scl)

root@bpi-r3:~# apt install i2c-tools
root@bpi-r3:~# i2cdetect -y -r 2
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@bpi-r3:~# ls -l /dev/i2c-2
crw-rw---- 1 root i2c 89, 2 Dec 31 08:51 /dev/i2c-2
root@bpi-r3:~# adduser frank i2c
root@bpi-r3:~# su -l frank
frank@bpi-r3:~$ . .venv_display/bin/activate
(.venv_display) frank@bpi-r3:~$ python3
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from luma.core.interface.serial import i2c
>>> from luma.core.render import canvas
>>> from luma.oled.device import ssd1306
>>> serial = i2c(port=2, address=0x3C)
>>> device = ssd1306(serial)
>>> with canvas(device) as draw:
...     draw.rectangle(device.bounding_box, outline="white", fill="black")
...     draw.text((30, 40), "Hello World", fill="white")
...
>>>

tried to get my rpi 3.5“ display working too, but gpio-lib is only for rpi

Installing collected packages: luma-lcd
Successfully installed luma-lcd
(.venv_display) frank@bpi-r3:~$ python3 display.py
Traceback (most recent call last):
  File "/home/frank/.venv_display/lib/python3.9/site-packages/luma/core/lib.py", line 23, in __rpi_gpio__
    import RPi.GPIO as GPIO
  File "/home/frank/.venv_display/lib/python3.9/site-packages/RPi/GPIO/__init__.py", line 23, in <module>
    from RPi._GPIO import *
RuntimeError: This module can only be run on a Raspberry Pi!

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/frank/display.py", line 6, in <module>
    serial = spi(port=1, device=0, gpio_DC=23, gpio_RST=24)
  File "/home/frank/.venv_display/lib/python3.9/site-packages/luma/core/interface/serial.py", line 305, in __init__
    bitbang.__init__(self, gpio, transfer_size, reset_hold_time, reset_release_time, DC=gpio_DC, RST=gpio_RST)
  File "/home/frank/.venv_display/lib/python3.9/site-packages/luma/core/interface/serial.py", line 188, in __init__
    self._gpio = gpio or self.__rpi_gpio__()
  File "/home/frank/.venv_display/lib/python3.9/site-packages/luma/core/lib.py", line 29, in __rpi_gpio__
    raise luma.core.error.UnsupportedPlatform(
luma.core.error.UnsupportedPlatform: GPIO access not available
en/bpi-r3/display.txt · Last modified: 2023/10/07 18:55 by frank