Dem Raspberry Pi einen mobilen Thermodrucker zur Seite stellen
In einem meiner letzten Artikel hatte ich ja beschrieben, wie man den 3.5 Zoll RPi Display TFT Touchscreen für Konsole (Lite) und Desktop für Raspberry Pi OS Version Bullseye einrichtet.Und schließlich habe ich auch den Touchscreen unter dem Desktop richtig zum Laufen gebracht, so dass dort der Mausersatz richtig funktioniert.
Für das heutige Projekt kann man beide Varianten gebrauchen - mit Desktop oder ohne, denn es geht heute um das Drucken direkt über den Raspberry Pi mithilfe eines kleinen, mobilen Thermodruckers.
Den Thermodrucker mit der Aufschrift "Alere Pima" habe ich sehr günstig als Bastelware von Pollin geschossen und war dann fast schon überrascht, dass das Gerät komplett mit Akkus kam und tadellos funktionierte.
Im Forum64 wurde allerdings auch berichtet, dass teilweise die Akkus und auch der Akkudeckel fehlten. Was aber kein großer Hinderungsgrund sein sollte, denn vier gewöhnliche Nickel-Metallhydrid-Akkus sollte man sicher noch haben oder günstig dazukaufen können und für den Akkudeckel kann man sich ja was aus dem 3D-Drucker zaubern, sofern man denn einen hat. Aber bei mir waren vier hochwertige Eneloop Akkus schon gleich mit dabei - Glück gehabt.
In dem Forum habe ich auch erfahren, dass intern ein GeBE GPT-4352 (genauer gesagt ein GPT-4352-LV-88-USB) verbaut ist. Und wenn man den Line Feed-Button beim Einschalten gedrückt hält, wird eine kurze Testseite gedruckt und der Drucker schmeißt Akkukapazität, Akkutemperatur und Firmware-Version raus:
Upow: 5.2V
Takku: 30°C
Fw: GE4119
Das bewies mir schon einmal, dass das Druckwerk funktioniert. Jetzt muss nur noch eine brauchbare Ansteuerung her.
Als erstes wollte ich den Drucker natürlich an meinem Windows 7 System testen, aber leider gibt es da keine brauchbaren Treiber für. Es gibt auf der GeBE-Seite, was wohl der ursprüngliche Hersteller sein wird zwar Windows-Treiber (GSO-DRV-WIN10-V285-01.exe), aber die funktionieren erst ab Windows 10. Selbst Tricksereien wie unter Windows 10 entpacken und das Installationsverzeichnis dann auf Windows 7 kopieren führten leider nicht zum Erfolg.
Aber halb so wild. Eigentlich ist der Drucker mit seiner Akkupufferung ja auch als mobiles Gerät ausgelegt. Außerdem habe ich an meine Windows 7 System ja auch schon einen Thermodrucker, der auch ein bisschen größere Rollen fasst. Was könnte es für eine bessere Anwendung geben für einen solchen kleinen, mobilen Drucker eine bessere Anwendung als an einem Raspberry Pi? Dank der Akkupufferung frisst der Drucker nicht zuviel Strom aus der USB-Buchse, denn stellenweise braucht das Aufheizen der Thermoelemente bis zu 3 Ampere.
In dem kompakten "Alere Pima Pack" steckt man den Drucker einfach in die USB-Buchse des Raspberry Pis und wenn die Powerbank oder das USB-Ladegerät 3 A liefert, gibt es auch keine Probleme mit Niederspannungen. Höhere Ströme liefern dann die Akkus. Ohne eingelegte Akkus funktioniert der Drucker übrigens nicht, sondern seine LED blinkt nur schnell rot.
Zudem ist der Thermodrucker wirklich sehr kompakt in den Ausmaßen und passt sehr gut zum kleinen Raspi. Theoretisch kann man mit dem Gespann also toll unterwegs fern einer Steckdose drucken.
Die Kompaktheit bringt allerdings auch den Nachteil mit sich, dass nur kleine Papierrollen im Pima Platz finden. Zum einen ist die Breite des Papiers auf 58 mm beschränkt und der Durchmesser der Rolle darf nur etwas über 30 mm betragen, dann ist Schluss und das Rollenfach zu klein. Die großen 50 mm Rollen, die ich in meinem größeren Thermodrucker verwende passen hier definitiv nicht rein. Aber es spricht ja nichts dagegen, ein bisschen davon ab- und neu aufzuwickeln, um damit eine kleine Rolle zu fabrizieren.
Die zugehörigen Papierrollen bekommt man eigentlich überall und sie werden als 56 mm, 57 mm oder auch 58 mm verkauft. Es gibt sie als Papier und als Endlos-Aufkleber. Sehr praktisch, um Dinge wie Kleinteilemagazine zu beschriften. Einfach alle Beschriftungen mit ein bisschen Abstand zeilenweise ausdrucken und dann später mit der Schere auf die richtige Höhe zuschneiden. Das geht schnell, gut und ist günstig. Kein schlechtes Gewissen mehr beim Gebrauch von Labeldruckern! Schluss mit den Wucherpreisen für die Kassetten dafür!
Wäre da nur die Sache mit dem Linux-System vom Raspi (Debian-Derivat) und den richtigen Druckertreibern. Das ist wie man es von Linux gewohnt ist, ein bisschen Frickelei. Aber dank dieser Anleitung sollte das ein Kinderspiel werden - denn ich habe mir für euch schon die Mühe gemacht, alle nötigen Informationen zusammenzutragen und werde diese jetzt hier aufbereitet präsentieren.
Der Thermodrucker am USB-Port
Zu allererst stecken wir den Thermodrucker in einen freien USB-Port. Dabei halten wir die "Play"-Taste (eigentlich Line Feed Taste) gedrückt. Dann sollte der Drucker schon etwas an Schrift aussprucken. Das zeigt uns, ob er auch funktioniert ("Bastelware", ihr erinnert euch?)Dann lassen wir uns mal alle USB-Geräte anzeigen:
pi@raspberrypi:~ $ lsusb
Bus 001 Device 004: ID 19db:0265 KFI Printers USB Printer
Bus 001 Device 005: ID 0513:0318 digital-X, Inc.
Bus 001 Device 006: ID 0424:7800 Microchip Technology, Inc. (formerly SMSC)
Bus 001 Device 003: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Für das Raspi-Linux gibt es auch einen CUPS-Treiber auf der GeBE Seite. Den findet man unter dem Eintrag "CUPS-DRV_V131.zip". Den sollte man herunterladen, auf seinen Raspi schieben und dort entpacken.
CUPS installieren und konfigurieren
CUPS steht für "Common Unix Printing System" und ist eine Druckerserver-Software für Unix und damit auch Linux. Ursprünglich wurde CUPS unter GPL vom Unternehmen Easy Software Products entwickelt. 2007 übernahm Apple die Rechte an CUPS, seit Version 2.3 (2007) steht CUPS unter Apache-Lizenz.Soviel zur Geschichte von CUPS. Interessanter ist aber, was CUPS leistet: Es ermöglicht uns das Einrichten von Druckern mit CUPS-Treiber und das Drucken von Dokumenten sowie das Ansprechen von Druckern über das Netzwerk.
Da wir einen CUPS-Druckertreiber haben, ist CUPS also "our way to go". Und der Weg beginnt damit, erst einmal die CUPS Software auf unserem Raspberry Pi zu installieren. Geht sicher, dass ihr WLAN-Zugriff auf eure Raspi über Samba habt. Habt ihr den noch nicht, dann könnt ihr hier nachlesen, wie man das einrichtet Außerdem braucht ihr SSH-Zugriff auf euren Pi. Eine Anleitung zu SSH gibt es hier.
Gebt dann in der Kommandozeile ein:
sudo apt update
sudo apt upgrade
apt-get install cups
apt-get install cups-client
Ich hatte den Treiber schon ins CUPS-Verzeichnis kopiert, das können wir wohl aber auch später im Konfigurationsdialog machen, aber so hatte ich das schonmal am richtigen Platz. Nehmen wir an, wir haben unsere Dateien in das Homeverzeichnis und da in das Verzeichnis thermo entpackt, dann kopieren wir wie folgt. Das müsst ihr aber eigentlich jetzt noch nicht machen, sondern erst, wenn es sich nicht richtig über den Konfigurationsdialog installieren lässtm denn normalerweise kopiert euch der Konfigurationsdialog den Treiber an die richtige Stelle.
pi@raspberrypi:~/thermo $ sudo cp a8_203_s_V131.ppd /etc/cups/ppd/a8_203_s_V131.ppd
sudo cupsctl --remote-admin
sudo cupsctl --share-printers
sudo cupsctl --remote-any
sudo usermod -aG lpadmin pi
sudo systemctl restart cups
CUPS Drucker hinzufüren
Dank der Erlaubnis von Remote-Admins sehen wir jetzt das Web-Interface. Hier wählen wir "Verwaltung / Drucker hinzufügen". Dann erfolgt die Eingabe des Users pi und des Passwortes dazu.Der Dialog wird dann in etwa wie folgt aussehen. Die von mir ausgewählten bzw. eingetragenen Werte habe ich Fett gemacht:
Drucker hinzufügen (Schritt 1/5)
Lokale Drucker:
CUPS-BRF (Virtual Braille BRF Printer)
Unknown
Serial Port #1
Gefundene Netzwerkdrucker:
Andere Netzwerkdrucker:
LPD/LPR-Host oder -Drucker
Backend Error Handler
AppSocket/HP JetDirect
Internet Printing Protocol (ipps)
Internet Printing Protocol (ipp)
Internet Printing Protocol (http)
Internet Printing Protocol (https)
[Weiter]
Drucker hinzufügen (Schritt 3/5)
Name: RaspiThermo
Beschreibung: Alere Pima Thermoprinter (GeBE GPT-4352)
Ort: Raspberry Pi 3B+
Verbindung: usb://Unknown/Printer
Freigabe: X Drucker im Netzwerk freigeben
[Weiter]
Drucker hinzufügen (Schritt 4/5)
Name: RaspiThermo
Beschreibung: Alere Pima Thermoprinter (GeBE GPT-4352)
Ort: Raspberry Pi 3B+
Verbindung: usb://Unknown/Printer
Freigabe: Drucker im Netzwerk freigeben
Hersteller: PPD-Datei bereitstellen:
(hier wählt ihr die PPD-Datei auf eurem Windows-System aus,
vorher habt ihr natürlich das CUPS...zip dorthin entpackt)
d:\thermoprinter\Alere_Pima\Linux\cups-drv_v131\V131\ppd\a8_203_s_V131.ppd
[Drucker hinzufügen]
Druckeroptionen festlegen
General
Media Size: 58mm
RaspiThermo
RaspiThermo (Leerlauf, Aufträge annehmen, Netzwerkfreigabe, Standarddrucker, Farbmanagement)
Beschreibung: Alere Pima Thermoprinter (GeBE GPT-4352)
Ort: Raspberry Pi 3B+
Treiber: GeBE A8 Printer with 203 dpi, 1.3.1 (schwarz-weiß, 2-seitiges Drucken)
Verbindung: usb://Unknown/Printer
Standardeinstellungen: job-sheets=none, none media=custom_58x500mm_58x500mm sides=one-sided
Auf dieser Seite wählen wir dann Verwaltung / Als Standarddrucker festlegen und Wartung / Testseite drucken.
Wenn jetzt das Papier nur so durchgespult wird (CUPS druckt eine ganze A4 Seite), dann war die Installation / Konfiguration erfolgreich.
Drucken auf dem Thermoprinter
Drucken von der Konsole aus
Schauen wir erstmal, ob unser Drucker bereit ist:
pi@raspberrypi:~ $ lpstat -a
RaspiThermo accepting requests since Tue 17 Oct 2023 12:30:35 PM CEST
und was er gerade so tut:
pi@raspberrypi:~ $ lpstat -p
printer RaspiThermo is idle. enabled since Tue 17 Oct 2023 12:33:03 PM CEST
Nichts. Naja, warten. Geben wir ihm doch mal etwas zu tun.Drucken von Dateien von der Konsole aus
Drucken können wir über den Befehl "lp -d", zum Beispielpi@raspberrypi:~ $ lp -d RaspiThermo minicom.log
request id is RaspiThermo-5 (1 file(s))
Es geht aber noch mehr als nur simpler Text. Es können auch zum Beispiel PDFs samt Grafiken ausgedruckt werden.
Die können wir z. B. in Windows erstellen, indem wir dort über einen virtuellen PDF-Printer wie PDF24 drucken und dann auf dem Raspberry Pi über Samba speichern als z. B. \\192.168.0.14\PiHome\test.pdf.
Die Seitenränder und Papiergröße müssen natürlich passen, aber dann lässt sich auch Grafik drucken. Ganz einfach mit
pi@raspberrypi:~ $ lp -d RaspiThermo test.pdf
request id is RaspiThermo-6 (1 file(s))
Das ist auch mein Workaround für diejenigen, die von ihrem Windows-7-System (ab Win 10 sollte der Windows-Treiber funktionieren) etwas auf dem Thermo-Drucker ausdrucken wollen.Drucken von Plain Text von der Konsole aus
Aber wahrscheinlich wollen wir es auf dem Raspi noch ein bisschen einfacher und einfach Text einfach so per echo ausgeben. Diese Ausgabeart können wir dann einfach in Batches, C-Programmen oder Python-Scripts verwenden.
Das sollte mit einem "kopieren" auf das Device /dev/usb/lp0 gehen:
pi@raspberrypi:~ $ echo 'hallo' >/dev/usb/lp0
-bash: /dev/usb/lp0: Permission denied
Schlägt aber fehl, wie man sieht. Auch ein Blick in die Rechte bringt uns bei diesem Problem nicht so recht weiter
pi@raspberrypi:~ $ ls -l /dev/usb/lp0
crw-rw---- 1 root lp 180, 0 Oct 17 12:36 /dev/usb/lp0
pi@raspberrypi:~ $ sudo adduser pi lp
Adding user `pi' to group `lp' ...
Adding user pi to group lp
Done.
echo '123456789012345678901234567890' >/dev/usb/lp0