Wenn man ein LCD Display an den Raspberry Pi anschließen will hat man viele Möglichkeiten: HDMI, DSI, SPI, I2C. Bei SPI hat sich in der letzten Zeit aber einiges getan, so dass viele der im Netz zu findenden Anleitungen nicht mehr funktionieren.
Raspbian und NOOBS wie auch viele andere Distributionen haben auf Kernel >= 4.4 gewechselt und damit auch Device Tree eingeführt. Device Tree erlaubt die Konfiguration von Treibern und Einstellungen über sogenannte Overlays welche auf der SD Karte im Ordner Overlays abgelegt und über die config.txt eingebunden werden.
Setup
- Raspberry Pi 3
- Waveshare SpotPear 3,2″ TFT mit Touchscreen
- Buchsenleiste gewinkelt 2×13 [optional]
Installation
TFT
Rasbian bring für viele SPI Displays schon Treiber mit aber es gibt auch für Displays die dort nicht enthalten schon viele Quellen auf GitHub. So z.B. auch für die günstigen KeDai TFTs die man häufig bei Aliexrpess finden und auch für das SpotPear von Waveshare.
$ git clone https://github.com/swkim01/waveshare-dtoverlays.git $ sudo cp waveshare-dtoverlays/waveshare32b-overlay.dtb /boot/overlays/waveshare32b.dtbo
Und anschließend noch den folgenden Eintrag in /boot/config.txt anhängen:
dtoverlay=waveshare32b:rotate=270
Nach einem Neustart wird das Display nun initialisiert und steht unter /dev/fb1 zur Verfügung.
Touchscreen
Um den Touchscreen auch ohne XOrg für schlanke Touch-Interfaces verwenden zu können gibt es die tslib. Diese wird z.B. auch von pygame verwendet Eingaben entgegen zu nehmen. Die Ausführlich Beschreibung findet sich im Repository von notro.
Um einen eindeutigen Pfad (/dev/input/touchscreen) zum Touchcontroller zu haben muss folgende udev-Regel angelegt unter /etc/udev/rules.d/95-ads7846.rules werden:
SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{name}=="ADS7846*", SYMLINK+="input/touchscreen"
Natürlich braucht man noch die tslib und die zugehörigen Tools:
$ sudo apt-get install -y tslib libts-bin
Um die Umgebungspfade noch korrekt zu setzen muss folgendes ausgeführt werden:
# tslib environment variables cat <<EOF | sudo tee /etc/profile.d/tslib.sh export TSLIB_TSDEVICE=/dev/input/touchscreen export TSLIB_FBDEVICE=/dev/fb1 EOF cat <<EOF | sudo tee /etc/sudoers.d/tslib Defaults env_keep += "TSLIB_TSDEVICE TSLIB_FBDEVICE" EOF sudo chmod 0440 /etc/sudoers.d/tslib # SDL environment variables cat <<EOF | sudo tee /etc/profile.d/sdl.sh export SDL_VIDEODRIVER=fbcon export SDL_FBDEV=/dev/fb1 if [[ -e /dev/input/touchscreen ]]; then export SDL_MOUSEDRV=TSLIB export SDL_MOUSEDEV=/dev/input/touchscreen fi EOF cat <<EOF | sudo tee /etc/sudoers.d/sdl Defaults env_keep += "SDL_VIDEODRIVER SDL_FBDEV SDL_MOUSEDRV SDL_MOUSEDEV" EOF sudo chmod 0440 /etc/sudoers.d/tslib
Nach einem weitern Neustart kann man mittels:
sudo ts_calibrate
den Touchscreen kalibrieren.
Ein Test der Kalibrierung ist mittels:
sudo ts_test
möglich.
da haut bei mir was nicht hin. kann jemand helfen?