gleichzeitig war nicht so gemeint, ich dachte als erstes mit fb ein Startbild darstellen und dann das pythonscript starten. Aber das geht ja auch alles mit python.![]()
Posts by micha-uhl
-
-
Problem erkannt!
Nach einer Neuinstallation sind fb0, spidev0.0 und spidev0.1 vorhanden und das python script funktioniert
Wenn der Framebuffer fb1 aktiviert ist, verschwindet Spidev0.0
Habe die module fbtft-device und flexfb aus /etc/modules entfernt, damit funktioniert python!
Es können also nicht Framebuffer und SPIDev gleichzeitig betrieben werden? Oder gibt es da eine Möglichkeit.
Es wundert mich nur, weil beide Varianten in Beispieldateien nebeneinander stehen und auch in der Anleitung zusammen beschrieben sind.
Computer sind doof!
Danke für die Unterstützung
Micha
-
begreife ich nicht ganz, muß aber erstmal weg. Bis später
-
das war ja auch nur zum Test, das der Treiber erkannt wird und läuft. Habe aber hier etwas gefunden, das meine Vermutung bestätigt:
https://revolution.kunbus.de/forum/viewtopic.php?t=2191&p=8135
Ansonsten habe ich alles nach Anleitung installiert, probeweise dtoverlay=bcm2850 in die config.txt eingetragen und auch in der blacklist war das bcm2850 mal aaskommentiert, keine Wirkung. Mit modprobe spidev wird auch nichts angezeigt.
Ich werde mal nach einer älteren Debian version suchen und damit testen.
-
wenn ich im script das device auf 1 ändere, läuft das script ohne Fehler, mit entsprechenden Ausgaben im Terminal. Das Display wird schwarz und zeigt auch danach mit fbcp oder fbtft nichts mehr an. Das Problem gab es schon mal hier: MP3 Player mit Waveshare 1.3 Zoll 240x240 Pixel IPS Display Hilfe und Anregungen ab #12
-
nein nur spidev0.1
-
hier die Dateien ST7789.py und main.py , sowie die Fehlermeldung:
aus
http://www.waveshare.com/wiki/1.3inch_LCD_HAT
#ST7789.py
import spidev
import RPi.GPIO as GPIO
import time
import numpy as np
class ST7789(object):
"""class for ST7789 240*240 1.3inch OLED displays."""
def __init__(self,spi,rst = 27,dc = 25,bl = 24):
self.width = 240
self.height = 240
#Initialize DC RST pin
self._dc = dc
self._rst = rst
self._bl = bl
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(self._dc,GPIO.OUT)
GPIO.setup(self._rst,GPIO.OUT)
GPIO.setup(self._bl,GPIO.OUT)
GPIO.output(self._bl, GPIO.HIGH)
#Initialize SPI
self._spi = spi
self._spi.max_speed_hz = 40000000
""" Write register address and data """
def command(self, cmd):
GPIO.output(self._dc, GPIO.LOW)
self._spi.writebytes([cmd])
def data(self, val):
GPIO.output(self._dc, GPIO.HIGH)
self._spi.writebytes([val])
def Init(self):
"""Initialize dispaly"""
self.reset()
self.command(0x36)
self.data(0x70) #self.data(0x00)
self.command(0x3A)
self.data(0x05)
self.command(0xB2)
self.data(0x0C)
self.data(0x0C)
self.data(0x00)
self.data(0x33)
self.data(0x33)
self.command(0xB7)
self.data(0x35)
self.command(0xBB)
self.data(0x19)
self.command(0xC0)
self.data(0x2C)
self.command(0xC2)
self.data(0x01)
self.command(0xC3)
self.data(0x12)
self.command(0xC4)
self.data(0x20)
self.command(0xC6)
self.data(0x0F)
self.command(0xD0)
self.data(0xA4)
self.data(0xA1)
self.command(0xE0)
self.data(0xD0)
self.data(0x04)
self.data(0x0D)
self.data(0x11)
self.data(0x13)
self.data(0x2B)
self.data(0x3F)
self.data(0x54)
self.data(0x4C)
self.data(0x18)
self.data(0x0D)
self.data(0x0B)
self.data(0x1F)
self.data(0x23)
self.command(0xE1)
self.data(0xD0)
self.data(0x04)
self.data(0x0C)
self.data(0x11)
self.data(0x13)
self.data(0x2C)
self.data(0x3F)
self.data(0x44)
self.data(0x51)
self.data(0x2F)
self.data(0x1F)
self.data(0x1F)
self.data(0x20)
self.data(0x23)
self.command(0x21)
self.command(0x11)
self.command(0x29)
def reset(self):
"""Reset the display"""
GPIO.output(self._rst,GPIO.HIGH)
time.sleep(0.01)
GPIO.output(self._rst,GPIO.LOW)
time.sleep(0.01)
GPIO.output(self._rst,GPIO.HIGH)
time.sleep(0.01)
def SetWindows(self, Xstart, Ystart, Xend, Yend):
#set the X coordinates
self.command(0x2A)
self.data(0x00) #Set the horizontal starting point to the high octet
self.data(Xstart & 0xff) #Set the horizontal starting point to the low octet
self.data(0x00) #Set the horizontal end to the high octet
self.data((Xend - 1) & 0xff) #Set the horizontal end to the low octet
#set the Y coordinates
self.command(0x2B)
self.data(0x00)
self.data((Ystart & 0xff))
self.data(0x00)
self.data((Yend - 1) & 0xff )
self.command(0x2C)
def ShowImage(self,Image,Xstart,Ystart):
"""Set buffer to value of Python Imaging Library image."""
"""Write display buffer to physical display"""
imwidth, imheight = Image.size
if imwidth != self.width or imheight != self.height:
raise ValueError('Image must be same dimensions as display \
({0}x{1}).' .format(self.width, self.height))
img = np.asarray(Image)
pix = np.zeros((self.width,self.height,2), dtype = np.uint8)
pix[...,[0]] = np.add(np.bitwise_and(img[...,[0]],0xF8),np.right_shift(img[...,[1]],5))
pix[...,[1]] = np.add(np.bitwise_and(np.left_shift(img[...,[1]],3),0xE0),np.right_shift(img[...,[2]],3))
pix = pix.flatten().tolist()
self.SetWindows ( 0, 0, self.width, self.height)
GPIO.output(self._dc,GPIO.HIGH)
for i in range(0,len(pix),4096):
self._spi.writebytes(pix[i:i+4096])
def clear(self):
"""Clear contents of image buffer"""
_buffer = [0xff]*(self.width * self.height * 2)
self.SetWindows ( 0, 0, self.width, self.height)
GPIO.output(self._dc,GPIO.HIGH)
for i in range(0,len(_buffer),4096):
self._spi.writebytes(_buffer[i:i+4096])
============================================================================
#main.py
import spidev as SPI
import ST7789
import time
from PIL import Image,ImageDraw,ImageFont
# Raspberry Pi pin configuration:
RST = 27
DC = 25
BL = 24
bus = 0
device = 0
# 240x240 display with hardware SPI:
disp = ST7789.ST7789(SPI.SpiDev(bus, device),RST, DC, BL)
# Initialize library.
disp.Init()
# Clear display.
disp.clear()
# Create blank image for drawing.
image1 = Image.new("RGB", (disp.width, disp.height), "WHITE")
draw = ImageDraw.Draw(image1)
#font = ImageFont.truetype('/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf', 16)
print "***draw line"
draw.line([(60,60),(180,60)], fill = "BLUE",width = 5)
draw.line([(180,60),(180,180)], fill = "BLUE",width = 5)
draw.line([(180,180),(60,180)], fill = "BLUE",width = 5)
draw.line([(60,180),(60,60)], fill = "BLUE",width = 5)
print "***draw rectangle"
draw.rectangle([(70,70),(170,80)],fill = "RED")
print "***draw text"
draw.text((90, 70), 'WaveShare ', fill = "BLUE")
draw.text((90, 120), 'Electronic ', fill = "BLUE")
draw.text((90, 140), '1.3inch LCD ', fill = "BLUE")
disp.ShowImage(image1,0,0)
time.sleep(3)
image = Image.open('pic.jpg')
disp.ShowImage(image,0,0)
====================================================================================
Ausführung:
pi@RPiZeroS:~/TFT/python $ python main.py
Traceback (most recent call last):
File "main.py", line 15, in <module>
disp = ST7789.ST7789(SPI.SpiDev(bus, device),RST, DC, BL)
IOError: [Errno 2] No such file or directory
pi@RPiZeroS:~/TFT/python $
-
danke, das bewirkt aber auch nichts:
pi@RPiZeroS:~/TFT/python $ sudo python /home/pi/TFT/python/main.py
der Treiber wird schon erkannt, als noch Komponenten, wie SPIDev und numpy fehlten, hat er es auch bemerkt.
-
SPI ist aktiviert, sonst würde ja die Desktopspiegelung und Bildanzeige nicht gehen. Es sieht nach einem Problem mit dem ST7789 Treiber aus. Habe jetzt eine Installation mit 4.14 gemacht, geht auch nicht.
-
Hallo, ich versuche mich gerade an einem Waveshare 1.3 LCD HAT, 240x240 mit ST7789. Alles nach Anleitung installiert. Der Framebuffer mit Spiegelung des Desktops und die Darstellung eines Bildes funktionieren. Beim python script main.py bekomme ich die Fehlermeldung:
pi@RPiUSB:~/RaspberryPi/python $ sudo python main.py (Democode aus Waveshare-Wiki)
Traceback (most recent call last):
File "main.py", line 15, in <module>
disp = ST7789.ST7789(SPI.SpiDev(bus, device),RST, DC, BL)
IOError: [Errno 2] No such file or directory
Linux RPiUSB 4.19.118+ #1311 Mon Apr 27 14:16:15 BST 2020 armv6l GNU/Linux
ich vermute, daß es mit der Linuxversion zusammenhängt, nach apt upgrade oder rpi-update geht auch der Framebuffer nicht mehr.
Kennt noch jemand dieses Problem?
Gruß Micha
-
danke, alles so gemacht, aber wenn ich mit mpc next über den letzten Eintrag bin, geht nichts mehr, auch nich zurück mit mpc prev.
edit: eben noch mal gegoogelt. Mit mpc repeat on funktioniert alles!
-
Ein anderes Problem zum Thema:
Ich habe eine playlist.m3u mit Radiostreams und steuere über zwei Tasten mpc next und mpc prev. Wenn ich mit next über den letzten Sender schalte, geht es nicht mehr zurück. Kann man das irgendwie ändern. Auch wäre es gut, wenn es nach dem letzten wieder beim ersten Sender weitergehen würde. -
Hallo,
ich habe auf dem Raspi einige Radiostreams mit mpc add eingetragen. Kann diese auch mit mpdroid sehen. Komischerweise ist aber das in der mpd.conf eingetragene playlists Verzeichnis leer. Wo sind die Daten abgelegt? -
Mit minicom funktioniert es jetzt. Verbindung zu meinem Mini Router mit OpenWrt klappt. Ist also erledigt.
-
habe eben gefunden: agetty, ist auch schon im Raspian drin. Muß wohl die Schnittstelle noch irgendwie eingerichtet werden. Wandler brauche ich nicht. Auf dem Display (Watterott RPi-Display) ist der serielle Port seitlich herausgeführt. Sieht schon gut aus, die SSH-Verbindung über WLAN klappt einwandfrei.
In Deinem dritten Link ist ja alles ausführlich beschrieben, danke! -
Hallo,
ich suche eine Möglichkeit, den Raspi mit 2,8" LCD als serielles Terminal zu benutzen, um z.B. die Ausgaben eines anderen Raspis oder Arduinos anzuzeigen. Also etwas wie Putty, möglichst im Textmodus wegen des kleinen Displays. Habe schon vergeblich gesucht, finde aber immer nur SSH Server und keinen Client. Man müßte sich doch eigentlich nur mit der Kommandozeile auf das andere Gerät verbinden, aber wie?
Danke, wenn jemand einen Tip hat.
Michaedit: für SSH-Zugriff ist ja schon das Programm ssh (OpenSSH-Client) im Raspian enthalten. Vielleicht finde ich auch noch etwas für die serielle Verbindung.
-
Danke für die Anleitung, die Installation funktioniert auch und die Tastatur (vom Android Tablet) wird am Ende als verbunden angezeigt. Nur auf der Konsole passiert nichts, mit einer Kabeltastatur geht es.
Denke auch, daß eine kleine Funktastatur problemloser ist. -
Gute Idee, das Shutdown-script. Ich habe es bei meinem Webradio-Projekt in Verbindung mit dem Watterott RPi-Display eingesetzt. Auf diesem ist ein Taster an Pin 15 vorgesehen, das script entsprechend angepasst. Shutdown funktioniert. Neustart brauche ich eigentlich nicht, da nach dem Runterfahren das Netzteil ausgeschaltet wird und der Pi beim Einschalten wieder startet.
-
Hallo,
ich benutze den Rasperry als Webradio nach Bob Rathbone. In letzter Zeit ist das Teil immer öfter abgestürzt und ließ sich erst nach mehreren Versuchen wieder booten, wobei ich immer mal die Karte neu gesteckt hatte. Zuletzt ging fast garnichts mehr, nur rote Lampe!
Bin jetzt auf diesen Thread gestoßen und stellte fest, daß die Karte nicht nur gebogen war, sondern das Plastik über den Kontakten mehrfach eingerissen und der vordere Steg in der Mitte ein Stück ausgebrochen war. Kein Wunder also. Mit festhalten läuft das Teil wieder einwandfrei. Werde erstmal versuchen, im Gehäuse etwas zum Andrücken anzubringen und mich nach so einem Adapter umschauen.Manches ist so einfach und man kommt trotzdem nicht drauf!

Gruß, Micha
edit: nachdem ich ein Stückchen Plastik zwischen Gehäuse und Karte geschoben habe läuft das Teil wieder ohne zu mucken. Problem gelöst! Könnte sogar sein, daß diese low Profile Adapter zu dick sind. Der Rahmen des Kartenlesers liegt direkt auf meinem Gehäuse (gestecktes Acrylgehäuse) auf.