Table des matières

Imprimante thermique "à tickets" Citizen CT-S2000

Tentative d'utilisation d'une imprimante thermique à tickets de caisse (CT-S2000) récupérée par le carrefour numérique, par sa connexion série (RS232).
Cette imprimante permet d'imprimer facilement du texte, mais est aussi capable d'imprimer des codes barres ou des photos (en noir et blanc)

Présentation

L'imprimante possède deux interfaces de liaisons : une interface série RS232 et une interface USB.

Une fois connecté à l'imprimante par l'une ou l'autre des méthodes décrite ci-dessus il est possible d'envoyer du texte à l'imprimante pour qu'elle l'imprime. Attention, l'imprimante n'imprimera le texte envoyé que lorsque le buffer sera plein (1 ligne complète de texte) ou lors de l’envoi d'un caractère LineFeed (\n ou 0x0A).

Il est possible de modifier les réglages (police, taille, encodage des caractères, …) ainsi que d'imprimer des codes barres ou des images, ou encore de couper le papier, en utilisant une séries de commandes (une suite de caractères spéciaux). On trouve le détail de ces commandes la documentation de l'imprimante.

Nous avons d'abord fait nos premiers tests d'impression directement en ligne de commande, en bash. Python nous a permis d'aller un peu plus loin et notamment d'imprimer des images/photos. Et ensuite nous avons profité du fait que l'imprimante disposait d'une interface série pour l'interfacer non plus avec un PC mais avec un Arduino pour voir s'il serait possible d'utiliser ce type d'imprimante avec des projets hardware.

Informations utiles

Utilisation

En ligne de commande (bash)

Commandes de tests à utiliser dans une console linux (adaptez /dev/ttuUSB0 au périphérique à utiliser sur votre système) :

# un code barre codant '1337'
printf "\x1dH\x02\x1dk\x041337\x0\x0a\x0a\x0a\x0a\x0a" > /dev/ttyUSB0
 
#couper le papier (complètement)
printf "\x0a\x0a\x1bi">/dev/ttyUSB0
 
#couper le papier (en laissant un petit morceaux a détacher)
printf "\x0a\x0a\x1bm">/dev/ttyUSB0
 
#Les 3 polices internes de l'imprimante (puis avance et coupe)
printf "\x1b\x4d\x00AZERTYazerty\x0a\x1b\x4d\x01AZERTYazerty\x0a\x1b\x4d\x02AZERTYazerty\x0a\x0A\x0a\x0A\x1bi">/dev/ttyUSB0
 
#fait biper l'imprimante
printf "\x1b\x1e">/dev/ttyUSB0
 
#impression en 'gras' (double strike):
printf "\x1b\x47\x01DoubleStrike(gras)\x1b\x47\x00SimpleStrike(normal)\x0a\x0a\x0a\x0a\x0a\x1bi">/dev/ttyUSB0
 
#très grosse police 
printf "\x1d\x21\x33BONJOUR \x0aje suis une\x0aimprimante ! \x0a\x0a\x0a\x0a\x0a\x1bi" > /dev/ttyUSB0
 
#Négatif/positif
printf "\x1D\x42\x01 NEGATIF \x1D\x42\x00 POSITIF \x0a\x0a\x0a\x0a\x1bi">/dev/ttyUSB0
 
#largeur et hauteur multiplicateur. valeur 36 ds l'ex.(cf. doc page 30, a revoir)
printf "\x1b\x21\x36largeur&hauteur:37\x0a\x0a\x0a\x0a\x1bi">/dev/ttyUSB0
 
#smooth (pas très visible à priori)
printf "\x1D\x62\x01 SMOOTH \x1D\x62\x00 NON SMOOTH \x0a\x0a\x0a\x0a\x1bi">/dev/ttyUSB0

En python

Un dépot github contient un début de bibliothèque permettant d'imprimer facilement avec la CT-S2000, ainsi que des notebook ipython (jupyter) avec des exemples et les tests effectués.

La fonctionalité importante apportée dans cette bibliothèque est la possibilité d'imprimer des images à partir d'un fichier PBM1). Ce format, géré sans problèmes par The Gimp et ImageMagick, contient l'image encodée en binaire exactement sous la forme dont nous avons besoin. Le script de lecture des fichier pbm est très fortement inspiré d'un article parus dans GNU/Linux magazine n°147.

A partir d'un arduino

8-) A venir

La photo de l’ornithorynque a été imprimée via un arduino \o/

Ressources en vrac / divers

Photos

Videos