Содержание
Обзор термопринтера Adafruit
Термопринтер Adafruit (рис. 1) - позволяет печатать текст (включая русский), штрих-коды и изображения на чековых лентах из термальной бумаги стандартной ширины 57 мм и диаметром рулона до 36 мм. Способ печати заключается в использовании специальной накалённой головки, которая буквально выжигает текст на бумаге. Температура головки доходит до 200 градусов Цельсия. В местах воздействия бумага темнеет и получается необходимый текст.
Рисунок. 1
Работает принтер от постоянного напряжения 5 – 9 В. Подключается принтер по протоколу UART.
Рисунок. 2
Для проверки принтера необходимо нажать кнопку тестирования, расположенную на нижней стороне принтера, на печать будут выведены его характеристики:
Рисунок. 3
- не горит – выключен;
- мигает – включен;
- горит – спящий режим.
Технические характеристики
- Напряжение питания: 5-9 В;
- Потребляемый ток: до 1,5 А (в режиме печати), до 10 мА (в режиме ожидания);
- Интерфейс: TTL UART;
- Метод печати: прямая термическая печать;
- Режимы печати: печать текста, штрих-кодов, растровые изображения
- Тип бумаги: термальная;
- Ширина бумаги: 57 мм;
- Диаметр рулона: 36 мм;
- Скорость печати: до 80 мм/с;
- Ширина печати: 48 мм;
- Размер пикселя: 1/8 мм;
- Разрешение печати: 203DPI (8 точек на мм = 384 точек на линию);
- Таблицы символов: ASCII, набор GB2312-80;
- Набор GB2312-80 включает следующие таблицы: CP437, KATAKANA, CP850, CP860, CP863, CP865, WCP1251, CP866, MIK, CP755, IRAN, CP862, WCP1252, WCP1253, CP852, CP858, IRAN2, LATVIAN, CP864, ISO_8859_1, CP737, WCP1257, THAI, CP720, CP855, CP857, WCP1250, CP775, WCP1254, WCP1255, WCP1256, WCP1258, ISO_8859-..., ISO_8859-5, THAI2, CP856, CP874;
- Форматы штрих-кодов: UPC_A, UPC_E, EAN13, EAN8, CODE39, CODE93, ITF, CODABAR и CODE128;
- Рабочая температура: +5...+45 °С;
- Температура хранения: -20...+60 °С;
- Габариты:111x65x59 мм.
Нужны ардуино модули?Купить arduino модули можно в нашем магазине 3DIY
Подключение к Arduino
Рисунок. 4
Загрузим на плату Arduino скетч из листинга 1 для вывода всех символов кодировки CP866 (поддержка кириллицы).
Листинг 1.
// подключение библиотек #include "Adafruit_Thermal.h" #include "SoftwareSerial.h" // создание экземпляров объектов SoftwareSerial thPrSerial(5, 6); Adafruit_Thermal thPr(&thPrSerial); void setup() { // запуск Software порта thPrSerial.begin(19200); // Initialize SoftwareSerial thPr.begin(); // установка таблицы кодировки thPr.setCodePage(CODEPAGE_CP866); // распечатка таблицы thPr.println(F(" 01234567 89ABCDEF")); for(int i=0; i<16; i++) { thPr.print(F(" ")); thPr.print(i, HEX); thPr.print(F("- ")); for(int j=0; j<16; j++) { int c = (i << 4) | j; if(c < 32) c = ' '; thPr.write(c); if(j == 7) thPr.print(F(" ")); } thPr.println(); } // Restore printer to defaults printer.setDefault(); } void loop() { }
Рисунок. 5
Пример использования
- Плата Arduino – 1;
- Плата прототипирования – 1;
- Термопринтер – 1;
- Блок питания 5В 2А – 1;
- Кнопка – 1;
- Резистор 10 кОм – 1;
- Провода.
Рисунок. 6
uint8_t i=0, j=0;
while(str[i]){
if(uint8_t(str[i]) == 0xD0 && uint8_t(str[i+1]) >= 0x90 &&
uint8_t(str[i+1]) <= 0xBF ) {
str[j] = (uint8_t) str[i+1]-0x10; i++;
}
// Символы А-Я а-п
else if (uint8_t(str[i]) == 0xD1 && uint8_t(str[i+1]) >= 0x80 &&
uint8_t(str[i+1]) <= 0x8F ){
str[j] = (uint8_t) str[i+1]+0x60; i++;
}
// Символы р-я (
else if (uint8_t(str[i]) == 0xD0 && uint8_t(str[i+1]) == 0x81) {
str[j] = 0xF0;i++;}
// Символ Ё
else if (uint8_t(str[i]) == 0xD1 && uint8_t(str[i+1]) == 0x91) {
str[j] = 0xF1;i++;}
// Символ ё
else {
str[j] = (uint8_t) str[i];
}
j++; i++;
// Остальные символы оставляем как есть
} while(j<i){str[j]=0; j++;}
return str;
}
Листинг 2.
// подключение библиотек #include "Adafruit_Thermal.h" #include "SoftwareSerial.h" // создание экземпляров объектов SoftwareSerial thPrSerial(5, 6); Adafruit_Thermal thPr(&thPrSerial); // кнопка печати #define PIN_BUTTON_PRINT 9 // для кнопки int lastButtons1=0; int currentButtons1=0; boolean onPrint=false; // идет печать // количество цитат для вывода #define COUNT_QUOTES 17 // строки для вывода char* str0=" Дорогою свободной иди, \r\n куда влечет тебя свободный ум. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str1=" Буря, кажется, успокоилась; \r\n осмеливаюсь выглянуть \r\n из моего гнезда. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str2=" В вопросе счастья я атеист; \r\n я не верю в него. \r\n – Александр Пушкин \r\n \r\n \r\n "; char* str3=" Вдохновение - это умение \r\n приводить себя \r\n в рабочее состояние. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str4=" Глаголом жги сердца людей. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str5=" Глупость человека оказывается \r\n или из его действий, \r\n или из его слов. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str6=" Действие человека мгновенно \r\n и одно; \r\n действие книги множественно \r\n и повсеместно. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str7=" Истинное воображение требует \r\n гениального знания. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str8=" Каждый человек любит, \r\n ненавидит, печалится, \r\n радуется, - но каждый на свой лад. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str9=" Когда на что решусь, \r\n уж я не отступаю. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str10=" Много у меня начато, \r\n ничего не кончено. \r\n Сижу у моря, \r\n жду перемены погоды. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str11=" Мысли могут быть \r\n разнообразны до бесконечности. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str12=" На этом свете все \r\n зависит от случая. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str13=" Стихов, ради Бога стихов! \r\n Душа просит. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str14=" Точность - вежливость поваров. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str15=" Чтение - вот лучшее учение! \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str16=" Я не стану больше торопиться; \r\n пусть все идет своим чередом. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* str17=" Жизнь мимолетна. \r\n И все уплывает вместе с временем. \r\n - Александр Пушкин \r\n \r\n \r\n "; char* strerror1=" ОШИБКА ВЫВОДА ЦИТАТЫ. \r\n \r\n \r\n "; void setup() { Serial.begin(9600); thPrSerial.begin(19200); // Initialize SoftwareSerial thPr.begin(); // Init printer (same regardless of serial type) thPr.setDefault(); // Restore printer to defaults thPr.println(" \r\n "); thPr.sleep(); // Tell printer to sleep delay(3000); // Sleep for 3 seconds } void loop() { // проверка нажатия кнопки currentButtons1 = debounce(lastButtons1, PIN_BUTTON_PRINT); // если нажатие и не идет печать if (lastButtons1 == 0 && currentButtons1 == 1 && onPrint==false) { Serial.println("button click"); // изменить состояние реле onPrint=true; // выбор случайной цитаты int random_quote=millis()%COUNT_QUOTES; Serial.print("random_quote="); Serial.println(random_quote); thPr.wake(); // MUST wake() before printing again, even if reset // настройки по умолчанию thPr.setDefault(); thPr.println(" \r\n "); delay(100); // выбор кодовой страницы printer.setCodePage(CODEPAGE_CP866); // печать цитаты thPr.print(RUS(choice_quote(random_quote))); thPr.setDefault(); // thPr.sleep(); // Tell printer to sleep } lastButtons1 = currentButtons1; onPrint=false; } // проверка на дребезг int debounce(int last,int pin1) { int current = digitalRead(pin1); if (last != current) { delay(5); current = digitalRead(pin1); return current; } } // выбор цитаты char* choice_quote(int pos) { switch(pos) { case 0: return str0; break; case 1: return str1; break; case 2: return str2; break; case 3: return str3; break; case 4: return str4; break; case 5: return str5; break; case 6: return str6; break; case 7: return str7; break; case 8: return str8; break; case 9: return str9; break; case 10: return str10; break; case 11: return str11; break; case 12: return str12; break; case 13: return str13; break; case 14: return str14; break; case 15: return str15; break; case 16: return str16; break; case 17: return str17; break; default: return strerror1; break; } }
Рисунок 7. Схема в сборе
Часто задаваемые вопросы
Проверьте подключение принтера к блоку питания.
2. Принтер не печатает.
- Проверьте подключение принтера к блоку питания.
- Проверьте правильность подключения принтера к контроллеру.
- Проверьте мощность блока питания (должно быть не меньше 2А).