Sous-estimable des imprimantes thermiques et comment l’utiliser avec ESP32

Sous-estimable des imprimantes thermiques et comment l'utiliser avec ESP32

La technologie de l’imprimante thermique a révolutionné l’impression de réception dans le commerce de détail, les soins de santé et Projets IoT. Ce tutoriel complet de l’imprimante thermique ESP32 couvre comment interfacer les imprimantes thermiques populaires, telles que la PNP-500 avec ESP32 et microcontrôleurs Arduino. Que vous construisiez une imprimante de réception ESP32, une imprimante de code-barres ou un système d’impression de code QR, ce guide fournit des diagrammes de circuits complets, du code Arduino et des instructions étape par étape pour vos projets de microcontrôleur.

Les imprimantes thermiques sont largement utilisées dans les systèmes de points de vente, les équipements médicaux et les applications intégrées car elles ne nécessitent pas d’encre, fonctionnent en silence et offrent des vitesses d’impression rapide. En interfaçant un imprimante thermique avec ESP32vous pouvez créer de puissantes solutions d’impression IoT pour les domaines de la domotique intelligente, de la surveillance industrielle ou des systèmes d’impression de réception personnalisés. Auparavant, nous avons également couvert comment utiliser une imprimante thermique avec Arduino Uno et comment utiliser une imprimante thermique avec Raspberry Pi. Vous pouvez les vérifier si vous êtes intéressé.

ESP32 Gros plan de l'imprimante thermique

Taper Médias utilisés Caractéristiques clés / cas d’utilisation Applications typiques
Thermique direct Papier à chaleur Aucune encre / toner, simple, à faible entretien, silencieuse, les impressions peuvent s’estomper avec le temps Reçus, étiquettes d’expédition, étiquettes à barres, billets
Transfert thermique Papier ordinaire + ruban d’encre Des impressions plus durables, utilise le ruban d’encre, peut imprimer en couleur, des impressions plus durables Étiquettes de produits, étiquettes d’identification, suivi des actifs, bracelets, étiquettes d’archives
  1. Aucune encre ou toner requis (pour les imprimantes thermiques directes).
  2. Faible entretien en raison de moins de pièces mobiles.
  3. Fonctionnement silencieux et rapide.
  4. Interface électronique simple adaptée à l’intégration du microcontrôleur.
  1. Les impressions peuvent s’estomper avec de la chaleur, de la lumière ou du frottement (principalement thermique directe).
  2. Limité au monochrome dans la plupart des modèles.
  3. Le papier thermique spécial est requis.

Top et vue latérale de l'imprimante thermique

Dimensions Imprimante thermique

ESP32 Thermal Imprimante démonté

Actuellement, discutons plus sur les parties de l’imprimante.
Cette imprimante thermique PNP-500 a un total de 6 pièces les plus importantes à comprendre. Ils sont,

Imprimante thermique avec vue de dessus PCB du contrôleur Pinout ESP32 LED et clé Close-Up du PCB de l'imprimante thermique

Page d'impression d'essai dans Imprimante thermique ESP32

Vue de bas de PCB du contrôleur d'imprimante thermique ESP32

Imprimer la tête de l'imprimante thermique ESP32Suspension à ressort du côté arrièreMoteur pas à pas et les engrenages de l'imprimante thermique à l'aide d'ESP32Rouleau et le chemin d'alimentation en papier de l'imprimante thermique à l'aide d'ESP32Capteur de présence en papier

Comment demarrer Raspberry Pi de USB sans carte SD

Fonction Commande Ascii Code hexadécimal Paramètres Valeurs de paramètres Exemple
Imprimer et nourrir les lignes N ESC DN ESC D 0x1b 0x64 n n = lignes n = 0-255 lignes 0x1b 0x64 0x03 (alimentation 3 lignes)
Sélectionnez la justification Esc an ESC A 0x1b 0x61 n n = alignement 0 = gauche, 1 = centre, 2 = à droite 0x1b 0x61 0x01 (centre)
Impression à l’envers ESC {n ÉCHAP { 0x1b 0x7b n n = mode 0 = normal, 1 = à l’envers 0x1b 0x7b 0x01 (Activer)
Mode de soulignement Esc – n ÉCHAP – 0x1b 0x2d n n = épaisseur 0 = off, 1 = 1-DOT, 2 = 2-DOT 0x1b 0x2d 0x02 (2-DOT)
Mode d’impression inverse Gs b n GS B 0x1d 0x42 n n = mode 0 = normal, 1 = inverse 0x1d 0x42 0x01 (blanc sur noir)
Définir l’espacement des lignes ESC 3 N ESC 3 0x1b 0x33 n n = points n = 0-255 points 0x1b 0x33 0x00 (0 points)
Fonction Commande Ascii Code hexadécimal Paramètres Calcul des paramètres Exemple
Densité d’impression et contrôle de la chaleur Dc2 # n Dc2 # 0x12 0x23 n n = combiné Bits 7-5: pause / 250 μs
Bits 4-0: (densité% -50) / 5
0x12 0x23 0x9f (haut)
0x12 0x23 0x58 (réinitialiser)
densityLevel = (densityPercent - 50) / 5  // Range: 0-31
breakTimeLevel = breakDelayUs / 250       // Range: 0-7
n = (breakTimeLevel << 5) | (densityLevel & 0x1F)
Fonction Commande Ascii Code hexadécimal Paramètres Détails des paramètres Format de données
Imprimer le bitmap raster Gs v 0 m xl xh yl yh Gs v 0 0x1d 0x76 0x30 m xl xh yl yh [data] M = mode, x = octets de largeur, y = points de hauteur M = 0 (densité normale)
xl, xh = bytesperline (Little-endian)
yl, yh = hauteur (petit-endian)
Bitmap 1 bits, 8 pixels / octet
Imprimer Bitmap ligne par ligne DC2 * RN Dc2 * 0x12 0x2a RN [data] R = lignes, n = octets r = 1 (ligne unique)
n = octets par ligne
Envoyer pour chaque ligne d’image
bytesPerLine = (width + 7) / 8
xL = bytesPerLine & 0xFF
xH = (bytesPerLine >> 8) & 0xFF
yL = height & 0xFF  
yH = (height >> 8) & 0xFF
Fonction Commande Ascii Code hexadécimal Paramètres Valeurs de paramètres Exemple
Régler la hauteur du code-barres GS HN Gs h 0x1d 0x68 n n = hauteur n = 1-255 points 0x1d 0x68 0x50 (80 points)
Définir la largeur du code-barres GS WN Gs w 0x1d 0x77 n n = largeur n = 2-6 (multiplicateur) 0x1d 0x77 0x02 (2 × largeur)
Position de texte HRI Gs h n Gs h 0x1d 0x48 n n = position 0 = aucun, 1 = ci-dessus, 2 = ci-dessous, 3 = les deux 0x1d 0x48 0x02 (ci-dessous)
Fonction Commande Ascii Code hexadécimal Paramètres Types de code-barres Exigences de données
Imprimer le code-barres GS KMN [data] GS K 0x1d 0x6b mn [data] m = type, n = longueur, données = contenu 0x41 = UPC-A
0x43 = EAN13
0x49 = code128
UPC-A: 11 chiffres
EAN13: 12 chiffres
Code128: variable
Étape Fonction Commande Ascii Code hexadécimal Paramètres Détails des paramètres
1 Définir le modèle QR Gs (k 4 0 1 a 2 0 Gs (k 4 nul 1 a 2 nul 0x1d 0x28 0x6b 0x04 0x00 0x31 0x41 0x32 0x00 Séquence fixe Modèle 2 (standard)
2 Définir la taille du module Gs (k 3 0 1 c n Gs (k 3 nul 1 c n 0x1d 0x28 0x6b 0x03 0x00 0x31 0x43 n n = taille du module n = 3-16 pixels
3 Définir la correction d’erreur Gs (k 3 0 1 e n Gs (k 3 nul 1 e n 0x1d 0x28 0x6b 0x03 0x00 0x31 0x45 n n = niveau d’erreur 48 = l (~ 7%), 49 = m (~ 15%)
50 = q (~ 25%), 51 = h (~ 30%)
4 Stocker les données QR GS (K PL PH 1 P 0 [data] GS (K PL PH 1 P 0 [data] 0x1d 0x28 0x6b PL Ph 0x31 0x50 0x30 [data] pl, pH = longueur de données + 3 PL, pH en petit-endian
5 Imprimer le code QR Gs (k 3 0 1 q 0 Gs (k 3 nul 1 q 0 0x1d 0x28 0x6b 0x03 0x00 0x31 0x51 0x30 Séquence fixe Exécuter QR stocké
  • ESP32 Development Board (n’importe quel modèle / marque) – 1
  • Imprimante thermique (PNP-500 / RS203) – 1
  • Résistances (1kΩ) – 2
  • Fils de connexion – selon les besoins
  • Planche à pain – 1
  • Batterie Li-ion 2S – 1 (pour alimenter l’imprimante)
  • Boutons poussants – 2 (facultatif)

Diagramme de circuit d'imprimante thermique ESP32Imprimante thermique ESP32 Diagramme de circuit avec une alimentation communeImprimante thermique complètement assemblée ESP32
Bitmap Binary Code pour imprimer une image

#include 
#include "data.h"
#include 
struct BitmapImage {
 const char* name;           // Human-readable name for the image
 const unsigned char* data;  // Pointer to image data in PROGMEM
 int width;                  // Image width in pixels
 int height;                 // Image height in pixels
};
const BitmapImage availableImages[] = {
 { "circuitDigestLogo", circuitDigestLogo, 360, 360 },
 { "tony", tony, 380, 528 },
 // ... more images
};
#define RXD2 16  
#define TXD2 17 
#define GND 5    
#define Vcc 21   
#define Key1 22  
#define Key2 23  
  • UART2 (broches 16,17): Communication série avec l’imprimante thermique
  • Contrôle de puissance (broches 5,21): Gestion de la ligne d’alimentation de la ligne de données et du bouton-poussoir.
  • Boutons (broches 22,23): Interface utilisateur physique pour les fonctions de démonstration
bool globalUpsideDown = true;          
unsigned long lastKey1Press = 0;     
unsigned long lastKey2Press = 0;    
int imageIndex = 0;               
const unsigned long debounceDelay = 200;

void setup () {

// Configurer les broches de contrôle de puissance pour l’imprimante

PinMode (GND, sortie);

PinMode (VCC, sortie);

DigitalWrite (GND, Low); // s’assurer que le sol est toujours bas

 digitalWrite(Vcc, HIGH);  // Ensure power is always high
 // Configure button input pins with internal pullup resistors
 pinMode(Key1, INPUT_PULLUP);
 pinMode(Key2, INPUT_PULLUP);
 // Initialize serial communications
 Serial.begin(115200);                               // Debug monitor at high speed
 printerSerial.begin(9600, SERIAL_8N1, RXD2, TXD2); // Printer at standard thermal printer baud rate
 delay(1000);  // Give printer time to initialize
 // Set initial printer alignment to center
 align(1);
 // Print memory status and set initial upside-down state
 printMemoryStats("setup done");
 setGlobalUpsideDown(true);  // Default: enable upside-down printing
}
  • Gestion de l’alimentation: Configure les broches dédiées pour contrôler l’alimentation de l’alimentation de la ligne de signal de l’imprimante et des boutons appuyés.
  • Configuration du bouton: Active les résistances de pullup interne pour les entrées de bouton (boutons lisez bas lorsque vous appuyez sur)
  • Communication série:
    • USB Serial à 115200 bauds pour le débogage / commandes
    • Série d’imprimante à 9600 bauds (standard pour les imprimantes thermiques)
  • Initialisation de l’imprimante: Attend 1 seconde pour le démarrage de l’imprimante, définit l’alignement central
  • État du système: Vérifie l’utilisation de la mémoire et permet l’impression à l’envers par défaut (juste facultatif).
void loop() {
 // Handle serial command input with static buffer for efficiency
 static String inputBuffer = "";
 inputBuffer.reserve(64);  // Pre-allocate string memory to reduce fragmentation
 
 // Process incoming serial data character by character
 while (Serial.available()) {
   char c = Serial.read();
   if (c == '\n' || c == '\r') {
     // End of command - process if buffer has content
     if (inputBuffer.length() > 0) {
       handleSerialCommand(inputBuffer);
       inputBuffer = "";  // Clear buffer for next command
     }
   } else {
     inputBuffer += c;
   }
 }
 // Button handling with debouncing
 // Key1: Print next image in sequence
 if (digitalRead(Key1) == LOW) {
   if (millis() - lastKey1Press > debounceDelay) {
     demoPrintNextImage();
     lastKey1Press = millis();
   }
 }
 // Key2: Print comprehensive demo page
 if (digitalRead(Key2) == LOW) {
   if (millis() - lastKey2Press > debounceDelay) {
     demoPrintAllFormats();
     lastKey2Press = millis();
   }
 }
}
  1. Traitement de commande série: Construire le caractère des commandes par caractère, exécute une fois terminé
  2. Bouton Debounting: Empêche plusieurs déclencheurs de rebond de bouton mécanique
  3. Fonctions de démonstration: Key1 passe à travers des images, Key2 imprime une démo complète
  • handleSerialCommand () – traite les commandes de texte à partir de l’ordinateur (comme « qrcode bonjour »)
  • setDarknessAndDelay () – ajuste la nuit de l’impression et la vitesse d’impression
  • printQrcode () – Crée des codes QR pour les sites Web, le texte et les contacts
  • printbarcode_code128 / upca / ean13 () – Imprime les codes à barres pour les produits et les stocks
  • printbitmapgs_method () – Imprime des images et des logos stockés en mémoire
  • Feedlines () – Fait avancer le papier par des lignes spécifiées
  • align () – Définit l’alignement du texte (gauche, centre, droite)
  • upsidedownpring () – Retourne toutes les impressions à l’envers
  • UnderlineMode () – Ajoute des soulignements au texte
  • inversemode () – Imprime du texte blanc sur fond noir
  • printMemoryStats () – Montre la quantité de mémoire utilisée
  • rotatebitmap1bpp_180 () – Tourne les images de 180 degrés pour le mode à l’envers
  • createTestPattern () – Fait des modèles de test pour vérifier la qualité de l’imprimante
  • DemoprintNextimage () – Bouton 1 Fonction – Imprime l’image suivante dans la liste
  • DemoprintAllFormats () – Fonction du bouton 2 – Imprime un exemple de tout ce que l’imprimante peut faire.

Configuration de démonstration de l'imprimante thermique ESP32ESP32 THERMAL IMPRIMINE IMPRESSION DE DÉMO

Projets sur l’interfaçage de l’imprimante thermique

  Imprimante thermique interfaçante avec Arduino Uno

Imprimante thermique interfaçante avec Arduino Uno

Dans ce tutoriel, apprenez à interfacer une imprimante thermique avec Arduino Uno, en utilisant un commutateur tactile pour une fonctionnalité push-to-print. Ce didacticiel étape par étape couvre le câblage et la configuration.

  Interfaçage de l'imprimante thermique avec PIC16F877A

Interfaçage de l’imprimante thermique avec PIC16F877A

Apprenez à interfacer une imprimante thermique CSN A1 avec le microcontrôleur PIC16F877A populaire. Ce projet relie l’imprimante au microcontrôleur PIC et utilise un commutateur tactile pour déclencher l’impression.

  Cart d'achat intelligent avec imprimante thermique PO

Retrouvez l’histoire de Raspberry Pi dans cette vidéo :

YouTube video

  • TATTMUSE A28U Imprimante Thermique A4, Imprimante Portable sans Encre pour Papier A4/A5/B5, Imprimantes Matricielles Compatible avec Les iOS et Android, Mini Printer pour Les Voyages
  • TATTMUSE Imprimante d'étiquettes d'expédition 4x6 pour Connectivité Bluetooth et USB, Imprimante Thermique Etiquette Compatible avec Vinted, Amazon, Cdiscount, Leboncoin, UPS, Ebay, Shopify, Colis