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é.

- Aucune encre ou toner requis (pour les imprimantes thermiques directes).
- Faible entretien en raison de moins de pièces mobiles.
- Fonctionnement silencieux et rapide.
- Interface électronique simple adaptée à l’intégration du microcontrôleur.
- Les impressions peuvent s’estomper avec de la chaleur, de la lumière ou du frottement (principalement thermique directe).
- Limité au monochrome dans la plupart des modèles.
- Le papier thermique spécial est requis.


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,









densityLevel = (densityPercent - 50) / 5 // Range: 0-31
breakTimeLevel = breakDelayUs / 250 // Range: 0-7
n = (breakTimeLevel << 5) | (densityLevel & 0x1F)
bytesPerLine = (width + 7) / 8
xL = bytesPerLine & 0xFF
xH = (bytesPerLine >> 8) & 0xFF
yL = height & 0xFF
yH = (height >> 8) & 0xFF
- 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)




#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();
}
}
}
- Traitement de commande série: Construire le caractère des commandes par caractère, exécute une fois terminé
- Bouton Debounting: Empêche plusieurs déclencheurs de rebond de bouton mécanique
- 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.


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

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
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.

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

-
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
