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

    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.

    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 $

    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

    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.

    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.
    Micha

    edit: 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.

    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! :danke_ATDE:

    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.