概述
使用這款非??蓯?ài)的熱敏打印機(jī)將微型打印機(jī)添加到任何微控制器項(xiàng)目中。也就是收據(jù)打印機(jī),它們就是您在ATM或雜貨店看到的東西。現(xiàn)在,您可以將自己的一臺(tái)小型打印機(jī)嵌入機(jī)箱中。該打印機(jī)非常適合與微控制器接口,您只需從微控制器獲得3.3V至5V TTL串行輸出即可打印文本,條形碼,位圖圖形甚至是QR碼!
該打印機(jī)使用非常常見(jiàn)的2。 25英寸寬的熱敏紙,可在Adafruit商店或任何辦公室或文具用品店中購(gòu)買(mǎi)。托架中最多可容納50英尺的紙張。您還需要5伏至9伏的可調(diào)節(jié)直流電源,該電源可提供1.5安培或在大電流打印過(guò)程中,我們的5V 2A電源可以很好地工作。
您可以在Adafruit商店購(gòu)買(mǎi)熱敏打印機(jī)套件,包括打印機(jī),紙張,電源和接線盒適配器!
當(dāng)然,我們不會(huì)給您數(shù)據(jù)表和“好運(yùn)!” —本教程和匹配的Arduino庫(kù)演示了以下內(nèi)容:
使用大,中,小文本打印
粗體 下劃線和倒排文本
變量行距
左對(duì)齊,居中對(duì)齊和右對(duì)齊
以下標(biāo)準(zhǔn)格式的條形碼: UPC A,UPC E,EAN13,EAN8,CODE39,I25,CODEBAR,CODE93,CODE128,CODE11 和 MSI -具有可調(diào)整的條形碼高度
自定義單色位圖圖形
如何打印QR碼
電源
這些打印機(jī)使用熱敏頭加熱特殊收據(jù)紙并繪制圖像和文字。這使打印機(jī)非常小-沒(méi)有移動(dòng)的墨水頭-但這意味著它們需要大量電能。該打印機(jī)特別需要 5至9伏,1.5安培電流?。∵@意味著您將需要相當(dāng)強(qiáng)勁的電源,并且無(wú)法使用USB電源供電。 需要外部適配器!
我們建議在我們的商店中使用5V 2A電源,它有足夠的電源使打印機(jī)保持滿意狀態(tài),還可以使用它來(lái)運(yùn)行一些微控制器或傳感器剩余的500 mA電流是打印機(jī)不需要的。
為打印機(jī)供電的快速方法是僅使用2.1毫米插孔適配器,您可以將其連接到打印機(jī)的紅色/黑色導(dǎo)線:
首次測(cè)試
您應(yīng)該做的第一項(xiàng)測(cè)試是確保打印機(jī)正在運(yùn)行并且電源連接正確。
首先,向上拉小塑料卡舌以打開(kāi)紙架。然后如下圖所示將57.5毫米(2 1/4英寸)熱敏紙卷插入托架。
對(duì)于產(chǎn)品ID#597“小型熱敏打印機(jī)”,最佳的紙張長(zhǎng)度將是為50英尺(約15米),因此請(qǐng)嘗試拾起該尺寸。有時(shí),如果您從辦公用品商店購(gòu)買(mǎi)紙張,紙張會(huì)稍長(zhǎng)一些,大約80或85英尺,在這種情況下,您需要從紙卷中取出紙張,直到其直徑為1.5英寸/40毫米并且容易安裝。
對(duì)于產(chǎn)品#2751“微型熱敏打印機(jī)”,紙張的最佳長(zhǎng)度為33英尺(約10米),因此請(qǐng)嘗試拾取該尺寸。
對(duì)于產(chǎn)品#2752“納米熱敏打印機(jī)” “紙張的最佳長(zhǎng)度為16英尺(約5米),因此請(qǐng)嘗試拾取該尺寸。
對(duì)于我們的熱敏打印機(jī)內(nèi)膽套件,沒(méi)有紙架,因此您可以使用任何尺寸。/li》
確保紙張沒(méi)有被裝訂或粘在托架中,它應(yīng)該可以自由旋轉(zhuǎn)。
如前所述,使用5V至9V 1.5A為打印機(jī)供電或更高的電源,例如連接2.1mm DC電源插孔:
按住按鈕o在插入電源的同時(shí),在打印機(jī)頂部(或控制板上)。您應(yīng)該會(huì)看到打印出的收據(jù),其中顯示了字體表和一些診斷信息。
有是打印機(jī)膽量上的無(wú)按鈕(#2753)。您將需要在J1上附加一個(gè)或手動(dòng)將其短路。
打印機(jī)通電后,綠色或紅色LED可能會(huì)閃爍。不一定會(huì)穩(wěn)定!
如果沒(méi)有得到打印輸出,請(qǐng)檢查紙張是否正確插入并且沒(méi)有裝訂,電源線是否正確連接,電源是否已插入等。然后嘗試再次,在連接電源時(shí)按住按鈕。
請(qǐng)注意測(cè)試頁(yè)上的波特率??赡苁?9200或9600。稍后我們需要這個(gè)數(shù)字:
某些打印機(jī)膽量(#2753)沒(méi)有自檢功能。
如果未打印出波特率,請(qǐng)嘗試使用9600作為默認(rèn)值。
Arduino代碼
要將數(shù)據(jù)發(fā)送到打印機(jī),我們將使用5V TTL串行連接。這與計(jì)算機(jī)9針串行端口上的10V RS232串行端口不同-請(qǐng)勿將打印機(jī)直接連接到標(biāo)準(zhǔn)PC端口,否則可能會(huì)損壞它。可以使用諸如FTDI電纜之類的東西與打印機(jī)進(jìn)行通訊,但是我們假設(shè)幾乎每個(gè)人都希望將其與微控制器一起使用。本教程顯示了如何將其連接到Arduino,并且我們的示例代碼與Arduino兼容。任何可以輸出TTL串行信號(hào)的微控制器都可以正常工作,并且對(duì)代碼進(jìn)行了適當(dāng)?shù)男薷摹?/p>
首先,我們將連接打印機(jī)的數(shù)據(jù)線。一種簡(jiǎn)單的連接方法是,只需將匹配顏色的22AWG左右的電線插入插頭,然后使用這些電線將其擴(kuò)展到Arduino。
對(duì)于產(chǎn)品#597
“小型熱敏打印機(jī)”的數(shù)據(jù)線有三根導(dǎo)線
black = 接地
黃色=打印機(jī)數(shù)據(jù) IN
綠色=打印機(jī)數(shù)據(jù) OUT
在電源線上,將紅色連接到5-9VDC電源,將黑色連接到電源接地
對(duì)于產(chǎn)品#2751
“微型熱敏打印機(jī)”的數(shù)據(jù)電纜具有《堅(jiān)固的五根電線
黑色= 接地
綠色=數(shù)據(jù) IN 至打印機(jī)-迷你熱敏打印機(jī)對(duì)面!
黃色=數(shù)據(jù) OUT 打印機(jī)-迷你熱敏打印機(jī)的對(duì)面!
讓紅色和藍(lán)色未連接任何東西
在電源線上,連接紅色至5-9VDC電源,黑色為地面供電
對(duì)于產(chǎn)品#2752
“納米熱敏打印機(jī)”的數(shù)據(jù)電纜具有五根電線,而沒(méi)有電源電纜
黑色= 接地
藍(lán)色=數(shù)據(jù) IN 到打印機(jī)(在PCB上標(biāo)記為 RX )
綠色=打印機(jī)的數(shù)據(jù) OUT (在PCB上標(biāo)記為 TX )
紅色= 5-9VDC電源(連接
yellow = DTR,暫時(shí)不使用,請(qǐng)?zhí)^(guò)!
對(duì)于產(chǎn)品#2753
“ Thermal Printer Guts”的數(shù)據(jù)線有五線,無(wú)電源線
在這種情況下,該電纜可能沒(méi)有顏色,請(qǐng)?jiān)?a target="_blank">連接器上查找文本??杀氖?,當(dāng)您插入電纜時(shí),它會(huì)被覆蓋
VH = 5-9VDC電源(將電源插頭的接地與上述數(shù)據(jù)連接到同一接地)
GND = 接地
PCB上標(biāo)有 RX 的數(shù)據(jù)=數(shù)據(jù) IN 到打印機(jī)
標(biāo)有 TX 的打印機(jī)上PCB =數(shù)據(jù) OUT
標(biāo)有 DTR PCB =連接到 GND 。
連接到Arduino
在Arduino端,數(shù)據(jù)輸出電線連接到數(shù)字引腳5 ,數(shù)據(jù)輸入轉(zhuǎn)到數(shù)字引腳6 ,并《接地》接地到任意 GND 引腳。您可以稍后更改數(shù)字引腳,但是要與示例代碼匹配,請(qǐng)暫時(shí)堅(jiān)持使用!
請(qǐng)注意下面的電線顏色不一定與數(shù)據(jù)電纜的顏色相匹配,因此請(qǐng)仔細(xì)檢查產(chǎn)品的輸入和輸出名稱,它們都不同!
安裝庫(kù)
現(xiàn)在是時(shí)候下載Arduino庫(kù)代碼了。
轉(zhuǎn)到 Sketch-》 Include Library-》 Manage Libraries 。..
下的Arduino庫(kù)管理器
從管理器中安裝 Adafruit熱敏打印機(jī)庫(kù)
我們還提供了有關(guān)Arduino庫(kù)安裝的出色教程,網(wǎng)址為:
http://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use
之后安裝庫(kù),重新啟動(dòng)Arduino IDE 。
您現(xiàn)在應(yīng)該可以通過(guò)按以下順序?yàn)g覽菜單來(lái)訪問(wèn)示例代碼: File→Sketchbook→Libraries→ Adafruit_Thermal→A_printertest
如果您的打印機(jī)測(cè)試頁(yè)顯示“ BAUDRATE:9600”,則需要對(duì)庫(kù)源代碼進(jìn)行少量更改。使用文本編輯器(記事本等)打開(kāi)文件Adafruit_Thermal.cpp并更改此行:
下載:文件
復(fù)制代碼
#define BAUDRATE 19200 #define BAUDRATE 19200
為此:
下載:文件
復(fù)制代碼
#define BAUDRATE 9600 #define BAUDRATE 9600
某些打印機(jī)到貨出廠設(shè)置為19200波特,但是有些可能設(shè)置為9600。這不會(huì)對(duì)您的設(shè)備性能產(chǎn)生負(fù)面影響!通過(guò)打印機(jī)的紙張速度已經(jīng)遠(yuǎn)遠(yuǎn)低于此速度,您將看不到任何區(qū)別……這完全是使微控制器和打印機(jī)通信的數(shù)據(jù)協(xié)議問(wèn)題。
確定將草圖(如有必要,更改波特率)上傳到Arduino。您應(yīng)該看到打印機(jī)打印出示例收據(jù),其中包括庫(kù)的所有功能。
如果這不起作用,請(qǐng)首先檢查打印機(jī)和Arduino均已供電,并且數(shù)據(jù)在其中,出線和接地線已正確連接到Arduino。
打印文本
熱敏打印機(jī)可以做一些方便的事情,其中大部分都在 A_printertest 草圖中。這些如上圖所示。按順序,從頂部開(kāi)始:
倒排的文本:這是通過(guò)調(diào)用 inverseOn()來(lái)調(diào)用的—您將獲得黑底白字而不是黑字-on-white。 inverseOff()將其關(guān)閉。
雙倍高度:這會(huì)使文本特別高,請(qǐng)調(diào)用 doubleHeightOn()-同樣,使用 doubleHeightOff()
左/中/右對(duì)齊來(lái)關(guān)閉:這會(huì)將文本與頁(yè)面的左邊緣或右邊緣對(duì)齊或居中對(duì)齊。您可以通過(guò)調(diào)用 justify(‘R’)(用于右對(duì)齊), justify(‘C’)(用于居中)或 justify( ‘L’)(用于左對(duì)齊)。左對(duì)齊是默認(rèn)狀態(tài)。
粗體文本:使其更加突出,使用 boldOn()啟用,然后用 boldOff()
帶下劃線的文本:使其更加突出,使用 underlineOn()啟用,并通過(guò) underlineOff()
大/中/小文本:默認(rèn)情況下,我們使用小號(hào),中號(hào)是高號(hào)的兩倍,大號(hào)是寬/高號(hào)的兩倍。使用 setSize(‘L’), setSize(‘M’)或 setSize(‘S’)
設(shè)置大小li》行距:您可以通過(guò)調(diào)用 setLineHeight()來(lái)更改文本行之間的間距 ,其中 numpix 是像素?cái)?shù)。最小值為24(行之間沒(méi)有多余的空格),默認(rèn)間距為32,雙倍行距的文本為64。
A_printertest草圖以查看在上下文中使用的這些。
位圖打印
此打印機(jī)可以打印出位圖,可以為帶有徽標(biāo)或類似字樣的收據(jù)添加一絲類。
第一個(gè)步驟是準(zhǔn)備徽標(biāo)。打印機(jī)只能打印單色(1位)圖像,最大寬度為384像素。我們建議從一個(gè)小的位圖(每側(cè)100像素或更小)開(kāi)始,然后嘗試獲得所需的尺寸和外觀。/p》
需要一些步驟來(lái)準(zhǔn)備要打印的圖像。對(duì)于Windows用戶,有一個(gè)不錯(cuò)的圖形用戶界面。對(duì)于Mac和Linux,使用了不同的工具……雖然外觀不那么漂亮,但效果很好。
這些條形碼打印機(jī)不應(yīng)與LaserJet混淆-它們不能很好地打印大量黑色的濃密圖像,否則它們可能會(huì)粘住并停滯!
div》
Windows
使用圖像編輯程序?qū)D像保存為1位BMP —在Windows中,內(nèi)置的 Paint 程序就足夠了。
下載,安裝并運(yùn)行 LCD Assistant 。該程序僅適用于Windows,但做得非常好!加載先前生成的BMP文件(在Paint等中)。文件必須為BMP格式-該軟件將不會(huì)讀取PNG,GIF等。然后需要調(diào)整一些設(shè)置……
首先,在設(shè)置的“字節(jié)方向”部分中,請(qǐng)選擇“水平”(上圖中的項(xiàng)目A)。
第二個(gè)(上圖中的項(xiàng)目B),您可能需要更改“寬度”設(shè)置。由于此軟件(和熱敏打印機(jī))按八個(gè)像素的水平組處理圖像,如果圖像寬度不是8的倍數(shù),它將被截?cái)啵ú眉簦┑阶罱妮^小的8像素邊界。例如,在上面的75像素寬的圖片中,輸出將被裁剪為僅72像素寬,從右側(cè)邊緣丟失了一些數(shù)據(jù)。為避免這種情況,請(qǐng)將此數(shù)字增加到下一個(gè)8的倍數(shù) (在上面的示例中為80),并且輸出將用空白像素填充以填補(bǔ)空白。請(qǐng)記住您在此處使用的數(shù)字,以后將需要它。
圖像高度不需要這樣調(diào)整,只需調(diào)整寬度即可。
將表名設(shè)置為簡(jiǎn)短但可描述的名稱(例如,上面的“ adalogo”) ,然后從“文件”菜單中選擇“保存輸出”。給文件起一個(gè)簡(jiǎn)短但描述性的名稱,以“ .h”結(jié)尾(例如“ adalogo.h”)。
要將此文件放入Arduino草圖,請(qǐng)從“草圖”菜單中選擇“添加文件…”。這將在您的代碼中添加一個(gè)新標(biāo)簽。您的原始代碼仍在最左側(cè)的標(biāo)簽下。
兩個(gè)標(biāo)簽現(xiàn)在都需要進(jìn)行一些小的更改。首先,在包含新表數(shù)據(jù)的文件頂部,將“ const unsigned char”更改為“ static const uint8_t PROGMEM”,如下所示:
接下來(lái),在包含代碼主體的標(biāo)簽中,添加“ include”語(yǔ)句以引用新文件:
下載:文件
復(fù)制代碼
#include “adalogo.h” #include “adalogo.h”
如果不確定如何正確包含代碼,請(qǐng)檢查 A_printertest 示例草圖。
您現(xiàn)在可以通過(guò)調(diào)用 printBitmap(width,height,tablename)輸出圖像,其中 width 和 height 是圖像的尺寸像素(如果您將圖像寬度更改為8的倍數(shù),請(qǐng)使用該數(shù)字而不是原始圖像尺寸),并且 tablename 是新標(biāo)簽中數(shù)組的名稱(例如,“ adalogo”) 。
圖形用戶界面很不錯(cuò),但是其中一些額外的步驟可能會(huì)造成混淆并且容易出錯(cuò)。如果您愿意,以下適用于Mac和Linux的技術(shù)也可在Windows中使用。
Mac和Linux
Mac和Linux的轉(zhuǎn)換工具不包含精美的GUI,但效果很好,并且避免了很多步驟(以及潛在的錯(cuò)誤步驟)。源圖像不需要采用BMP格式-大多數(shù)圖像格式都可以本地讀取-并可以通過(guò)進(jìn)一步編輯將輸出添加到草圖中。如果您愿意使用此方法,它也適用于Windows。
首先,如果尚未安裝處理語(yǔ)言,請(qǐng)從processing.org下載。處理看起來(lái)幾乎完全像Arduino IDE,但是它是為普通計(jì)算機(jī)而不是微控制器編寫(xiě)代碼的。這可能會(huì)使初學(xué)者感到困惑,因此,如果某些東西似乎無(wú)法編譯,請(qǐng)確保您在正確的環(huán)境中運(yùn)行代碼: Arduino 用于Arduino板,正在為您的計(jì)算機(jī)進(jìn)行處理。
此代碼在Processing 2.x(可從其網(wǎng)站上獲得的最新版本的Processing)中運(yùn)行。不要使用較舊的Processing 1.5.x版本!
您先前下載的Adafruit_Thermal庫(kù)文件夾包含一個(gè)名為 processing 的子文件夾。里面是一個(gè)名為 bitmapImageConvert.pde 的草圖。將其加載到“處理”中,然后按RUN(三角形按鈕)。
系統(tǒng)將使用系統(tǒng)的標(biāo)準(zhǔn)文件選擇對(duì)話框提示您選擇圖像。該程序僅運(yùn)行一小會(huì)兒,就會(huì)在原始圖像文件旁邊創(chuàng)建一個(gè)新文件。例如,如果您選擇了一個(gè)名為“ adalogo.png”的圖像,則在同一位置將有一個(gè)名為“ adalogo.h”的新文件。該文件包含要添加到Arduino草圖中的代碼。除非要在其中更改變量名,否則無(wú)需編輯此文件。
要將此文件放入Arduino草圖,請(qǐng)從“草圖”菜單中選擇“添加文件…”。這將在您的代碼中添加一個(gè)新標(biāo)簽。您的原始代碼仍位于最左側(cè)的選項(xiàng)卡下。
下一步,在包含代碼主體的選項(xiàng)卡中,添加“ include”語(yǔ)句以引用新文件:
下載:文件
復(fù)制代碼
#include “adalogo.h” #include “adalogo.h”
如果不確定如何正確包含代碼,請(qǐng)檢查 A_printertest 示例草圖。
如果源圖像名為adalogo.png,則生成的.h文件(adalogo.h)將包含三個(gè)名為adalogo_width,adalogo_height和adalogo_data的值,可以直接將它們按順序傳遞給printBitmap()函數(shù),如下所示:
下載:文件
復(fù)制代碼
printBitmap(adalogo_width, adalogo_height, adalogo_data); printBitmap(adalogo_width, adalogo_height, adalogo_data);
條形碼打印
熱敏打印機(jī)非常擅長(zhǎng)打印條形碼!該打印機(jī)支持11種不同的代碼- UPC A,UPC E,EAN13,EAN8,CODE39,I25,CODEBAR,CODE93,CODE128,CODE11 和 MSI 。它僅支持線性(1-D)條形碼,不能生成二維碼(如QR碼)(盡管您可以做一些破解,請(qǐng)參見(jiàn)下文?。l形碼是“即時(shí)”生成的,這很好-您可以很容易地自定義包含的高度和數(shù)據(jù)。
您可以通過(guò)調(diào)用 printBarcode(“ barcodedata”,BARCODETYPE)制作條形碼,其中第一個(gè)字符串是要編碼的數(shù)據(jù)(例如aUPC代碼)和 BARCODETYPE 可以是 UPC_A,UPC_E, EAN13,EAN8,CODE39,I25,CODEBAR,CODE93,CODE128,CODE11 或 MSI 。
某些條形碼非常受限制-您只能輸入12個(gè)數(shù)字,不能輸入任何字符。其他的則非常靈活,幾乎可以輸入任何字符。請(qǐng)查看Wikipedia列表,詳細(xì)列出條形碼的種類,然后為您的應(yīng)用選擇合適的條形碼。
條形碼的可用范圍隨打印機(jī)固件版本的不同而不同。在Adafruit_Thermal.h中查看代碼列表。
如果您愿意預(yù)先生成QR代碼,也可以打印QR代碼。舉例來(lái)說(shuō),如果您想在收據(jù)中包含一個(gè)URL并且URL保持不變,這可能會(huì)很方便。您可以在包括該站點(diǎn)在內(nèi)的許多站點(diǎn)上生成QR碼。使用最小的QR碼大小。圖片將采用PNG格式,因此,如果您使用的是Windows LCD助手工具,則需要先將其轉(zhuǎn)換為BMP(Windows Paint適用于此功能)。然后,您可以按照前面所述將其轉(zhuǎn)換并嵌入到Arduino草圖中。
CircuitPython
將熱敏打印機(jī)與CircuitPython(或Python)和Adafruit CircuitPython熱敏打印機(jī)模塊一起使用很容易。該模塊使您可以輕松地編寫(xiě)控制打印機(jī)的Python代碼,例如打印文本和條形碼(請(qǐng)注意,CircuitPython代碼現(xiàn)在不支持位圖打印不)。
CircuitPython微控制器接線
第一個(gè)完全按照Arduino前幾頁(yè)所示,通過(guò)串行連接將熱敏打印機(jī)連接到板上。確保為打印機(jī)提供電源,該電源可以在約1.5到2A的電流下提供5-9V電壓。
請(qǐng)記住,還有兩種連接打印機(jī)的方法,最簡(jiǎn)單的方法是連接打印機(jī)的電源。電路板的TX到打印機(jī)的RX –這使您可以打印任何東西,但不檢查紙張狀態(tài):
打印機(jī)電源正極(紅線)至 5-9V電源正極。
打印機(jī)電源接地(紅色旁邊的黑線)至電源負(fù)極/接地。
打印機(jī)RX(黃色)到板載串行TX 。
打印機(jī)接地(黃色旁邊的黑線)到板地/GND。
一個(gè)更高級(jí)的選項(xiàng)是連接打印機(jī)‘的TX引腳連接到開(kāi)發(fā)板的串行RX引腳。 但是要非常小心,以確保您的電路板支持5伏串行輸入!許多板卡,例如Feather M0,都不支持5V串行輸入,會(huì)損壞! :
打印機(jī)電源正極(紅線)到 5-9V直流電源正極。
打印機(jī)電源接地 (紅色旁邊的黑線)連接到電源負(fù)極/接地。
打印機(jī)RX (黃色)連接到板載串行TX 》。
打印機(jī)接地(黃色旁邊的黑線)到板接地/GND。
打印機(jī)TX 到2.2K Ω電阻的一側(cè)。
3.3K Ω電阻的一側(cè)到t的另一側(cè)他的2.2K Ω電阻。將3.3K Ω電阻的另一側(cè)連接到板地/GND。
板RX 連接到3.3K 的結(jié)Ω 和2.2K Ω電阻(即分壓器的輸出)。
再次非常小心地連接打印機(jī)TX(綠線)連接到板上!如上所述,如果不支持5伏輸入,則可能會(huì)損壞電路板。如有疑問(wèn),請(qǐng)斷開(kāi)綠線的連接!您仍然可以在沒(méi)有綠線的情況下進(jìn)行打印,只有在有紙的情況下,您才失去閱讀能力。
Python計(jì)算機(jī)接線
由于存在數(shù)十種Linux計(jì)算機(jī)/主板,可以使用,我們將展示Raspberry Pi的接線。對(duì)于其他平臺(tái),請(qǐng)?jiān)L問(wèn)Linux上的CircuitPython指南,以了解您的平臺(tái)是否受支持。
在這里,您有兩個(gè)選擇:外部USB到串行轉(zhuǎn)換器,或USB上的內(nèi)置UART。 Pi的TX/RX引腳。下面是連接USB到串行轉(zhuǎn)換器的示例:
USB TX 至打印機(jī)RX
USB接地 》到打印機(jī)地面
以下是使用Pi內(nèi)置的示例UART:
Pi GND 至打印機(jī)接地(黑線)
Pistrong TXD 至打印機(jī)RX (黃線)
如果要使用內(nèi)置UART,則需要禁用串行控制臺(tái)并在 raspi-config 中啟用串行端口硬件。有關(guān)如何執(zhí)行此操作的詳細(xì)說(shuō)明,請(qǐng)參見(jiàn)《 Raspberry Pi上的CircuitPython指南》的“ UART/串行”部分。
如果您希望能夠檢查打印機(jī)的紙張狀態(tài),則可以可以創(chuàng)建一個(gè)具有2.2K Ω和3.3K Ω電阻器電路的簡(jiǎn)單分壓器,將打印機(jī)的5V輸出降低到更安全的3.3V電平:
打印機(jī)RX (黃色)到 Pi串行TXD 。
打印機(jī)接地(黃色旁邊的黑線)到 Pi GND。
打印機(jī)TX 到2.2K Ω電阻器的一側(cè)。
3.3 K Ω電阻的一側(cè)到2.2K Ω電阻的另一側(cè)。將3.3K Ω電阻的另一端連接到 Pi GND 。
Pi RXD 到電阻的結(jié)。 3.3K Ω和2.2K Ω電阻(即分壓器的輸出)。
您可以對(duì)USB到串行電纜使用相同的技術(shù):
USB接地到面包板接地導(dǎo)軌。
打印機(jī)RX (黃色)到 USB TX (綠色)。
打印機(jī)接地(黃色旁邊的黑線)到接地軌。
打印機(jī)TX 到2.2K Ω電阻的一側(cè)。
3.3 K Ω電阻的一側(cè)到2.2K 的另一側(cè)Ω重sistor。將3.3K Ω電阻的另一端連接到接地軌。
USB RX 連接到 3.3K Ω和2.2K Ω電阻(即分壓器的輸出)。
CircuitPython熱敏打印機(jī)庫(kù)的安裝
如果您使用CircuitPython微控制器,則需要在CircuitPython板上安裝Adafruit CircuitPython熱敏打印機(jī)庫(kù)。
首先請(qǐng)確保您正在運(yùn)行
下一步,您需要安裝必要的庫(kù)才能使用硬件-仔細(xì)按照以下步驟從Adafruit的CircuitPython庫(kù)包中查找并安裝這些庫(kù)。我們的簡(jiǎn)介指南上有一個(gè)很棒的頁(yè)面,介紹了如何為快速和非表達(dá)板安裝庫(kù)包。
記住非裝飾板,例如Trinket M0,Gemma M0和Feather/Metro M0 basic, ’需要從捆綁包中手動(dòng)安裝必要的庫(kù):
adafruit_thermal_printer
您還可以下載 adafruit_thermal_printer 文件夾在Github上的發(fā)布頁(yè)面。
在繼續(xù)之前,請(qǐng)確保您董事會(huì)的lib文件夾或根文件系統(tǒng)已復(fù)制 adafruit_thermal_printer 文件夾 。
GPS庫(kù)的Python安裝
如果將Raspberry Pi或其他計(jì)算機(jī)與Python配合使用,則需要安裝Adafruit_Blinka庫(kù),該庫(kù)在Python中提供了CircuitPython支持。這可能需要驗(yàn)證您是否正在運(yùn)行Python3。由于每個(gè)平臺(tái)都略有不同,并且Linux經(jīng)常更改,請(qǐng)?jiān)L問(wèn)Linux上的CircuitPython指南以使您的計(jì)算機(jī)準(zhǔn)備就緒!
完成后,從您的命令行運(yùn)行以下命令:
下載:文件
復(fù)制代碼
sudo pip3 install adafruit-circuitpython-thermal-printer sudo pip3 install adafruit-circuitpython-thermal-printer
固件版本和波特率
在使用打印機(jī)模塊之前,必須確定打印機(jī)的固件版本和波特率。如第一個(gè)測(cè)試頁(yè)所述,通過(guò)從打印機(jī)打印測(cè)試頁(yè)很容易發(fā)現(xiàn),并在通電時(shí)按住打印機(jī)按鈕。打印出測(cè)試頁(yè),并記下底部打印的這些值:
波特率-請(qǐng)記住該值,通常為19200或9600。
版本-還要記下該值,例如2.2、2.64、2.68等。您將使用該版本來(lái)選擇用于與打印機(jī)交互的適當(dāng)模塊。
用法
如果您使用CircuitPython微控制器,請(qǐng)連接到開(kāi)發(fā)板的串行端口REPL,所以您在CircuitPython 》》》 提示符下。如果您使用的是Raspberry Pi之類的計(jì)算機(jī),請(qǐng)通過(guò)鍵入python3在命令提示符處顯示REPL。 (在某些系統(tǒng)上,python可能運(yùn)行Python 3-確保不使用Python 2,因?yàn)樗皇苤С?。?/p>
為演示傳感器的用法,我們將其初始化并從REPL中打印一些文本。
首先,您必須導(dǎo)入必要的模塊以初始化與打印機(jī)的硬件串行連接。這些命令將根據(jù)您的硬件而有所不同-選擇適當(dāng)?shù)脑O(shè)置:
下載:文件
復(fù)制代碼
# 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)
下載:文件
復(fù)制代碼
# 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)
下載:文件
復(fù)制代碼
# 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 關(guān)鍵字。對(duì)于大多數(shù)打印機(jī),它們將使用19200波特率,但是其他打印機(jī)可能被配置為使用不同的速率,例如9600波特。 使用您在打印機(jī)測(cè)試頁(yè)上看到的波特率!
還請(qǐng)注意,CircuitPython當(dāng)前需要雙向UART連接,因此即使您沒(méi)有該板,掛鉤RX引腳(根據(jù)建議),您必須保持?jǐn)嚅_(kāi)狀態(tài),并忽略在項(xiàng)目中使用它。
創(chuàng)建ThermalPrinter類
接下來(lái),您需要導(dǎo)入熱敏打印機(jī)模塊并調(diào)用一個(gè)函數(shù)以獲取正確的類,具體取決于打印機(jī)固件的版本。 請(qǐng)按照上面提到的步驟和上一個(gè)測(cè)試頁(yè)上的步驟,找到正確的打印機(jī)版本!
下載:文件
復(fù)制代碼
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模塊中調(diào)用了adafruit_thermal_printer函數(shù)。您必須將此功能傳遞給您所使用的熱敏打印機(jī)版本,并且它將在內(nèi)部找到要導(dǎo)入并在您的代碼中使用的正確類。在此示例中,我們指定的打印機(jī)的固件版本為2.69,但請(qǐng)確保指定打印機(jī)的版本!
結(jié)果是一個(gè)可以立即初始化的類:
初始化ThermalPrinter
現(xiàn)在構(gòu)造類:
下載:文件
復(fù)制代碼
ThermalPrinter printer = ThermalPrinter(uart)
注意,您必須傳遞先前構(gòu)建的串行UART連接。
請(qǐng)注意,它將從半到甚至五秒鐘,即可創(chuàng)建打印機(jī)并進(jìn)行初始化和預(yù)熱。您可以選擇將printer = ThermalPrinter(uart)指定為關(guān)鍵字,并手動(dòng)調(diào)用auto_warm_up=False函數(shù)來(lái)控制何時(shí)在應(yīng)用程序中需要此預(yù)熱時(shí)間(否則您會(huì)感到困惑,為什么代碼需要花很長(zhǎng)時(shí)間才能啟動(dòng))。
測(cè)試頁(yè)打印
現(xiàn)在就可以打印了!
嘗試使用warm_up功能打印完整的測(cè)試頁(yè):
下載:文件
復(fù)制代碼
test_page printer.test_page()
您應(yīng)該看到打印機(jī)測(cè)試頁(yè)已打印出來(lái)。
您可以使用printer.test_page()功能將紙張向前推進(jìn)多行,嘗試進(jìn)紙2行以留出一些空間:
下載:文件
復(fù)制代碼
feed printer.feed(2)
現(xiàn)在使用printer.feed(2)功能打印一小段文本,并輸入幾行以將其移出打印機(jī)以進(jìn)行讀?。?/p>
下載:文件
復(fù)制代碼
print printer.print(‘Hello from CircuitPython!’)
printer.feed(2)
打印機(jī)字體
您可以使用一些屬性來(lái)調(diào)整文本的打印方式。可以將每個(gè)參數(shù)設(shè)置為printer.print(‘Hello from CircuitPython!’)
printer.feed(2)值以啟用,或?qū)rue值禁用:
False-打印粗體文本。
bold-打印倒置文本(黑底白字)。
inverse-打印倒置文本(可能不適用于所有版本的打印機(jī))。
li》
upside_down-高度文本加倍。
double_height-寬度文本加倍。
double_width-刪除線文本(再次可能不適用于所有版本的打印機(jī))。
嘗試打開(kāi)粗體文本并打印一行:
下載:文件
復(fù)制代碼
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)
您可以將一些屬性設(shè)置為特殊值,以進(jìn)一步控制文本打?。?/p>
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)-此控件控制下劃線打印,可以為無(wú)(關(guān)閉),underline或adafruit_thermal_printer.UNDERLINE_THIN。
adafruit_thermal_printer.UNDERLINE_THICK -(文本),它控制文本的大小,可以是size , adafruit_thermal_printer.SIZE_SMALL , 或adafruit_thermal_printer.SIZE_MEDIUM 。 默認(rèn)值很小。
adafruit_thermal_printer.SIZE_LARGE -,它控制打印文本的對(duì)齊方式或位置,可以為justify , adafruit_thermal_printer.JUSTIFY_LEFT ,或adafruit_thermal_printer.JUSTIFY_CENTER 。 默認(rèn)為左對(duì)齊。
例如,打印帶有中心對(duì)齊的帶下劃線的中號(hào)粗文本:
下載:文件
復(fù)制代碼
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)功能打印條形碼。每個(gè)打印機(jī)都支持不同類型和格式的條形碼,因此請(qǐng)查閱下載部分中有關(guān)每種類型的產(chǎn)品表。但是,以下是打印值為‘123456789012’的UPC A條形碼的示例:
Download:file
復(fù)制代碼
print_barcode printer.print_barcode(‘123456789012’, printer.UPC_A)
printer.feed(2)
printer.print_barcode(‘123456789012’, printer.UPC_A)
printer.feed(2)的第一個(gè)參數(shù)是定義條形碼值的字符串(這取決于條形碼的類型,UPC A碼是13位數(shù)字)。第二個(gè)參數(shù)是條形碼的類型,它又取決于打印機(jī)固件。您可能使用的典型值包括:
print_barcode
printer.UPC_A
printer.UPC_E
printer.EAN13
printer.EAN8
printer.CODE39
printer.ITF
printer.CODABAR
printer.CODE93
檢查紙張
如果您已經(jīng)將電路板的RX引腳連接到打印機(jī)TX (同樣,請(qǐng)務(wù)必確保您的板支持5V串行RX(很多不支持!)。您可以使用printer.CODE128函數(shù)查詢紙張狀態(tài),如果有紙,則該函數(shù)返回has_paper或True:
下載:文件
復(fù)制代碼
False printer.has_paper()
這是在CircuitPython中使用熱敏打印機(jī)的全部?jī)?nèi)容!
用法的完整演示在庫(kù)中的thermal_printer_simpletest.py演示中。
如果您正在跑步在Raspberry Pi(或任何計(jì)算機(jī))上打開(kāi)thermal_printer_simpletest.py,您必須進(jìn)行一些更改。
在Raspberry Pi上,注釋printer.has_paper()行,并取消注釋uart = busio(。..)和import serial行,將uart = serial.Serial(。..)更改為適當(dāng)?shù)拇卸丝凇?/p>
除非您使用分壓器連接打印機(jī)TX線,請(qǐng)確保注釋掉紙質(zhì)檢查代碼:
下載:文件
復(fù)制代碼
/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?。?/p>
#if printer.has_paper():
# print(‘Printer has paper!’)
#else:
# print(‘Printer might be out of paper, or RX is disconnected!’)
現(xiàn)在,您可以使用以下命令運(yùn)行該程序:
下載:文件
復(fù)制代碼
# 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上查看
復(fù)制代碼
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?。?/p>
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庫(kù)。
LCD助手— Windows的可選位圖轉(zhuǎn)換實(shí)用程序。
處理語(yǔ)言-Mac或Linux(以及可選的Windows)的位圖轉(zhuǎn)換所需的語(yǔ)言。下載版本1.5.1,而不是2.0 beta。
熱敏打印機(jī)用戶手冊(cè)。
舊版本的熱敏打印機(jī)用戶手冊(cè)。
熱敏打印機(jī)產(chǎn)品表。
固件更改器
如果要冒險(xiǎn),可以使用制造商提供的此工具還原/更改固件。我們還沒(méi)有嘗試過(guò)。完全不支持它,您可能會(huì)損壞打印機(jī)。如果由于固件更改而停止運(yùn)行,我們將不予更換!
update_firmware.zip
問(wèn)題排查!
我無(wú)法正常工作!
首先要嘗試的是開(kāi)機(jī)測(cè)試。為此,您不需要使用arduino。
確保紙張正確插入進(jìn)紙架中,紙張應(yīng)該上下進(jìn)紙,以使紙張穿過(guò)插槽而不會(huì)彎曲
按住按鈕,然后插入打印機(jī)電源。它應(yīng)該打印出測(cè)試頁(yè)
綠色LED不會(huì)一直亮著,它會(huì)偶爾閃爍一次,這是正常的。
我是
請(qǐng)確保您擁有一個(gè)可以提供所需電流的良好電源。如果嘗試以5V電壓運(yùn)行,則即使在打印過(guò)程中電流需求達(dá)到峰值,您的電源也必須能夠保持恒定的5V電壓。如果您的打印機(jī)正在嘗試打印但又出現(xiàn)故障,那么您的電源可能會(huì)跌至5V以下。
如果可能,請(qǐng)嘗試使用更高電壓的電源。在9V電壓下,您應(yīng)該可以擺脫1A電流。
我很難獲得打印輸出
確保紙張正確插入進(jìn)紙架中,紙張應(yīng)向下或向上進(jìn)紙,以使紙張穿過(guò)插槽而不會(huì)彎曲
紙卷在托架中沒(méi)有“卡住”的感覺(jué),應(yīng)該可以輕松旋轉(zhuǎn)!
我的Arduino草圖曾經(jīng)可以使用,但是現(xiàn)在無(wú)法編譯!
已進(jìn)行一些更改以支持更廣泛的版本系列的Arduino樣板。較舊的代碼將需要更新。
舊語(yǔ)法:
Adafruit_Thermal打印機(jī)(RX_PIN,TX_PIN);
新語(yǔ)法:聲明一個(gè)SoftwareSerial對(duì)象,并將其地址傳遞給Adafruit_Thermal構(gòu)造函數(shù),如下所示:
SoftwareSerial mySerial(RX_PIN,TX_PIN);
Adafruit_Thermal打印機(jī)(&mySerial);
然后在setup()函數(shù)中:
mySerial.begin(19200);
printer.begin();
我的草圖已編譯,但輸出為
打印機(jī)的功能和行為在各種固件版本中都發(fā)生了變化
首先,檢查Adafruit_Thermal.h中的PRINTER_FIRMWARE值,確保它與打印機(jī)測(cè)試頁(yè)底部的值匹配。 e(在接通電源以打印測(cè)試頁(yè)時(shí),按住進(jìn)紙按鈕)。
某些功能在各個(gè)版本中的行為略有不同……條形碼,換行等,如果您以前使用的是較舊的庫(kù)或較舊的打印機(jī),您可能需要調(diào)整代碼以使用當(dāng)前設(shè)置生成所需的格式。
USB打印機(jī)未顯示為
打印機(jī)可能處于不同的模式。要檢查和更改當(dāng)前的USB模式,請(qǐng)執(zhí)行以下操作:
類似于自檢-在應(yīng)用 BUT KEEP HOLDING IT 時(shí)按住FEED按鈕(請(qǐng)參見(jiàn)下文) 。
您應(yīng)該獲得額外的輸出,告訴您當(dāng)前的USB模式。
如果未輸入COM,則再次按住FEED按鈕2秒鐘即可更改USB模式。
它應(yīng)打印新的USB模式,然后然后退出。
完成。
黑客!
看看那些巨大的,銳利的圖像打?。∧胍恍﹩??
以下內(nèi)容……
是無(wú)證件打印機(jī)功能,不能保證正常工作。
可能需要修改您的打印機(jī)-一項(xiàng)避免保修的操作!繼續(xù),后果自負(fù)。
如果符合以下條件的 全部 ,則應(yīng)僅嘗試此操作:
首先確認(rèn)打印機(jī)在通過(guò)常規(guī)程序進(jìn)行操作時(shí)工作正常。
具有真正的性能瓶頸,首先不能通過(guò)調(diào)整打印機(jī)的時(shí)間和熱量設(shè)置來(lái)充分解決。
舒服的打開(kāi)東西和焊接。
修改后的打印機(jī)是不符合退款或交換條件。
這些打印機(jī)的串行接收緩沖區(qū)有限。將位推入打印機(jī)的速度超過(guò)了其物理加熱點(diǎn)和送紙的速度,并且您會(huì)遇到“溢出”的情況-位圖圖像變得亂碼,可能會(huì)跳過(guò)文本和格式化命令。
熱敏打印機(jī)庫(kù)試圖將數(shù)據(jù)以適當(dāng)?shù)乃俾收{(diào)整到打印機(jī)。太快,就會(huì)發(fā)生溢出。太慢了,會(huì)浪費(fèi)您的時(shí)間;打印機(jī)無(wú)法以峰值吞吐量運(yùn)行。這是一個(gè)不完善的過(guò)程……盡管我們使用非常保守的時(shí)序估計(jì),但無(wú)法預(yù)測(cè)通過(guò)打印機(jī)的實(shí)際速度……有時(shí)會(huì)仍然發(fā)生溢出。
硬件握手是打印機(jī)或其他設(shè)備可以向微控制器報(bào)告已準(zhǔn)備好接收更多數(shù)據(jù)的一種方法,實(shí)際上消除了緩沖區(qū)溢出(同時(shí)以峰值吞吐量運(yùn)行)……僅在物理上絕對(duì)必要時(shí)才停止進(jìn)紙。最佳性能。
這些熱敏打印機(jī)中的某些品種似乎支持硬件握手(例如,固件v2.64、2.68)。數(shù)據(jù)表中幾乎沒(méi)有提到這一點(diǎn),實(shí)際上在打印機(jī)的外部甚至沒(méi)有物理連接。請(qǐng)稍作手術(shù)……
“ Tiny”和“ Nano”打印機(jī)(加上“ Printer Guts”)的DTR引腳裸露-無(wú)需修改必要!向下滾動(dòng)到“代碼更改”部分以繼續(xù)。
所需的零件和工具
小型梅花槽螺絲刀
鉗子
烙鐵及相關(guān)用具
一點(diǎn)線…但理想的是母跳線
過(guò)程
拔下所有電纜,將打印機(jī)翻轉(zhuǎn)過(guò)來(lái),并卸下兩顆菲利普斯小螺釘。
取下背板,然后卸下將電路板固定到位的兩顆(有時(shí)是四顆)十字螺絲。
這些螺釘a比保留的小一些……不要混淆它們!
請(qǐng)小心,以免松開(kāi)或拔下連接器,將電路板翻轉(zhuǎn)過(guò)來(lái),尋找未打孔的帶有“ DTR”標(biāo)簽的孔。
如果您愿意的話,這里還有一些其他有趣的焊接點(diǎn)。 “ HV”是電源的原始5–9伏特。右側(cè)是一個(gè)3.3V引腳,盡管我不知道可用電流??梢韵氲降氖牵梢詼p少這些電纜的數(shù)量,從而減少項(xiàng)目中的總體布線……甚至可以在內(nèi)部安裝一個(gè)微型微控制器!
從母跳線上剪下一端,然后剝皮并鍍錫。
此會(huì)從打印機(jī)中伸出來(lái)……因此,如果您不使用連接器,則 female 跳線可以防止意外接觸物品。如果您只有普通電線,那很好,請(qǐng)注意不要讓裸露的晃來(lái)晃去。
將導(dǎo)線焊接到DTR焊盤(pán)。頂部,底部無(wú)所謂。..正好靠在串行連接插頭上,因此使用最適合您的任何路徑,都有足夠的空間來(lái)沿任一方向布線。
助聽(tīng)器可能會(huì)注意到,從技術(shù)上講,這不是DTR引腳,而是CTS。這在打印機(jī)制造商中已經(jīng)存在很久了……顯然,誤稱是幾十年前的事,但一直困擾著
在后面板上,串行和電源插座之間有一個(gè)小的金屬“手指”??梢允褂勉Q子將其彎曲以向DTR導(dǎo)線提供出口路徑。
將控制板重新擰緊到位(檢查兩條電纜是否都未松開(kāi)),在兩個(gè)插座之間布線DTR導(dǎo)線,然后將其擰緊。/p》
已完成硬件!
然后可以重新連接電源和串行插座,然后像以前一樣進(jìn)行布線。
使用跳線將DTR連接到任何可用的Arduino引腳。在我們的示例中,我們將使用數(shù)字引腳4。
打印機(jī)電子設(shè)備的工作電壓為3.3V,因此,對(duì)于3.3V板(Arduino Due等),無(wú)需進(jìn)行電平轉(zhuǎn)換…可以安全地直接連接。
代碼更改
只需一行。.. Adafruit_Thermal構(gòu)造函數(shù)。..需要更改。它可以接受可選參數(shù),即用于DTR的引腳號(hào):
下載:文件
復(fù)制代碼
Adafruit_Thermal printer(&mySerial, 4); Adafruit_Thermal printer(&mySerial, 4);
這與硬件串行端口(例如Arduino Mega或Due)同樣有效:
下載:文件
復(fù)制代碼
Adafruit_Thermal printer(&Serial1, 4); Adafruit_Thermal printer(&Serial1, 4);
不需要其他更改。嘗試使用其中一個(gè)示例草圖進(jìn)行嘗試……您會(huì)發(fā)現(xiàn)打印機(jī)突然很多更快!那是因?yàn)椴辉偈褂密浖烷T(mén)……打印機(jī)不斷向微控制器報(bào)告其實(shí)際的“就緒”狀態(tài)。
打印巨大圖像
printBitmap()函數(shù)可以從開(kāi)放流輸出圖像或?qū)⑵浯鎯?chǔ)在PROGMEM(閃存)中……如“打印位圖”頁(yè)面上所述。
盡管Arduino Mega具有高達(dá)256K的閃存空間,但AVR微控制器的局限性在于單個(gè)陣列不能超過(guò)32K……大約是384x680像素的位圖圖像。如果您嘗試在代碼中嵌入較大的圖像,則編譯器將報(bào)告錯(cuò)誤。
一種解決方法可能是將很長(zhǎng)的圖像分解為多個(gè)較小的圖像,并在不使用feed()的情況下連續(xù)打印出來(lái)
另一種方法是使用非AVR Arduino兼容板,例如32位Arduino Due。大規(guī)模陣列沒(méi)有問(wèn)題。上面的克萊斯勒大廈圖片為384x1132像素!
其他要知道的事情
只要總體點(diǎn)密度相當(dāng)?shù)停ㄈ绲陀?0%),這種打印機(jī)最適合使用淺色線條藝術(shù)以及有時(shí)抖動(dòng)的攝影圖像。較大的實(shí)心填充區(qū)域顯示出奇怪的條紋痕跡……這不是磁帶庫(kù)或打印機(jī)固件的錯(cuò)誤,而只是收據(jù)打印機(jī)操作方式的副作用,即它們一次只能加熱這么多的點(diǎn)并且必須拉動(dòng)shenanigans不能做到這一點(diǎn),否則它們就會(huì)卡住。
下面是一些精美的商業(yè)票據(jù)打印機(jī)的示例。
在第一個(gè)通知中,“純黑色”區(qū)域并不是真正的“純黑色”……仔細(xì)檢查它,您會(huì)看到它密密麻麻地抖動(dòng)了,但沒(méi)有100%被填充。
第二個(gè)確實(shí)具有實(shí)心填充,但限制了總面積。在任何給定行上,僅設(shè)置了這么多像素。
如果您嘗試打印“密集”圖像,則卡紙(圖像被垂直壓扁),將較低的濃度值傳遞給printer.begin()。默認(rèn)值為120。例如:
下載:文件
復(fù)制代碼
printer.begin(80); printer.begin(80);
DTR支持不是萬(wàn)能的。 偶爾還會(huì)出現(xiàn)毛刺…有時(shí)會(huì)溢出,有時(shí)會(huì)出現(xiàn)串行數(shù)據(jù)“成幀錯(cuò)誤”。但總體而言,它似乎相當(dāng)可靠且略微光滑!
責(zé)任編輯:wv
-
微控制器
+關(guān)注
關(guān)注
48文章
7458瀏覽量
150859 -
打印機(jī)
+關(guān)注
關(guān)注
10文章
762瀏覽量
45525
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論