热敏打印机的使用

电子说

1.3w人已加入

描述

概述

使用这款非常可爱的热敏打印机将微型打印机添加到任何微控制器项目中。也就是收据打印机,它们就是您在ATM或杂货店看到的东西。现在,您可以将自己的一台小型打印机嵌入机箱中。该打印机非常适合与微控制器接口,您只需从微控制器获得3.3V至5V TTL串行输出即可打印文本,条形码,位图图形甚至是QR码!

该打印机使用非常常见的2。 25英寸宽的热敏纸,可在Adafruit商店或任何办公室或文具用品店中购买。托架中最多可容纳50英尺的纸张。您还需要5伏至9伏的可调节直流电源,该电源可提供1.5安培或在大电流打印过程中,我们的5V 2A电源可以很好地工作。

您可以在Adafruit商店购买热敏打印机套件,包括打印机,纸张,电源和接线盒适配器!

当然,我们不会给您数据表和“好运!” —本教程和匹配的Arduino库演示了以下内容:

使用大,中,小文本打印

粗体 下划线和倒排文本

变量行距

左对齐,居中对齐和右对齐

以下标准格式的条形码: UPC A,UPC E,EAN13,EAN8,CODE39,I25,CODEBAR,CODE93,CODE128,CODE11 和 MSI -具有可调整的条形码高度

自定义单色位图图形

如何打印QR码

电源

这些打印机使用热敏头加热特殊收据纸并绘制图像和文字。这使打印机非常小-没有移动的墨水头-但这意味着它们需要大量电能。该打印机特别需要 5至9伏,1.5安培电流!!这意味着您将需要相当强劲的电源,并且无法使用USB电源供电。 需要外部适配器!

我们建议在我们的商店中使用5V 2A电源,它有足够的电源使打印机保持满意状态,还可以使用它来运行一些微控制器或传感器剩余的500 mA电流是打印机不需要的。

为打印机供电的快速方法是仅使用2.1毫米插孔适配器,您可以将其连接到打印机的红色/黑色导线:

首次测试

您应该做的第一项测试是确保打印机正在运行并且电源连接正确。

首先,向上拉小塑料卡舌以打开纸架。然后如下图所示将57.5毫米(2 1/4英寸)热敏纸卷插入托架。

对于产品ID#597“小型热敏打印机”,最佳的纸张长度将是为50英尺(约15米),因此请尝试拾起该尺寸。有时,如果您从办公用品商店购买纸张,纸张会稍长一些,大约80或85英尺,在这种情况下,您需要从纸卷中取出纸张,直到其直径为1.5英寸/40毫米并且容易安装。

对于产品#2751“微型热敏打印机”,纸张的最佳长度为33英尺(约10米),因此请尝试拾取该尺寸。

对于产品#2752“纳米热敏打印机” “纸张的最佳长度为16英尺(约5米),因此请尝试拾取该尺寸。

对于我们的热敏打印机内胆套件,没有纸架,因此您可以使用任何尺寸。/li》

确保纸张没有被装订或粘在托架中,它应该可以自由旋转。

如前所述,使用5V至9V 1.5A为打印机供电或更高的电源,例如连接2.1mm DC电源插孔:

按住按钮o在插入电源的同时,在打印机顶部(或控制板上)。您应该会看到打印出的收据,其中显示了字体表和一些诊断信息。

有是打印机胆量上的无按钮(#2753)。您将需要在J1上附加一个或手动将其短路。

打印机通电后,绿色或红色LED可能会闪烁。不一定会稳定!

如果没有得到打印输出,请检查纸张是否正确插入并且没有装订,电源线是否正确连接,电源是否已插入等。然后尝试再次,在连接电源时按住按钮。

请注意测试页上的波特率。可能是19200或9600。稍后我们需要这个数字:

某些打印机胆量(#2753)没有自检功能。

如果未打印出波特率,请尝试使用9600作为默认值。

Arduino代码

要将数据发送到打印机,我们将使用5V TTL串行连接。这与计算机9针串行端口上的10V RS232串行端口不同-请勿将打印机直接连接到标准PC端口,否则可能会损坏它。可以使用诸如FTDI电缆之类的东西与打印机进行通讯,但是我们假设几乎每个人都希望将其与微控制器一起使用。本教程显示了如何将其连接到Arduino,并且我们的示例代码与Arduino兼容。任何可以输出TTL串行信号的微控制器都可以正常工作,并且对代码进行了适当的修改。

首先,我们将连接打印机的数据线。一种简单的连接方法是,只需将匹配颜色的22AWG左右的电线插入插头,然后使用这些电线将其扩展到Arduino。

对于产品#597

“小型热敏打印机”的数据线有三根导线

black = 接地

黄色=打印机数据 IN

绿色=打印机数据 OUT

在电源线上,将红色连接到5-9VDC电源,将黑色连接到电源接地

对于产品#2751

“微型热敏打印机”的数据电缆具有《坚固的五根电线

黑色= 接地

绿色=数据 IN 至打印机-迷你热敏打印机对面!

黄色=数据 OUT 打印机-迷你热敏打印机的对面!

让红色和蓝色未连接任何东西

在电源线上,连接红色至5-9VDC电源,黑色为地面供电

对于产品#2752

“纳米热敏打印机”的数据电缆具有五根电线,而没有电源电缆

黑色= 接地

蓝色=数据 IN 到打印机(在PCB上标记为 RX )

绿色=打印机的数据 OUT (在PCB上标记为 TX )

红色= 5-9VDC电源(连接

yellow = DTR,暂时不使用,请跳过!

对于产品#2753

“ Thermal Printer Guts”的数据线有五线,无电源线

在这种情况下,该电缆可能没有颜色,请在连接器上查找文本。可悲的是,当您插入电缆时,它会被覆盖

VH = 5-9VDC电源(将电源插头的接地与上述数据连接到同一接地)

GND = 接地

PCB上标有 RX 的数据=数据 IN 到打印机

标有 TX 的打印机上PCB =数据 OUT

标有 DTR PCB =连接到 GND 。

连接到Arduino

在Arduino端,数据输出电线连接到数字引脚5 ,数据输入转到数字引脚6 ,并《接地》接地到任意 GND 引脚。您可以稍后更改数字引脚,但是要与示例代码匹配,请暂时坚持使用!

请注意下面的电线颜色不一定与数据电缆的颜色相匹配,因此请仔细检查产品的输入和输出名称,它们都不同!

安装库

现在是时候下载Arduino库代码了。

转到 Sketch-》 Include Library-》 Manage Libraries 。..

打印机

下的Arduino库管理器

从管理器中安装 Adafruit热敏打印机库

打印机

我们还提供了有关Arduino库安装的出色教程,网址为:

http://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use

之后安装库,重新启动Arduino IDE 。

您现在应该可以通过按以下顺序浏览菜单来访问示例代码: File→Sketchbook→Libraries→ Adafruit_Thermal→A_printertest

打印机

如果您的打印机测试页显示“ BAUDRATE:9600”,则需要对库源代码进行少量更改。使用文本编辑器(记事本等)打开文件Adafruit_Thermal.cpp并更改此行:

下载:文件

复制代码

#define BAUDRATE 19200 #define BAUDRATE 19200

为此:

下载:文件

复制代码

#define BAUDRATE 9600 #define BAUDRATE 9600

某些打印机到货出厂设置为19200波特,但是有些可能设置为9600。这不会对您的设备性能产生负面影响!通过打印机的纸张速度已经远远低于此速度,您将看不到任何区别……这完全是使微控制器和打印机通信的数据协议问题。

确定将草图(如有必要,更改波特率)上传到Arduino。您应该看到打印机打印出示例收据,其中包括库的所有功能。

如果这不起作用,请首先检查打印机和Arduino均已供电,并且数据在其中,出线和接地线已正确连接到Arduino。

打印文本

热敏打印机可以做一些方便的事情,其中大部分都在 A_printertest 草图中。这些如上图所示。按顺序,从顶部开始:

倒排的文本:这是通过调用 inverseOn()来调用的—您将获得黑底白字而不是黑字-on-white。 inverseOff()将其关闭。

双倍高度:这会使文本特别高,请调用 doubleHeightOn()-同样,使用 doubleHeightOff()

左/中/右对齐来关闭:这会将文本与页面的左边缘或右边缘对齐或居中对齐。您可以通过调用 justify(‘R’)(用于右对齐), justify(‘C’)(用于居中)或 justify( ‘L’)(用于左对齐)。左对齐是默认状态。

粗体文本:使其更加突出,使用 boldOn()启用,然后用 boldOff()

带下划线的文本:使其更加突出,使用 underlineOn()启用,并通过 underlineOff()

大/中/小文本:默认情况下,我们使用小号,中号是高号的两倍,大号是宽/高号的两倍。使用 setSize(‘L’), setSize(‘M’)或 setSize(‘S’)

设置大小li》行距:您可以通过调用 setLineHeight()来更改文本行之间的间距 ,其中 numpix 是像素数。最小值为24(行之间没有多余的空格),默认间距为32,双倍行距的文本为64。

A_printertest草图以查看在上下文中使用的这些。

位图打印

此打印机可以打印出位图,可以为带有徽标或类似字样的收据添加一丝类。

第一个步骤是准备徽标。打印机只能打印单色(1位)图像,最大宽度为384像素。我们建议从一个小的位图(每侧100像素或更小)开始,然后尝试获得所需的尺寸和外观。/p》

需要一些步骤来准备要打印的图像。对于Windows用户,有一个不错的图形用户界面。对于Mac和Linux,使用了不同的工具……虽然外观不那么漂亮,但效果很好。

这些条形码打印机不应与LaserJet混淆-它们不能很好地打印大量黑色的浓密图像,否则它们可能会粘住并停滞!

div》

Windows

使用图像编辑程序将图像保存为1位BMP —在Windows中,内置的 Paint 程序就足够了。

下载,安装并运行 LCD Assistant 。该程序仅适用于Windows,但做得非常好!加载先前生成的BMP文件(在Paint等中)。文件必须为BMP格式-该软件将不会读取PNG,GIF等。然后需要调整一些设置……

打印机

首先,在设置的“字节方向”部分中,请选择“水平”(上图中的项目A)。

第二个(上图中的项目B),您可能需要更改“宽度”设置。由于此软件(和热敏打印机)按八个像素的水平组处理图像,如果图像宽度不是8的倍数,它将被截断(裁剪)到最近的较小的8像素边界。例如,在上面的75像素宽的图片中,输出将被裁剪为仅72像素宽,从右侧边缘丢失了一些数据。为避免这种情况,请将此数字增加到下一个8的倍数 (在上面的示例中为80),并且输出将用空白像素填充以填补空白。请记住您在此处使用的数字,以后将需要它。

图像高度不需要这样调整,只需调整宽度即可。

将表名设置为简短但可描述的名称(例如,上面的“ adalogo”) ,然后从“文件”菜单中选择“保存输出”。给文件起一个简短但描述性的名称,以“ .h”结尾(例如“ adalogo.h”)。

要将此文件放入Arduino草图,请从“草图”菜单中选择“添加文件…”。这将在您的代码中添加一个新标签。您的原始代码仍在最左侧的标签下。

两个标签现在都需要进行一些小的更改。首先,在包含新表数据的文件顶部,将“ const unsigned char”更改为“ static const uint8_t PROGMEM”,如下所示:

打印机

接下来,在包含代码主体的标签中,添加“ include”语句以引用新文件:

下载:文件

复制代码

#include “adalogo.h” #include “adalogo.h”

如果不确定如何正确包含代码,请检查 A_printertest 示例草图。

您现在可以通过调用 printBitmap(width,height,tablename)输出图像,其中 width 和 height 是图像的尺寸像素(如果您将图像宽度更改为8的倍数,请使用该数字而不是原始图像尺寸),并且 tablename 是新标签中数组的名称(例如,“ adalogo”) 。

图形用户界面很不错,但是其中一些额外的步骤可能会造成混淆并且容易出错。如果您愿意,以下适用于Mac和Linux的技术也可在Windows中使用。

Mac和Linux

Mac和Linux的转换工具不包含精美的GUI,但效果很好,并且避免了很多步骤(以及潜在的错误步骤)。源图像不需要采用BMP格式-大多数图像格式都可以本地读取-并可以通过进一步编辑将输出添加到草图中。如果您愿意使用此方法,它也适用于Windows。

首先,如果尚未安装处理语言,请从processing.org下载。处理看起来几乎完全像Arduino IDE,但是它是为普通计算机而不是微控制器编写代码的。这可能会使初学者感到困惑,因此,如果某些东西似乎无法编译,请确保您在正确的环境中运行代码: Arduino 用于Arduino板,正在为您的计算机进行处理。

此代码在Processing 2.x(可从其网站上获得的最新版本的Processing)中运行。不要使用较旧的Processing 1.5.x版本!

您先前下载的Adafruit_Thermal库文件夹包含一个名为 processing 的子文件夹。里面是一个名为 bitmapImageConvert.pde 的草图。将其加载到“处理”中,然后按RUN(三角形按钮)。

系统将使用系统的标准文件选择对话框提示您选择图像。该程序仅运行一小会儿,就会在原始图像文件旁边创建一个新文件。例如,如果您选择了一个名为“ adalogo.png”的图像,则在同一位置将有一个名为“ adalogo.h”的新文件。该文件包含要添加到Arduino草图中的代码。除非要在其中更改变量名,否则无需编辑此文件。

要将此文件放入Arduino草图,请从“草图”菜单中选择“添加文件…”。这将在您的代码中添加一个新标签。您的原始代码仍位于最左侧的选项卡下。

下一步,在包含代码主体的选项卡中,添加“ include”语句以引用新文件:

下载:文件

复制代码

#include “adalogo.h” #include “adalogo.h”

如果不确定如何正确包含代码,请检查 A_printertest 示例草图。

如果源图像名为adalogo.png,则生成的.h文件(adalogo.h)将包含三个名为adalogo_width,adalogo_height和adalogo_data的值,可以直接将它们按顺序传递给printBitmap()函数,如下所示:

下载:文件

复制代码

printBitmap(adalogo_width, adalogo_height, adalogo_data); printBitmap(adalogo_width, adalogo_height, adalogo_data);

条形码打印

热敏打印机非常擅长打印条形码!该打印机支持11种不同的代码- UPC A,UPC E,EAN13,EAN8,CODE39,I25,CODEBAR,CODE93,CODE128,CODE11 和 MSI 。它仅支持线性(1-D)条形码,不能生成二维码(如QR码)(尽管您可以做一些破解,请参见下文!)条形码是“即时”生成的,这很好-您可以很容易地自定义包含的高度和数据。

您可以通过调用 printBarcode(“ barcodedata”,BARCODETYPE)制作条形码,其中第一个字符串是要编码的数据(例如aUPC代码)和 BARCODETYPE 可以是 UPC_A,UPC_E, EAN13,EAN8,CODE39,I25,CODEBAR,CODE93,CODE128,CODE11 或 MSI 。

某些条形码非常受限制-您只能输入12个数字,不能输入任何字符。其他的则非常灵活,几乎可以输入任何字符。请查看Wikipedia列表,详细列出条形码的种类,然后为您的应用选择合适的条形码。

条形码的可用范围随打印机固件版本的不同而不同。在Adafruit_Thermal.h中查看代码列表。

如果您愿意预先生成QR代码,也可以打印QR代码。举例来说,如果您想在收据中包含一个URL并且URL保持不变,这可能会很方便。您可以在包括该站点在内的许多站点上生成QR码。使用最小的QR码大小。图片将采用PNG格式,因此,如果您使用的是Windows LCD助手工具,则需要先将其转换为BMP(Windows Paint适用于此功能)。然后,您可以按照前面所述将其转换并嵌入到Arduino草图中。

CircuitPython

将热敏打印机与CircuitPython(或Python)和Adafruit CircuitPython热敏打印机模块一起使用很容易。该模块使您可以轻松地编写控制打印机的Python代码,例如打印文本和条形码(请注意,CircuitPython代码现在不支持位图打印不)。

CircuitPython微控制器接线

第一个完全按照Arduino前几页所示,通过串行连接将热敏打印机连接到板上。确保为打印机提供电源,该电源可以在约1.5到2A的电流下提供5-9V电压。

请记住,还有两种连接打印机的方法,最简单的方法是连接打印机的电源。电路板的TX到打印机的RX –这使您可以打印任何东西,但不检查纸张状态:

打印机

打印机电源正极(红线)至 5-9V电源正极。

打印机电源接地(红色旁边的黑线)至电源负极/接地。

打印机RX(黄色)到板载串行TX 。

打印机接地(黄色旁边的黑线)到板地/GND。

一个更高级的选项是连接打印机‘的TX引脚连接到开发板的串行RX引脚。 但是要非常小心,以确保您的电路板支持5伏串行输入!许多板卡,例如Feather M0,都不支持5V串行输入,会损坏! :

打印机

打印机电源正极(红线)到 5-9V直流电源正极。

打印机电源接地 (红色旁边的黑线)连接到电源负极/接地。

打印机RX (黄色)连接到板载串行TX 》。

打印机接地(黄色旁边的黑线)到板接地/GND。

打印机TX 到2.2K Ω电阻的一侧。

3.3K Ω电阻的一侧到t的另一侧他的2.2K Ω电阻。将3.3K Ω电阻的另一侧连接到板地/GND。

板RX 连接到3.3K 的结Ω 和2.2K Ω电阻(即分压器的输出)。

再次非常小心地连接打印机TX(绿线)连接到板上!如上所述,如果不支持5伏输入,则可能会损坏电路板。如有疑问,请断开绿线的连接!您仍然可以在没有绿线的情况下进行打印,只有在有纸的情况下,您才失去阅读能力。

Python计算机接线

由于存在数十种Linux计算机/主板,可以使用,我们将展示Raspberry Pi的接线。对于其他平台,请访问Linux上的CircuitPython指南,以了解您的平台是否受支持。

在这里,您有两个选择:外部USB到串行转换器,或USB上的内置UART。 Pi的TX/RX引脚。下面是连接USB到串行转换器的示例:

USB TX 至打印机RX

USB接地 》到打印机地面

打印机

以下是使用Pi内置的示例UART:

打印机

Pi GND 至打印机接地(黑线)

Pistrong TXD 至打印机RX (黄线)

如果要使用内置UART,则需要禁用串行控制台并在 raspi-config 中启用串行端口硬件。有关如何执行此操作的详细说明,请参见《 Raspberry Pi上的CircuitPython指南》的“ UART/串行”部分。

如果您希望能够检查打印机的纸张状态,则可以可以创建一个具有2.2K Ω和3.3K Ω电阻器电路的简单分压器,将打印机的5V输出降低到更安全的3.3V电平:

打印机

打印机RX (黄色)到 Pi串行TXD 。

打印机接地(黄色旁边的黑线)到 Pi GND。

打印机TX 到2.2K Ω电阻器的一侧。

3.3 K Ω电阻的一侧到2.2K Ω电阻的另一侧。将3.3K Ω电阻的另一端连接到 Pi GND 。

Pi RXD 到电阻的结。 3.3K Ω和2.2K Ω电阻(即分压器的输出)。

您可以对USB到串行电缆使用相同的技术:

打印机

USB接地到面包板接地导轨。

打印机RX (黄色)到 USB TX (绿色)。

打印机接地(黄色旁边的黑线)到接地轨。

打印机TX 到2.2K Ω电阻的一侧。

3.3 K Ω电阻的一侧到2.2K 的另一侧Ω重sistor。将3.3K Ω电阻的另一端连接到接地轨。

USB RX 连接到 3.3K Ω和2.2K Ω电阻(即分压器的输出)。

CircuitPython热敏打印机库的安装

如果您使用CircuitPython微控制器,则需要在CircuitPython板上安装Adafruit CircuitPython热敏打印机库。

首先请确保您正在运行

下一步,您需要安装必要的库才能使用硬件-仔细按照以下步骤从Adafruit的CircuitPython库包中查找并安装这些库。我们的简介指南上有一个很棒的页面,介绍了如何为快速和非表达板安装库包。

记住非装饰板,例如Trinket M0,Gemma M0和Feather/Metro M0 basic, ’需要从捆绑包中手动安装必要的库:

adafruit_thermal_printer

您还可以下载 adafruit_thermal_printer 文件夹在Github上的发布页面。

在继续之前,请确保您董事会的lib文件夹或根文件系统已复制 adafruit_thermal_printer 文件夹 。

GPS库的Python安装

如果将Raspberry Pi或其他计算机与Python配合使用,则需要安装Adafruit_Blinka库,该库在Python中提供了CircuitPython支持。这可能需要验证您是否正在运行Python3。由于每个平台都略有不同,并且Linux经常更改,请访问Linux上的CircuitPython指南以使您的计算机准备就绪!

完成后,从您的命令行运行以下命令:

下载:文件

复制代码

sudo pip3 install adafruit-circuitpython-thermal-printer sudo pip3 install adafruit-circuitpython-thermal-printer

固件版本和波特率

在使用打印机模块之前,必须确定打印机的固件版本和波特率。如第一个测试页所述,通过从打印机打印测试页很容易发现,并在通电时按住打印机按钮。打印出测试页,并记下底部打印的这些值:

波特率-请记住该值,通常为19200或9600。

版本-还要记下该值,例如2.2、2.64、2.68等。您将使用该版本来选择用于与打印机交互的适当模块。

用法

如果您使用CircuitPython微控制器,请连接到开发板的串行端口REPL,所以您在CircuitPython 》》》 提示符下。如果您使用的是Raspberry Pi之类的计算机,请通过键入python3在命令提示符处显示REPL。 (在某些系统上,python可能运行Python 3-确保不使用Python 2,因为它不受支持。)

为演示传感器的用法,我们将其初始化并从REPL中打印一些文本。

首先,您必须导入必要的模块以初始化与打印机的硬件串行连接。这些命令将根据您的硬件而有所不同-选择适当的设置:

下载:文件

复制代码

# On a CircuitPython microcontroller:

import board

import busio

uart = busio.UART(board.TX, board.RX, baudrate=19200) # On a CircuitPython microcontroller:

import board

import busio

uart = busio.UART(board.TX, board.RX, baudrate=19200)

下载:文件

复制代码

# On the Raspberry Pi with the USB-to-serial converter:

import serial

uart = serial.Serial(“/dev/ttyUSB0”, baudrate=19200, timeout=3000) # On the Raspberry Pi with the USB-to-serial converter:

import serial

uart = serial.Serial(“/dev/ttyUSB0”, baudrate=19200, timeout=3000)

下载:文件

复制代码

# On the Raspberry Pi with built-in UART:

import serial

uart = serial.Serial(“/dev/serial0”, baudrate=19200, timeout=3000) # On the Raspberry Pi with built-in UART:

import serial

uart = serial.Serial(“/dev/serial0”, baudrate=19200, timeout=3000)

注意,串行连接的波特率由 baudrate 关键字。对于大多数打印机,它们将使用19200波特率,但是其他打印机可能被配置为使用不同的速率,例如9600波特。 使用您在打印机测试页上看到的波特率!

还请注意,CircuitPython当前需要双向UART连接,因此即使您没有该板,挂钩RX引脚(根据建议),您必须保持断开状态,并忽略在项目中使用它。

创建ThermalPrinter类

接下来,您需要导入热敏打印机模块并调用一个函数以获取正确的类,具体取决于打印机固件的版本。 请按照上面提到的步骤和上一个测试页上的步骤,找到正确的打印机版本!

下载:文件

复制代码

import adafruit_thermal_printer

ThermalPrinter = adafruit_thermal_printer.get_printer_class(2.69) import adafruit_thermal_printer

ThermalPrinter = adafruit_thermal_printer.get_printer_class(2.69)

注意,您从get_printer_class模块中调用了adafruit_thermal_printer函数。您必须将此功能传递给您所使用的热敏打印机版本,并且它将在内部找到要导入并在您的代码中使用的正确类。在此示例中,我们指定的打印机的固件版本为2.69,但请确保指定打印机的版本!

结果是一个可以立即初始化的类:

初始化ThermalPrinter

现在构造类:

下载:文件

复制代码

ThermalPrinter printer = ThermalPrinter(uart)

注意,您必须传递先前构建的串行UART连接。

请注意,它将从半到甚至五秒钟,即可创建打印机并进行初始化和预热。您可以选择将printer = ThermalPrinter(uart)指定为关键字,并手动调用auto_warm_up=False函数来控制何时在应用程序中需要此预热时间(否则您会感到困惑,为什么代码需要花很长时间才能启动)。

测试页打印

现在就可以打印了!

尝试使用warm_up功能打印完整的测试页:

下载:文件

复制代码

test_page printer.test_page()

您应该看到打印机测试页已打印出来。

您可以使用printer.test_page()功能将纸张向前推进多行,尝试进纸2行以留出一些空间:

下载:文件

复制代码

feed printer.feed(2)

现在使用printer.feed(2)功能打印一小段文本,并输入几行以将其移出打印机以进行读取:

下载:文件

复制代码

print printer.print(‘Hello from CircuitPython!’)

printer.feed(2)

打印机字体

您可以使用一些属性来调整文本的打印方式。可以将每个参数设置为printer.print(‘Hello from CircuitPython!’)

printer.feed(2)值以启用,或将True值禁用:

False-打印粗体文本。

bold-打印倒置文本(黑底白字)。

inverse-打印倒置文本(可能不适用于所有版本的打印机)。

li》

upside_down-高度文本加倍。

double_height-宽度文本加倍。

double_width-删除线文本(再次可能不适用于所有版本的打印机)。

尝试打开粗体文本并打印一行:

下载:文件

复制代码

strike printer.bold = True # Turn on bold

printer.print(‘This is bold text!’)

printer.bold = False # Turn off bold

# Feed lines to make visible:

printer.feed(2)

您可以将一些属性设置为特殊值,以进一步控制文本打印:

printer.bold = True # Turn on bold

printer.print(‘This is bold text!’)

printer.bold = False # Turn off bold

# Feed lines to make visible:

printer.feed(2)-此控件控制下划线打印,可以为无(关闭),underline或adafruit_thermal_printer.UNDERLINE_THIN。

adafruit_thermal_printer.UNDERLINE_THICK -(文本),它控制文本的大小,可以是size , adafruit_thermal_printer.SIZE_SMALL , 或adafruit_thermal_printer.SIZE_MEDIUM 。 默认值很小。

adafruit_thermal_printer.SIZE_LARGE -,它控制打印文本的对齐方式或位置,可以为justify , adafruit_thermal_printer.JUSTIFY_LEFT ,或adafruit_thermal_printer.JUSTIFY_CENTER 。 默认为左对齐。

例如,打印带有中心对齐的带下划线的中号粗文本:

下载:文件

复制代码

adafruit_thermal_printer.JUSTIFY_RIGHT printer.underline = adafruit_thermal_printer.UNDERLINE_THICK

printer.size = adafruit_thermal_printer.SIZE_MEDIUM

printer.justify = adafruit_thermal_printer.JUSTIFY_CENTER

printer.print(‘Medium center!’)

# Reset back to normal printing:

printer.underline = None

printer.size = adafruit_thermal_printer.SIZE_SMALL

printer.justify = adafruit_thermal_printer.JUSTIFY_LEFT

# Feed lines to make visible:

printer.feed(2)

打印条形码

最后,您可以使用printer.underline = adafruit_thermal_printer.UNDERLINE_THICK

printer.size = adafruit_thermal_printer.SIZE_MEDIUM

printer.justify = adafruit_thermal_printer.JUSTIFY_CENTER

printer.print(‘Medium center!’)

# Reset back to normal printing:

printer.underline = None

printer.size = adafruit_thermal_printer.SIZE_SMALL

printer.justify = adafruit_thermal_printer.JUSTIFY_LEFT

# Feed lines to make visible:

printer.feed(2)功能打印条形码。每个打印机都支持不同类型和格式的条形码,因此请查阅下载部分中有关每种类型的产品表。但是,以下是打印值为‘123456789012’的UPC A条形码的示例:

Download:file

复制代码

print_barcode printer.print_barcode(‘123456789012’, printer.UPC_A)

printer.feed(2)

printer.print_barcode(‘123456789012’, printer.UPC_A)

printer.feed(2)的第一个参数是定义条形码值的字符串(这取决于条形码的类型,UPC A码是13位数字)。第二个参数是条形码的类型,它又取决于打印机固件。您可能使用的典型值包括:

print_barcode

printer.UPC_A

printer.UPC_E

printer.EAN13

printer.EAN8

printer.CODE39

printer.ITF

printer.CODABAR

printer.CODE93

检查纸张

如果您已经将电路板的RX引脚连接到打印机TX (同样,请务必确保您的板支持5V串行RX(很多不支持!)。您可以使用printer.CODE128函数查询纸张状态,如果有纸,则该函数返回has_paper或True:

下载:文件

复制代码

False printer.has_paper()

这是在CircuitPython中使用热敏打印机的全部内容!

用法的完整演示在库中的thermal_printer_simpletest.py演示中。

如果您正在跑步在Raspberry Pi(或任何计算机)上打开thermal_printer_simpletest.py,您必须进行一些更改。

在Raspberry Pi上,注释printer.has_paper()行,并取消注释uart = busio(。..)和import serial行,将uart = serial.Serial(。..)更改为适当的串行端口。

除非您使用分压器连接打印机TX线,请确保注释掉纸质检查代码:

下载:文件

复制代码

/dev/ttyUSB0 # Check if the printer has paper. This only works if the RX line is connected

# on your board (but BE CAREFUL as mentioned above this RX line is 5V!)

#if printer.has_paper():

# print(‘Printer has paper!’)

#else:

# print(‘Printer might be out of paper, or RX is disconnected!’)

现在,您可以使用以下命令运行该程序:

下载:文件

复制代码

# Check if the printer has paper. This only works if the RX line is connected

# on your board (but BE CAREFUL as mentioned above this RX line is 5V!)

#if printer.has_paper():

# print(‘Printer has paper!’)

#else:

# print(‘Printer might be out of paper, or RX is disconnected!’) python3 thermal_printer_simpletest.py

下载:Project Zip 或 thermal_printer_simpletest.py | 在Github上查看

复制代码

python3 thermal_printer_simpletest.py # Simple demo of printer functionality.

# Author: Tony DiCola

import board

import busio

import adafruit_thermal_printer

# Pick which version thermal printer class to use depending on the version of

# your printer. Hold the button on the printer as it‘s powered on and it will

# print a test page that displays the firmware version, like 2.64, 2.68, etc.

# Use this version in the get_printer_class function below.

ThermalPrinter = adafruit_thermal_printer.get_printer_class(2.69)

# Define RX and TX pins for the board’s serial port connected to the printer.

# Only the TX pin needs to be configued, and note to take care NOT to connect

# the RX pin if your board doesn‘t support 5V inputs. If RX is left unconnected

# the only loss in functionality is checking if the printer has paper--all other

# functions of the printer will work.

RX = board.RX

TX = board.TX

# Create a serial connection for the printer. You must use the same baud rate

# as your printer is configured (print a test page by holding the button

# during power-up and it will show the baud rate)。 Most printers use 19200.

uart = busio.UART(TX, RX, baudrate=19200)

# For a computer, use the pyserial library for uart access.

# import serial

# uart = serial.Serial(“/dev/serial0”, baudrate=19200, timeout=3000)

# Create the printer instance.

printer = ThermalPrinter(uart, auto_warm_up=False)

# Initialize the printer. Note this will take a few seconds for the printer

# to warm up and be ready to accept commands (hence calling it explicitly vs.

# automatically in the initializer with the default auto_warm_up=True)。

printer.warm_up()

# Check if the printer has paper. This only works if the RX line is connected

# on your board (but BE CAREFUL as mentioned above this RX line is 5V!)

if printer.has_paper():

print(’Printer has paper!‘)

else:

print(’Printer might be out of paper, or RX is disconnected!‘)

# Print a test page:

printer.test_page()

# Move the paper forward two lines:

printer.feed(2)

# Print a line of text:

printer.print(’Hello world!‘)

# Print a bold line of text:

printer.bold = True

printer.print(’Bold hello world!‘)

printer.bold = False

# Print a normal/thin underline line of text:

printer.underline = adafruit_thermal_printer.UNDERLINE_THIN

printer.print(’Thin underline!‘)

# Print a thick underline line of text:

printer.underline = adafruit_thermal_printer.UNDERLINE_THICK

printer.print(’Thick underline!‘)

# Disable underlines.

printer.underline = None

# Print an inverted line.

printer.inverse = True

printer.print(’Inverse hello world!‘)

printer.inverse = False

# Print an upside down line.

printer.upside_down = True

printer.print(’Upside down hello!‘)

printer.upside_down = False

# Print a double height line.

printer.double_height = True

printer.print(’Double height!‘)

printer.double_height = False

# Print a double width line.

printer.double_width = True

printer.print(’Double width!‘)

printer.double_width = False

# Print a strike-through line.

printer.strike = True

printer.print(’Strike-through hello!‘)

printer.strike = False

# Print medium size text.

printer.size = adafruit_thermal_printer.SIZE_MEDIUM

printer.print(’Medium size text!‘)

# Print large size text.

printer.size = adafruit_thermal_printer.SIZE_LARGE

printer.print(’Large size text!‘)

# Back to normal / small size text.

printer.size = adafruit_thermal_printer.SIZE_SMALL

# Print center justified text.

printer.justify = adafruit_thermal_printer.JUSTIFY_CENTER

printer.print(’Center justified!‘)

# Print right justified text.

printer.justify = adafruit_thermal_printer.JUSTIFY_RIGHT

printer.print(’Right justified!‘)

# Back to left justified / normal text.

printer.justify = adafruit_thermal_printer.JUSTIFY_LEFT

# Print a UPC barcode.

printer.print(’UPCA barcode:‘)

printer.print_barcode(’123456789012‘, printer.UPC_A)

# Feed a few lines to see everything.

printer.feed(2)

下载

用于Arduino的Adafruit_Thermal库。

LCD助手— Windows的可选位图转换实用程序。

处理语言-Mac或Linux(以及可选的Windows)的位图转换所需的语言。下载版本1.5.1,而不是2.0 beta。

热敏打印机用户手册。

旧版本的热敏打印机用户手册。

热敏打印机产品表。

固件更改器

如果要冒险,可以使用制造商提供的此工具还原/更改固件。我们还没有尝试过。完全不支持它,您可能会损坏打印机。如果由于固件更改而停止运行,我们将不予更换!

update_firmware.zip

问题排查!

我无法正常工作!

首先要尝试的是开机测试。为此,您不需要使用arduino。

确保纸张正确插入进纸架中,纸张应该上下进纸,以使纸张穿过插槽而不会弯曲

按住按钮,然后插入打印机电源。它应该打印出测试页

绿色LED不会一直亮着,它会偶尔闪烁一次,这是正常的。

我是

请确保您拥有一个可以提供所需电流的良好电源。如果尝试以5V电压运行,则即使在打印过程中电流需求达到峰值,您的电源也必须能够保持恒定的5V电压。如果您的打印机正在尝试打印但又出现故障,那么您的电源可能会跌至5V以下。

如果可能,请尝试使用更高电压的电源。在9V电压下,您应该可以摆脱1A电流。

我很难获得打印输出

确保纸张正确插入进纸架中,纸张应向下或向上进纸,以使纸张穿过插槽而不会弯曲

纸卷在托架中没有“卡住”的感觉,应该可以轻松旋转!

我的Arduino草图曾经可以使用,但是现在无法编译!

已进行一些更改以支持更广泛的版本系列的Arduino样板。较旧的代码将需要更新。

旧语法:

Adafruit_Thermal打印机(RX_PIN,TX_PIN);

新语法:声明一个SoftwareSerial对象,并将其地址传递给Adafruit_Thermal构造函数,如下所示:

SoftwareSerial mySerial(RX_PIN,TX_PIN);

Adafruit_Thermal打印机(&mySerial);

然后在setup()函数中:

mySerial.begin(19200);

printer.begin();

我的草图已编译,但输出为

打印机的功能和行为在各种固件版本中都发生了变化

首先,检查Adafruit_Thermal.h中的PRINTER_FIRMWARE值,确保它与打印机测试页底部的值匹配。 e(在接通电源以打印测试页时,按住进纸按钮)。

某些功能在各个版本中的行为略有不同……条形码,换行等,如果您以前使用的是较旧的库或较旧的打印机,您可能需要调整代码以使用当前设置生成所需的格式。

USB打印机未显示为

打印机可能处于不同的模式。要检查和更改当前的USB模式,请执行以下操作:

类似于自检-在应用 BUT KEEP HOLDING IT 时按住FEED按钮(请参见下文) 。

您应该获得额外的输出,告诉您当前的USB模式。

如果未输入COM,则再次按住FEED按钮2秒钟即可更改USB模式。

它应打印新的USB模式,然后然后退出。

完成。

黑客!

看看那些巨大的,锐利的图像打印!您想要一些吗?

以下内容……

是无证件打印机功能,不能保证正常工作。

可能需要修改您的打印机-一项避免保修的操作!继续,后果自负。

如果符合以下条件的 全部 ,则应仅尝试此操作:

首先确认打印机在通过常规程序进行操作时工作正常。

具有真正的性能瓶颈,首先不能通过调整打印机的时间和热量设置来充分解决。

舒服的打开东西和焊接。

修改后的打印机是不符合退款或交换条件。

这些打印机的串行接收缓冲区有限。将位推入打印机的速度超过了其物理加热点和送纸的速度,并且您会遇到“溢出”的情况-位图图像变得乱码,可能会跳过文本和格式化命令。

热敏打印机库试图将数据以适当的速率调整到打印机。太快,就会发生溢出。太慢了,会浪费您的时间;打印机无法以峰值吞吐量运行。这是一个不完善的过程……尽管我们使用非常保守的时序估计,但无法预测通过打印机的实际速度……有时会仍然发生溢出。

硬件握手是打印机或其他设备可以向微控制器报告已准备好接收更多数据的一种方法,实际上消除了缓冲区溢出(同时以峰值吞吐量运行)……仅在物理上绝对必要时才停止进纸。最佳性能。

这些热敏打印机中的某些品种似乎支持硬件握手(例如,固件v2.64、2.68)。数据表中几乎没有提到这一点,实际上在打印机的外部甚至没有物理连接。请稍作手术……

“ Tiny”和“ Nano”打印机(加上“ Printer Guts”)的DTR引脚裸露-无需修改必要!向下滚动到“代码更改”部分以继续。

所需的零件和工具

小型梅花槽螺丝刀

钳子

烙铁及相关用具

一点线…但理想的是母跳线

过程

拔下所有电缆,将打印机翻转过来,并卸下两颗菲利普斯小螺钉。

取下背板,然后卸下将电路板固定到位的两颗(有时是四颗)十字螺丝。

这些螺钉a比保留的小一些……不要混淆它们!

请小心,以免松开或拔下连接器,将电路板翻转过来,寻找未打孔的带有“ DTR”标签的孔。

如果您愿意的话,这里还有一些其他有趣的焊接点。 “ HV”是电源的原始5–9伏特。右侧是一个3.3V引脚,尽管我不知道可用电流。可以想到的是,可以减少这些电缆的数量,从而减少项目中的总体布线……甚至可以在内部安装一个微型微控制器!

从母跳线上剪下一端,然后剥皮并镀锡。

此会从打印机中伸出来……因此,如果您不使用连接器,则 female 跳线可以防止意外接触物品。如果您只有普通电线,那很好,请注意不要让裸露的晃来晃去。

将导线焊接到DTR焊盘。顶部,底部无所谓。..正好靠在串行连接插头上,因此使用最适合您的任何路径,都有足够的空间来沿任一方向布线。

助听器可能会注意到,从技术上讲,这不是DTR引脚,而是CTS。这在打印机制造商中已经存在很久了……显然,误称是几十年前的事,但一直困扰着

在后面板上,串行和电源插座之间有一个小的金属“手指”。可以使用钳子将其弯曲以向DTR导线提供出口路径。

将控制板重新拧紧到位(检查两条电缆是否都未松开),在两个插座之间布线DTR导线,然后将其拧紧。/p》

已完成硬件!

然后可以重新连接电源和串行插座,然后像以前一样进行布线。

使用跳线将DTR连接到任何可用的Arduino引脚。在我们的示例中,我们将使用数字引脚4。

打印机电子设备的工作电压为3.3V,因此,对于3.3V板(Arduino Due等),无需进行电平转换…可以安全地直接连接。

代码更改

只需一行。.. Adafruit_Thermal构造函数。..需要更改。它可以接受可选参数,即用于DTR的引脚号:

下载:文件

复制代码

Adafruit_Thermal printer(&mySerial, 4); Adafruit_Thermal printer(&mySerial, 4);

这与硬件串行端口(例如Arduino Mega或Due)同样有效:

下载:文件

复制代码

Adafruit_Thermal printer(&Serial1, 4); Adafruit_Thermal printer(&Serial1, 4);

不需要其他更改。尝试使用其中一个示例草图进行尝试……您会发现打印机突然很多更快!那是因为不再使用软件油门……打印机不断向微控制器报告其实际的“就绪”状态。

打印巨大图像

printBitmap()函数可以从开放流输出图像或将其存储在PROGMEM(闪存)中……如“打印位图”页面上所述。

尽管Arduino Mega具有高达256K的闪存空间,但AVR微控制器的局限性在于单个阵列不能超过32K……大约是384x680像素的位图图像。如果您尝试在代码中嵌入较大的图像,则编译器将报告错误。

一种解决方法可能是将很长的图像分解为多个较小的图像,并在不使用feed()的情况下连续打印出来

另一种方法是使用非AVR Arduino兼容板,例如32位Arduino Due。大规模阵列没有问题。上面的克莱斯勒大厦图片为384x1132像素!

其他要知道的事情

只要总体点密度相当低(如低于50%),这种打印机最适合使用浅色线条艺术以及有时抖动的摄影图像。较大的实心填充区域显示出奇怪的条纹痕迹……这不是磁带库或打印机固件的错误,而只是收据打印机操作方式的副作用,即它们一次只能加热这么多的点并且必须拉动shenanigans不能做到这一点,否则它们就会卡住。

下面是一些精美的商业票据打印机的示例。

在第一个通知中,“纯黑色”区域并不是真正的“纯黑色”……仔细检查它,您会看到它密密麻麻地抖动了,但没有100%被填充。

第二个确实具有实心填充,但限制了总面积。在任何给定行上,仅设置了这么多像素。

如果您尝试打印“密集”图像,则卡纸(图像被垂直压扁),将较低的浓度值传递给printer.begin()。默认值为120。例如:

下载:文件

复制代码

printer.begin(80); printer.begin(80);

DTR支持不是万能的。 偶尔还会出现毛刺…有时会溢出,有时会出现串行数据“成帧错误”。但总体而言,它似乎相当可靠且略微光滑!
        责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分