- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Adafruit Thermodrucker

  1. #1
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9

    Adafruit Thermodrucker

    Anzeige

    Praxistest und DIY Projekte
    Heyho Forum,

    ich habe gestern meinen Thermodrucker von Adafruit bekommen:

    http://www.adafruit.com/products/597#Downloads

    Und ich habe direkt mal ein kleines Modul für Python entworfen (bzw. ist als Modul geplant).
    Das Modul deckt schon den größten Teil der Funktionen ab.
    Hier ein kleines Beispiel für einen Barcode und einem invertierten und unterstrichenen Text:

    Bild hier  


    Den Code findet ihr hier:

    Code:
    import serial
    
    
    # Serielle Schnittstelle oeffnen
    UART = serial.Serial("/dev/ttyUSB0", 19200)
    UART.open()
    
    
    # Barcodetyp festlegen
    # Fuer genauere Infos in das Datenblatt des Druckers schauen!
    # EAN8
    # Dieser Barcodetyp erwartet 7-8 Bytes an Daten
    # Darstellbar sind Zahlen von 0-9 mittels 0x30 - 0x39
    Barcodetyp = 3
    
    
    # Liste fuer einen vordefinierten Barcode mit den Zahlen 0-7
    Daten = {48, 49, 50, 51, 52, 53, 54, 55}
    
    
    # ------------------------------------------------------------------------
    #                Drucker
    # ------------------------------------------------------------------------
    
    
    # Drucker initialisieren
    # Buffer leeren
    # Parameter auf Defaultwerte zuruecksetzen
    # In den Standardmodus wechseln
    # User-definierte Zeichen loeschen
    def Init():
    
    
        UART.write(chr(27))
        UART.write(chr(64))
        return
    
    
    # Testseite drucken
    def PrintTestpage():
    
    
        UART.write(chr(18))
        UART.write(chr(84))
    
    
        return
    
    
    # Standby auswaehlen
    # Auswahl
    # - Offline
    # - Online
    def Standby(Modus):
        
        if(Modus == "Offline"): 
            Value = 0
        elif(Modus == "Online"):
            Value = 1
        
        UART.write(chr(27))
        UART.write(chr(61))
        UART.write(chr(Value))
    
    
        return
    
    
    # Drucker in Sleepmodus setzen
    # WICHTIG: Der Drucker muss erst mittels "Wake()" geweckt werden, wenn er wieder benutzt werden soll
    # Auswahl
    # - Zeit von 0-255    
    def Sleep(Zeit):
    
    
        if(Zeit > 255):
            print "Der Wert fuer die Zeit ist zu hoch!"
            return -1
        
        UART.write(chr(27))
        UART.write(chr(56))
        UART.write(chr(Zeit))
        
        return
        
    # Drucker aufwecken
    def Wake():
    
    
        UART.write(chr(255))
        time.sleep(0.1)
        return
    
    
    # Pruefen ob der Drucker Papier hat (1 = kein Papier, 0 = Papier)
    # Bit 3 -> 0 = Papier, 1 = kein Papier
    def Paper():
    
    
        Status = 0
        
        UART.write(chr(27))
        UART.write(chr(118))
        UART.write(chr(0))
        
        # Zeichen einlesen
        Read = UART.read(UART.inWaiting())
        
        if(Read == chr(32)):
            Status = 0
        elif(Read == chr(36)):
            Status = 1
            
        return Status
        
    # ------------------------------------------------------------------------
    #                Character
    # ------------------------------------------------------------------------
        
    # Skipt eine bestimmte Anzahl Zeilen
    def Feed(Anzahl):
    
    
        if(Anzahl > 255):
            print "Anzahl der Zeilen zu hoch!"
            return -1
    
    
        UART.write(chr(27))
        UART.write(chr(100))
        
        for Counter in range(Anzahl):
            UART.write(chr(12))
    
    
        return
    
    
    # Druckt eine bestimmte Anzahl leerer Zeichen (max. 47)
    def Blank(Anzahl):
    
    
        if(Anzahl > 47):
            print "Anzahl der Leerstellen zu hoch!"
            return -1
    
    
        UART.write(chr(27))
        UART.write(chr(66))
        UART.write(chr(Anzahl))
        
        return
        
    # Drucken einer Zeile
    def Println(Text):
    
    
        UART.write(Text)
        UART.write(chr(10))
        UART.write(chr(13))
        
        return
    
    
    # Noch in Arbeit    
    # Druckt ein Tab (8 leere Zeichen)
    def Tab():
        
        UART.write(chr(9))
        return
        
    # Linienstaerke einstellen:
    # Auswahl
    # - None
    # - Middel    
    # - Big
    def Underline(Dicke):
    
    
        # Linienstaerke auswaehlen
        if(Dicke == "None"): 
            Value = 0
        elif(Dicke == "Middel"): 
            Value = 1
        elif(Dicke == "Big"):
            Value = 2
        else:
            return -1
        
        UART.write(chr(27))
        UART.write(chr(45))
        UART.write(chr(Value))
    
    
        return
        
    # Deaktiviert das Unterstreichen vom Text
    def DeleteUnderline():
    
    
        UART.write(chr(27))
        UART.write(chr(45))
        UART.write(chr(0))
        
        return
    
    
    # Textmodus setzen
    # Auswahl
    # - Inverse
    # - Updown
    # - Bold
    # - DoubleHeight
    # - DoubleWidth
    # - Deleteline    
    def PrintMode(Mode):
    
    
        # Modus auswaehlen
        if(Mode == "Inverse"): 
            Value = 2
        elif(Mode == "Updown"): 
            Value = 4
        elif(Mode == "Bold"): 
            Value = 8
        elif(Mode == "DoubleHeight"): 
            Value = 16
        elif(Mode == "DoubleWidth"): 
            Value = 32
        elif(Mode == "Deleteline"): 
            Value = 64
        else:
            Value = 0
    
    
        UART.write(chr(27))
        UART.write(chr(33))
        UART.write(chr(Value))
    
    
        return
    
    
    # Printmode zuruecksetzen
    def DeletePrintMode():
    
    
        UART.write(chr(27))
        UART.write(chr(33))
        UART.write(chr(0))
        
        return
    
    
    # Stellt den Abstand zwischen zwei Zeilen in Punkten ein
    def SetLineSpace(Punkte):
        
        if(Punkte > 32):
            print "Anzahl der Punkte zu hoch!"
            return -1
            
        UART.write(chr(27))
        UART.write(chr(51))
        UART.write(chr(Punkte))
        
        return
    
    
    # Setzt den Abstand zwischen zwei Zeilen auf den Default Wert (32 Punkte)
    def SetLineDefault():
    
    
        UART.write(chr(27))
        UART.write(chr(50))
    
    
        return
    
    
    # ------------------------------------------------------------------------
    #             Barcode
    # ------------------------------------------------------------------------
    
    
    # Noch in Arbeit    
    # Einstellen der lesbaren Zeichen fuer den Barcode
    # Auswahl
    # - Above -> Ueber dem Barcode
    # - Below -> Unter dem Barcode
    # - Both -> Ueber und unter dem Barcode
    def BarcodeReadable(Position):
    
    
        if(Position == "Above"):
            Value = 1
        elif(Position == "Below"):
            Value = 2
        elif(Position == "Both"):
            Value = 3
        else:
            Value = 0
            
        UART.write(chr(29))
        UART.write(chr(72))
        UART.write(chr(Value))
        
        return
        
    # Einstellen der Barcode Breite
    # Auswahl
    # - Small
    # - Big
    def BarcodeWidth(Breite):
        
        if(Breite == "Small"):
            Value = 2
        elif(Breite == "Big"):
            Value = 3
        else:
            print "Ungueltige Angabe"
            return -1
        
        UART.write(chr(29))
        UART.write(chr(119))
        UART.write(chr(Value))
        
        return
        
    # Hoehe des Barcodes (0 - 255)
    def BarcodeHeight(Hoehe):
    
    
        if(Hoehe > 255):
            print "Die Hoehe ist zu hoch!"
            return -1
        
        UART.write(chr(29))
        UART.write(chr(104))
        UART.write(chr(Hoehe))
        
        return
        
    # Barcode drucken
    def PrintBarcode(Daten):
    
    
        UART.write(chr(29))
        UART.write(chr(107))
        UART.write(chr(Barcodetyp))
        
        for Counter in Daten:
            UART.write(chr(Counter))
    
    
        UART.write(chr(00))
        return
    
    
    
    
    
    
    # Dieses Beispiel druckt ein "Hallo Welt" in invertierter Form und einen Namen der unterstrichen ist.
    # Der Abstand der Zeilen wird auf 4 Punkte gesetzt und es werden 4 Zeilen geskipt.
    # Es wird ein Barcode gedruckt, welcher aus den Zahlen 0-7 besteht.
    
    
    print ""
    print "+-------------------------------------------------+"
    print "|                    Druckertest                  |"
    print "+-------------------------------------------------+"
    print ""
    
    
    Init()
    Status = Paper()
    
    
    print "Der Status des Papiersensors ist: " + str(Status)
    
    
    PrintMode("Inverse")
    Println("Hallo Welt")
    DeletePrintMode()
    Underline("Big")
    Println("Von Daniel Kampert")
    DeleteUnderline()
    SetLineSpace(4)
    
    
    BarcodeWidth("Big")
    BarcodeReadable("Above")
    PrintBarcode(Daten)
    Feed(4)
    Fehler und Anregungen sind willkommen

    Eine Anleitung dazu gibt es die Tage noch auf meiner HP.
    Geändert von Kampi (29.04.2013 um 09:38 Uhr)
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  2. #2
    Moderator Begeisterter Techniker Avatar von tucow
    Registriert seit
    16.01.2006
    Ort
    Düsseldorf
    Alter
    39
    Beiträge
    269
    Hey,

    das ist ne Nette Sache, Kampi.
    Aber wozu braucht man einen Thermodrucker, ersetzt Du nun an Deinem TankPi das LCD gegen den Drucker? *G*
    Gruß
    Andreas




    Mein: Humanoide // nanoCopter Projekt
    Das Raspberry Pi als: Wifi Access Point // Wifi Router

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Haha ne
    Wobei die Idee an für sich nicht schlecht ist.....durch die UART-Schnittstelle kann man den eigtl problemlos mit einem Bluetoothmodul / XBee verbinden

    Aber ich hab mal gedacht, dass ich mein Pi mit einem Drucker ausstatten könnte.
    Hab jetzt auch z.B. ein Skript von Adafruit gefunden womit die Wetterdaten von Yahoo ausdrucken.....ich hab mir das mal als Idee aufgegriffen und ein eigenes Programm dazu geschrieben (u.a. habe ich mich dadurch erst richtig mit XML Files beschäftigt
    )

    Edit: WTF was sind das für Formatierungsprobleme?!
    Geändert von Kampi (28.04.2013 um 22:42 Uhr)
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    So ich habe das Druckerprogramm mal mit meinem Wetterprogramm verknüpft

    Bild hier  
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #5
    Moderator Begeisterter Techniker Avatar von tucow
    Registriert seit
    16.01.2006
    Ort
    Düsseldorf
    Alter
    39
    Beiträge
    269
    Ich finds ja schon ziemlich gut, was Du mit dem Drucker bisher gemacht hast.. aber hast Du mal ein Video davon? Mich würde mal die Geräuschkulisse und die Geschwindigkeit von dem Ding interessieren.
    Gruß
    Andreas




    Mein: Humanoide // nanoCopter Projekt
    Das Raspberry Pi als: Wifi Access Point // Wifi Router

  6. #6
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Ich kann dir morgen mal eins machen
    Jetzt ist es leider zu dunkel dafür
    Geändert von Kampi (28.04.2013 um 23:40 Uhr)
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Passend zu der Druckerausgabe gibt es hier eine Anleitung für die Wetterdaten (aber ohne Drucker):

    http://kampis-elektroecke.de/?page_id=3894

    Das Druckerprogramm wird dann einfach im selben Ordner gespeichert und mittels

    import Drucker as Drucker

    eingefügt.
    Anschließend muss nur noch jedes "print" durch "Println()" ersetzt werden, z.B. so:

    print "Hallo" <- Original Konsolenausgabe
    Println("Hallo") <- Drucker Ausgabe

    PS:
    Den fertigen Code poste ich heute Abend nach der FH.
    Muss auch mal bei Zeiten an der Bitmap Ausgabe arbeiten....dann kann man (passend zum Wetter) noch ne Wolke oder sowas rein machen ^.^
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  8. #8
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    So hier ist einmal der komplette Code für den Wetterbericht :

    Code:
    from xml.dom.minidom import *
    import urllib
    import Drucker as Drucker
    
    
    # Drucker initialisieren
    Drucker.Init()
    
    
    # Linespace auf 1 Punkt setzen
    Drucker.SetLineSpace(8)
    
    
    # Liste fuer den Wetterbericht
    # 1. Dimension = heute, 2. Dimension = naechster Tag
    # 1. Element = Tag, 2. Element = Datum, 3. = Niedrigste Temperatur, 4. Element = Hoechste Temperatur, 5. Element = Wettersituation
    Wetter = [["", "", "", "", ""] , ["", "", "", "", ""]]
    
    
    # URL oeffnen und XML Daten einlesen
    Baum = urllib.urlopen('http://weather.yahooapis.com/forecastrss?w=675964').read()
    
    
    # XML Daten parsen und in Baumstruktur anordnen
    Baum = parseString(Baum)
    
    
    # Ort einlesen
    Ort = Baum.getElementsByTagName('yweather:location')[0]
    Stadt = Ort.attributes["city"].value
    Land = Ort.attributes["country"].value
    
    
    # Datum einlesen
    Datum = Baum.getElementsByTagName('lastBuildDate')[0].firstChild.data 
    
    
    # Koordinaten auslesen
    Geo_Lat = Baum.getElementsByTagName('geo:lat')[0].firstChild.data
    Geo_Long = Baum.getElementsByTagName('geo:long')[0].firstChild.data
    	
    # Wetterdaten von heute einlesen
    Today = Baum.getElementsByTagName('yweather:condition')[0]
    
    
    # Wettertext einlesen
    Wetterlage = Today.attributes["text"].value
    
    
    # Temperatur in Fahrenheit einlesen, umrechnen und runden
    Temperatur = float(Today.attributes["temp"].value)
    Temperatur = round((Temperatur - 32.0) * (5.0 / 9.0) , 2)
    
    
    # Daten in einer Liste speichern
    for Counter in range(2):
    
    
    	# Wetterdaten fuer die beiden Tage einlesen
    	# Daten einlesen
    	Future = Baum.getElementsByTagName('yweather:forecast')[Counter]
    	
    	# Daten verarbeiten
    	Wetter[Counter][0] = Future.attributes["day"].value
    	Wetter[Counter][1] = Future.attributes["date"].value	
    	Wetter[Counter][2] = float(Future.attributes["low"].value)	
    	Wetter[Counter][3] = float(Future.attributes["high"].value)
    	Wetter[Counter][4] = Future.attributes["text"].value
    	
    	# Umrechnen der Temperatur in Grad Celsius
    	Wetter[Counter][2] = round((Wetter[Counter][2] - 32.0) * (5.0 / 9.0) , 2)
    	Wetter[Counter][3] = round((Wetter[Counter][3] - 32.0) * (5.0 / 9.0) , 2)
    
    
    # Ausgabe	
    Drucker.Println("Wetterbericht fuer " + Stadt + " in ")
    Drucker.Println(Land)
    Drucker.Println("Letztes Update: ")
    Drucker.Println(Datum)
    Drucker.Println(" ")
    
    
    Drucker.Println("Koordinaten")
    Drucker.Println("Laengengrad: " + Geo_Lat)
    Drucker.Println("Hoehengrad: " + Geo_Long)
    Drucker.Println(" ")
    
    
    Drucker.Println("Wetter heute")
    Drucker.Println("Temperatur: " + str(Temperatur) + " C Celsius")
    Drucker.Println("Max. Temperatur: " + str(Wetter[0][2]) + " C Celsius")
    Drucker.Println("Min. Temperatur: " + str(Wetter[0][3]) + " C Celsius")
    Drucker.Println("Wettersituation: " + Wetterlage)
    Drucker.Println(" ")
    
    
    Drucker.Println("Wetter am naechsten Tag")
    Drucker.Println("Tag: " + Wetter[1][0])
    Drucker.Println("Datum: " + Wetter[1][1])
    Drucker.Println("Max. Temperatur: " + str(Wetter[1][2]) + " C Celsius")
    Drucker.Println("Min. Temperatur: " + str(Wetter[1][3]) + " C Celsius")
    Drucker.Println("Wetter: " + Wetter[1][4])
    Drucker.Println(" ")
    	
    # Quelle angeben
    Quelle = Baum.getElementsByTagName('link')[1].firstChild.data
    Drucker.Println("Alle Daten stammen von ")
    Drucker.Println(Quelle)
    
    
    # Leerzeilen drucken
    Drucker.Feed(4)
    Und @ Tucow:
    Hier ein Video (leider nicht so tolle Quali, da die Kamera im Videomodus nicht so lichtempfindlich ist):
    https://www.dropbox.com/s/hmfsjrak28wi8ql/DSCF0874.MOV
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  9. #9
    Moderator Begeisterter Techniker Avatar von tucow
    Registriert seit
    16.01.2006
    Ort
    Düsseldorf
    Alter
    39
    Beiträge
    269
    Hab gerade erst gesehen Das Du geantwortet hast, sry
    Hmm sehen kann man ja leider nicht viel, aber laut schent er mir nicht gerade zu sein. Interesse habe ich schon an so einem Ding aber irgendwie fehlt mir das Einsatzgebiet
    Gruß
    Andreas




    Mein: Humanoide // nanoCopter Projekt
    Das Raspberry Pi als: Wifi Access Point // Wifi Router

  10. #10
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Also wir wollen den Drucker wahrscheinlich in das Labormesssystem, welches wir gerade entwickeln, integrieren
    Müssen aber noch schauen wie...
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Thermodrucker
    Von Kampi im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 15
    Letzter Beitrag: 20.04.2013, 17:07
  2. Adafruit 16 Channel PWM Servo Driver für 12V RGB Steuerung
    Von DaReK im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 0
    Letzter Beitrag: 21.03.2013, 12:10
  3. Verkaufe Thermodrucker / Bondrucker / RS232 oder Parallel BIXOLON STP-103 NEU!!
    Von hannes77 im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 0
    Letzter Beitrag: 18.10.2012, 21:29
  4. Thermodrucker EPL1604T2
    Von Janigut im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 22.06.2011, 22:54

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress