嵌入式热敏打印机

简介

微型热敏打印机采用热敏技术,无需添加墨粉或上墨,性能稳定,身材小巧,节省空间。微型热敏打印机在仪器仪表、食品检测、购物终端等场景应用广泛。生活中的ATM机、存包柜、POS、超市电子称以及外卖小哥的外卖机里都有它。 打印机采用5~9V 宽电压供电方式,电压越高,打印效果越清晰。适用宽度为58MM的热敏纸卷,打印寿命 达50 公里。它支持arduino、树莓派以及Windows 串口与驱动打印。我们可以参照指令集,利用USB串口或TTL通讯接口向热敏打印机发送相应指令,打印机便能根据指令即时打印出你需要的文字、字符,条形码,二维码甚至是黑白图片; 我们可以将它和arduino控制器或树莓派利用串口连接。当配合各种传感器使用时便能DIY电子称、血压指数测量仪、土壤元素分析仪和行车记录仪等实用的仪器设备。我们也可以制作一个属于自己的小票打印机,小票上的内容任由你自己定义,经过开发甚至还可以实现远 程打印功能;

⚠注意事项:

技术规格

引脚说明

DFR0503引脚图

TTL通信接口

标号 名称 功能描述
1 GND 电源地
2 DTR 流控制
3 RXD 数据接收端
4 TXD 数据发送端
5 NC 空脚

电源接口

标号 名称 功能描述
1 VCC 5-9V
2 GND 电源地

使用教程

基于windows上使用

热敏打印机Windows软件包.rar

热敏打印机出厂默认为TTL通信接口模式,如需配置USB接口模式,需要进行以下步骤:

1.打印机通电且接上usb接口,打开烧录工具,如下图操作,勾选USB功能,选择USB虚拟串口,点击设置,设置成功,左下角提示写入成功。

2.重新插拔打印机USB接口,系统会自动安装一个驱动,需打开设备管理器先将原驱动卸载。

3.卸载完成后,不要将打印机usb拔出,先安装新驱动,安装完成后,重新插拔打印机usb刷新端口,此时COM端口正常显示。

3.如需更换回打印口,打开烧录工具,如下图操作,勾选USB功能,选择USB打印口,点击设置,设置成功,左下角提示写入成功。

4.上位机使用方法:打开上位机后,选择对应COM口后,打开串口,可选择对应功能使用。

5.上位机的指令可以直接使用。直接点击“条码指令一键测试”

6.测试发送打印图片,点击“光栅位图”→“选择图片”,打开既打印

7.打印文字,打印“上海”两个字,在软件里输入“上海”,会转换成hex格式,复制下来,清空发送,前面要输入1B 40 ,结尾要输入0D 0A 0D 0A,最后点击hex发送即可。

准备(基于树莓派平台-其他Linux操作系统适用)

1

添加打印机1

2

添加打印机2

3

添加打印机3

4

添加打印机4

5

添加打印机5

准备(Arduino)

打印字符(Arduino)

DFROBOT

DFROBOT
极趣科技
嵌入式热敏打印机
arduino开发控制
DIY趣味
让我们一起共创未来
打造我们的DIY世界

打印二维码和条形码(Arduino)

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX

/*--------打印条形码指令,其中包含信息为“DFR0503”---------*/
char bar_code[24] = {
  0x1b, 0x40,
  0x1d, 0x48, 0x02,                                                                         //通用指令第43条,选择打印条形码时其中包含的信息(即HRI字符)的打印位置,0x02意为在条形码下方打印
  0x1d, 0x68, 0x64,                                                                         //设置条形码高度,参考范围“1~255”,示例中设定为“0x64”
  0x1d, 0x77, 0x03,                                                                         //通用指令第45条,设置水平宽度,这里选择“0x03”项
  0x1d, 0x6b, 0x49, 0x09, 0x7B, 0x42, 0x44, 0x46, 0x52, 0x7B, 0x43, 0x05, 0x03              //设置条形码包含信息.“0x09”为条形码长度,对应“DFR0503”. “0x44,0x46,0x52”分别是“DFR”三个字母的ACILL码,“ 0x05, 0x03 ”对应“0503”
};                                                                                          //如果信息为“DFR050308” ,则条码长度为“0x0B”,以此类推

/*--------打印二维码指令,其中包含信息为“www.dfrobot.com”---------*/
const char QRx[60] = {
  0x1b, 0x40,
  0x1d, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x43, 0x05,                                             //参考特殊指令集第一条,“0x05”为二维码的大小等级,
  0x1d, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x45, 0x30,                                             //设置QR码的校验等级为L
  0x1d, 0x28, 0x6b, 0x12, 0x00, 0x31, 0x50, 0x30, 0x77, 0x77, 0x77, 0x2E, 0x64, 0x66, 0x72, 0x6F, 0x62, 0x6F, 0x74, 0x2E, 0x63, 0x6F, 0x6D,
  //“0x12”为QR码包含信息“www.dfrobot.com”(15个字符)的字符个数加3.
  //“0x77,0x77,0x77,0x2E,0x64,0x66,0x72,0x6F,0x62,0x6F,0x74,0x2E,0x63,0x6F,0x6D”为网址字符对应ACILL码
  0x1b, 0x61, 0x01,                                                                           //设置图形居中
  0x1d, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x52, 0x30,                                             //校验QR码是否正常
  0x1d, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x51, 0x30                                              //打印QR码
};
void setup() {
  mySerial.begin(9600);
  Serial.begin(9600);
  while (Serial.read() >= 0) {}
}
void loop() {
  mySerial.println();
  mySerial.print("---------------------------------");
  mySerial.println();
  mySerial.write(bar_code, 60);                                                             //向打印机发送打印条形码指令
  delay(5);
  mySerial.println();
  mySerial.write(QRx, 60);                                                                  //向打印机发送打印二维码指令
  mySerial.println();
  mySerial.print("---------------------------------");
  delay(5000);
}

打印位图

unsigned char  show[] = {
  0x1B, 0x2A, 0x20, 0xFA, 0x00,                                                                                                               //图片尺寸24*250,参考通用指令集34,35修改参数
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFF,
  0x00, 0x01, 0xFF, 0x80, 0x03, 0xFF, 0x80, 0x03, 0xEF, 0x80, 0x07, 0xEF, 0xC0, 0x07, 0xC7, 0xC0, 0x07, 0xC7, 0xC0, 0x07, 0xC7, 0xC0, 0x07, 0xC7, 0xE0, 0x0F, 0x83, 0xE0,
  0x0F, 0x83, 0xE0, 0x0F, 0x83, 0xE0, 0x0F, 0x83, 0xE0, 0x0F, 0x83, 0xE0, 0x0F, 0x83, 0xE0, 0x0F, 0x81, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F,
  0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01,
  0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x83, 0xE0,
  0x0F, 0x83, 0xE0, 0x0F, 0x83, 0xE0, 0x0F, 0x83, 0xE0, 0x0F, 0x83, 0xE0, 0x0F, 0x83, 0xE0, 0x0F, 0xC7, 0xE0, 0x07, 0xC7, 0xC0, 0x07, 0xC7, 0xC0, 0x07, 0xC7, 0xC0, 0x07,
  0xEF, 0xC0, 0x03, 0xEF, 0x80, 0x03, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x01, 0xFF, 0x80, 0x03, 0xFF, 0xC0, 0x03, 0xFF, 0xC0, 0x03, 0xFF, 0xC0, 0x03, 0xFF, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03,
  0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7,
  0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x0F, 0xE7, 0xF0,
  0x1F, 0xE7, 0xF8, 0x1F, 0xE7, 0xF8, 0x1F, 0xE7, 0xF8, 0x1F, 0xC3, 0xF8, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0xC1, 0xF0, 0x07, 0xC3, 0xE0, 0x07,
  0xC3, 0xE0, 0x07, 0xC3, 0xE0, 0x07, 0xC3, 0xE0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF,
  0x80, 0x01, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00,
  0x00, 0x7E, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x03, 0xFF, 0xC0, 0x07, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x07, 0xFF, 0xE0,
  0x07, 0xC3, 0xE0, 0x0F, 0x83, 0xE0, 0x0F, 0x83, 0xE0, 0x0F, 0x83, 0xE0, 0x0F, 0x83, 0xE0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F,
  0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x81, 0xF8, 0x0F, 0x81, 0xF0, 0x0F, 0x81,
  0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0,
  0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F,
  0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81,
  0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xE0, 0x0F, 0x83, 0xE0, 0x0F, 0x83, 0xE0, 0x0F, 0x83, 0xE0, 0x07, 0xC3, 0xE0, 0x07, 0xFF, 0xE0, 0x07, 0xFF, 0xE0,
  0x07, 0xFF, 0xC0, 0x03, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0a,
  0x1B, 0x40,
  0x1b, 0x2a, 0x00, 0x0C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,                                       //打印一根分割线
  0x1B, 0x33, 0x00,
  0x0A,
  0x1D, 0x2F, 0x30                                                                                                                            //打印位图指令

};
  1. 编写程序发送指令
#include <SoftwareSerial.h>
#include"D:\imege.h"                                                                         //引用将之前新建的image.h文件,根据实际情况修改地址
SoftwareSerial mySerial(10, 11); // RX, TX

/*--------打印条形码指令,其中包含信息为“DFR0503”---------*/
char picture_S[6] = {
  0x1b, 0x40,
  0x1d, 0x2A, 0x14, 0x0A                                                                    //参考通用指令集34和35,0x14和0x0A是根据位图尺寸计算得来
};
char picture_E[3] = {
  0x1D, 0x2F, 0x30
};

void setup() {
  mySerial.begin(9600);
  Serial.begin(9600);
  while (Serial.read() >= 0) {}
}
void loop() {
  mySerial.println();
  mySerial.print("---------------------------------");
  mySerial.println();

  mySerial.write(show, 823);                                                               //向打印机发送打印位图指令

  mySerial.println();
  mySerial.print("---------------------------------");
  delay(5000);

即时输入,即时打印(一个简单的名片书写程序)

#include "SoftwareSerial.h"
#include "Wire.h"
char buffer[30];
SoftwareSerial mySerial(10, 11); // RX, TX
String comdata = "";
char  comdataX;
int numdata;
void setup()
{
  mySerial.begin(9600);
  Serial.begin(9600);
  while (Serial.read() >= 0) {}
}
void loop()
{
  //Serial_pc();
  Serial_pc1();
}
void Serial_pc()
{
  while (Serial.available() > 0) {
    delay(100);
    mySerial.print("DFROBOT:");
    numdata = Serial.readBytes(buffer, 30);
    mySerial.print(buffer);
  }
  for (int i = 0; i < 30; i++)
    buffer[i] = 0;
}
void Serial_pc1()
{
  while (Serial.available() > 0) {
    delay(100);
    numdata = Serial.readBytes(buffer, 30);

    if (buffer[0] > '/' && buffer[0] < ':')
    {
      mySerial.print("Tel:");
      mySerial.println(buffer);
    }
    else if (buffer[0] > '@' && buffer[0] < '{')
    {
      mySerial.print("Name:");
      mySerial.println(buffer);
    }
    else if (buffer[0] == '*')
    {
      mySerial.print("Remarks:");
      mySerial.println(buffer);
    }
    else {
      ;
    }
  }
  for (int i = 0; i < 30; i++)
    buffer[i] = 0;
}

常见问题

问题 使用本文的arduino代码中打印中文的示例代码出现英文正常显示、中文乱码怎么办?
1、请检查hz.c文件确认是ANSI编码,记事本另存为页面选择ANSI编码。
2、若确认编码没有问题,请将示例代码中中文设置的两行代码取消注释。(感谢论坛吕老师提供问题及解决方法)

不能打印原因:

  1. 供电问题 由于我没有电源 直接拿稳压源接的 保证在12v 才能打印很清楚的
  2. 纸张是否装反 装反是打印不出来的
  3. 操作步骤是 长按 上电 第一次打印是测试键 打印结束再松手 测试打印出的最后会显示现在是usb配置 是串口或打印口 上位机需要在串口 如果不是 请长按2s调整 这一指令也会打印出来 短按退出 这些都做完之后 usb线接到电脑上 打开上位机 选择串口 再打开串口 就可以正常操作了

对此产品有任何问题,欢迎通过qq或者论坛联系我们!

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

更多

DFshopping_car1.png DFRobot商城购买链接