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
Okay, es gibt wohl einen Drucker den "KFI Printers USB Printer", der passen könnte. KFI stellt Thermodrucker für andere (OEM) her.

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
Die ersten zwei Zeilen dienen nur zum Sichergehen, dass euer Software-Installer APT aktuell ist. Habt ihr erst kürzlich was installiert, könnt ihr die auch weglassen. Das Installieren dauert eine Weile, dann ist CUPS auf dem Raspi.

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
CUPS wird über die Weboberfläche installiert. Da wir ja keine Browser auf dem Raspi selbst öffnen wollen (da müssten wir ja den Desktop starten und mit einem kleinen Bildschirm arbeiten), sondern auf unserem Arbeits-PC, müssen wir CUPS anweisen, Zugriffe von außen zuzulassen, das geht mit
sudo cupsctl --remote-admin
Da wir schon mal hier in der Kommandozeile sind, sagen wir CUPS doch auch gleich, dass lokale Drucker im Netzwerk geshared werden sollen (1. Zeile) und dass der Druck von jedem Drucker im Netzwerk erlaubt sein soll (2. Zeile):

sudo cupsctl --share-printers sudo cupsctl --remote-any
Bevor wir uns jetzt ins Admin-Web-Inteface begeben, fügen wir unsere Pi-User noch der der Benutzergruppe "lpadmin" hinzu. Machen wir das nicht, gibt es beim Hinzufügen von Druckern trotz richtigem User (pi) und Passwort eine "Verboten"- Meldung. Die Passwort merkt sich unter Umständen unser Browser im Cache und wir haben Probleme einen Drucker hinzuzufügen. Dann müssen wir erst den Cache zurücksetzen. Also gleich richtig machen:
sudo usermod -aG lpadmin pi
Danach ist ein Neustart der CUPS-Servers nötig:
sudo systemctl restart cups
Dann erst verbinden wir uns mit dem Admin-Web-Inteface von CUPS und zwar auf Port 631 auf der IP, die unser Raspi von unserem DHCP-Server bekommen hat. Das ist normalerweise https://raspberrypi:631, aber da das mit dem Namen nicht immer so schön klappt, benutze ich immer die IP, die ich fest gesetzt habe und bei der es keine Uneindeutigkeiten geben kann - denn was ist, wenn ich zwei oder drei Raspis im Netz habe? Bei mir ist das also https://192.168.0.14:631.

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
Unter z. B. https://192.168.0.14:631/printers/RaspiThermo kann man sich dann nochmal die Druckerdaten anzeigen lassen:
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 Beispiel
pi@raspberrypi:~ $ lp -d RaspiThermo minicom.log request id is RaspiThermo-5 (1 file(s))
druckt die Datei minicom.log, die nicht so groß ist und gerade in meinem Home-Verzeichnis liegt, aus. Funktioniert!


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
Die Lösung: Der User "pi" muss in die Gruppe "lp" aufgenommen werden:
pi@raspberrypi:~ $ sudo adduser pi lp Adding user `pi' to group `lp' ... Adding user pi to group lp Done.
Nach einem Relogin sollte es dann klappen mit
echo '123456789012345678901234567890' >/dev/usb/lp0
und Co. Hier sehen wir auch gleich, dass wir im Text-Modus 24 Zeichen in eine Zeile bekommen. Das sollte doch für die eine oder andere Anwendung ausreichen.

Drucken vom Desktop aus

Da CUPS einen Druckertreiber zur Verfügung stellt, sollte der in den Desktopprogrammen ganz normal ausgewählt werden können und dann darüber gedruckt. Allerdings muss man immer im Hinterkopf haben, dass maximal so etwa 5 Zentimeter Breite ausgegeben wird.

Video

Ich habe noch ein kleines Erklär- und Demonstrationsvideo gemacht, das ihr bei Youtube anschauen könnt: