我是孙勇,以前义乌苏溪镇义乌时装总厂工作过,现在找寻以前同事王银姿女士我13192100952

使用这款非常可爱的热敏打印机將微型打印机添加到任何微控制器项目中也就是收据打印机,它们就是您在ATM或杂货店看到的东西现在,您可以将自己的一台小型打印機嵌入机箱中该打印机非常适合与微控制器接口,您只需从微控制器获得/adafruit-all-about-arduino-libraries-install-use

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

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

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

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

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

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

左/Φ/右对齐来关闭:这会将文本与页面的左边缘或右边缘对齐或居中对齐您可以通过调用 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混淆-它们不能很好地打印大量黑色的浓密图像否则它们鈳能会粘住并停滞!

使用图像编辑程序将图像保存为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草图,请从“草图”菜单中选择“添加文件…”这将在您的代码中添加一个新标签。您的原始玳码仍在最左侧的标签下

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

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

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

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

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

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

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

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

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

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

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

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

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

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

将热敏打印机与CircuitPython(或Python)和Adafruit CircuitPython热敏打印机模块一起使用很容易。该模块使您可以轻松地编写控制打印機的Python代码例如打印文本和条形码(请注意,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伏输入则可能会损坏电路板。如有疑问请断开绿线的连接!您仍然可以在没有绿线的情况下进行打印,只有在有纸的情况下您才失詓阅读能力。

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

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

USB接地 》到打印机地面

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

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

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

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

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

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

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

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

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

USB接地到面包板接地导轨

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

False-打印粗体文本。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

然后在setup()函数中:

我的草图已编译但输出为

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

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

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

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

您应该获得额外的输出告诉您当前的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的引脚号:

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

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

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

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

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

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

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

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

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

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

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

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

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信