当你的项目需要一个“实体”输出来展示数据时,你会想到什么?是屏幕,是蜂鸣器,还是LED灯?今天我们来介绍一个更有趣的——热敏打印机。

它无需墨水、无需碳带,只要有电和配套的热敏纸,就能安静、快速地将你的创意打印成实体小票。无论是实时打印传感器数据、待办事项清单,还是生成一个专属的二维码,将它与ESP32结合,都能迸发出无限的可能。


准备工作:
在开始之前,请准备好以下硬件:
- ESP32开发板:任何一款常见的ESP32开发板都可以。
- 热敏打印机:教程中使用的是PNP-500型号,其他类似串口通讯的打印机也适用。
- 独立电源:这是关键!打印机工作电流较大,需要一个至少5V 2A的独立电源。切记不要直接用ESP32的5V引脚供电,会导致ESP32不稳定或损坏。
- 杜邦线:用于连接ESP32和打印机。
- 面包板(可选):方便原型测试。
- USB数据线:用于为ESP32供电和烧录程序。
第一步:硬件连接


热敏打印机通常使用串口(Serial)进行通信,所以接线非常简单。请按照下面的方式连接:
- 打印机 VCC (电源正) → 连接到你准备的 5V 2A独立电源的正极。
- 打印机 GND (电源负) → 同时连接到 ESP32的GND 和 独立电源的负极。这是为了确保两者“共地”,是串口正常通信的基础。
- 打印机 RX (接收) → 连接到 ESP32 的 GPIO 17 (TX2)。
- 打印机 TX (发送) → 连接到 ESP32 的 GPIO 16 (RX2)。
接线示意图,请务必注意电源部分)
第二步:烧录代码
1、打开你的Arduino IDE,确保已经安装了ESP32的开发板支持包。
2、将ESP32通过USB线连接到电脑。
3、复制并粘贴以下代码到IDE中,然后上传到ESP32。
这段代码非常简洁,它初始化了ESP32的第二个串口(Serial2),并设置了通信引脚和波特率,然后发送了几行测试文字。
#include "Arduino.h"
#include "HardwareSerial.h"
// 使用ESP32的第二个硬件串口 (UART2)
// TX引脚为GPIO17, RX引脚为GPIO16
HardwareSerial mySerial(2);
void setup() {
// 启动USB串口,用于在电脑上查看调试信息
Serial.begin(115200);
// 启动与打印机通信的串口,波特率通常为19200
mySerial.begin(19200, SERIAL_8N1, 16, 17); // RX, TX
delay(2000); // 等待打印机准备就绪
// 打印测试信息
mySerial.println("=== Thermal Printer Test ===");
mySerial.println("Hello from the ESP32!");
mySerial.println("This is a thermal printer demo.");
mySerial.println(" "); // 打印一个空行
mySerial.println(" ");
}
void loop() {
// 主循环里暂时不需要做任何事
}
第三步:见证奇迹的时刻
一切就绪!现在,请按以下步骤操作:
1、为ESP32插上USB线供电。
2、为热敏打印机插上5V 2A的独立电源。
3、检查热敏纸的安装方向是否正确。
4、按下ESP32开发板上的复位(RST)按钮。
如果一切顺利,打印机会立刻“吐”出一张小票,上面打印着:
=== Thermal Printer Test ===
Hello from the ESP32!
This is a thermal printer demo.
进阶玩法:打印图片和自定义内容
只打印文字怎么够?我们还可以让它打印简单的黑白图片。

最简单的方法是使用一个在线工具 image2cpp
。
1、在浏览器中打开 javi.github.io/image2cpp
。
2、上传一张你想要转换的图片,建议尺寸小一些,比如200x200像素。
3、在设置中,背景色(background)选择“Transparent”,抖动(dithering)选择“Binary”。
4、调整亮度和阈值,直到右侧的预览图像看起来清晰。
5、在代码输出格式(Code output format)中,选择“Arduino code, single bitmap”。
6、点击“Generate code”按钮,工具会为你生成一个C语言的字节数组(byte array)。
将这个数组复制到你的Arduino代码中,然后使用 mySerial.write()
函数将数组内容逐字节发送给打印机,
代码类似:
for (int i = 0; i < sizeof(imageData); i++) {
mySerial.write(imageData[i]);
}
(注意:这边你可能需要将电源提高到 6-9V,以避免图像模糊)
你的专属Logo或表情包就打印出来啦!
总结
这个项目展示了如何将一个常见的外部设备与ESP32结合,创造出实用又有趣的应用。接线的关键在于独立供电和共地,而软件的核心则是利用ESP32强大的硬件串口功能。
你可以基于此进行扩展,比如:
- 连接一个温湿度传感器,做成一个定时环境报告打印机。
- 连接到网络,打印每天的天气预报或一句名言。
- 做一个专注番茄钟,每完成一个周期就打印一张鼓励的小纸条。
希望这篇文章能给你带来启发。如果你想了解更深入的细节,可以访问原作者文章:https://circuitdigest.com/microcontroller-projects/how-to-interface-thermal-printer-with-esp32
里面有更详细的操作说明。
动手试试吧,让你的创意“落地成纸”!