概述
使用這款非常可愛的熱敏打印機將微型打印機添加到任何微控制器項目中。也就是收據打印機,它們就是您在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
-
微控制器
+關注
關注
48文章
7489瀏覽量
151047 -
打印機
+關注
關注
10文章
762瀏覽量
45579
發布評論請先 登錄
相關推薦
評論