中華製サーマルプリンター(eM5820)をURATで動かしてみた
public.icon
inoue2002 数年前に興味本位で購入したものの使い方がわからなかったサーマルプリンター 今回電子工作系ハッカソンに出てメンバーにUARTを教えてもらったので使いこなせるようになった。
https://i.gyazo.com/22ef77570af958296419dcc6574e0c62.gif
背景
https://gyazo.com/c946ed7401ec5e20f621bcdd3e7ac4db
興味本位で2022年に買ったけど、全く使い方がわからず放置していた
次の日、ふと思い立ってプリンターをいじってみたら無事動かすことに成功
このプリンターの型番はEM5820
全く同じ製品でなくてもいろんな奮闘記は世の中に転がってる
結論、公式docがわかりやすすぎた
テスト印刷はボタンを押しながら電源に接続して数秒待つと自動で印刷される
https://gyazo.com/c14c744451d2aa9a5c54fbf6f4e8bda8
電源は電池ではなくコンセントから9Vで給電している
9V電池では印刷できなかった。
TXとRXは通常入れ子で繋ぐか、この製品はTX同士、RX同士で接続する
このへんを見れば大体書いてある
code:index.urno
SoftwareSerial mySerial(rxPin, txPin);
Adafruit_Thermal printer(&mySerial);
void setup() {
// Define pin modes for TX and RX
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
mySerial.begin(9600);
pinMode(LED_PIN, OUTPUT);
for (int i = 0; i < 3; i++) {
digitalWrite(LED_PIN, HIGH);
delay(50);
digitalWrite(LED_PIN, LOW);
delay(100);
}
Serial.begin(115200);
Serial.println(F("SPRESENSE ESP8266 Demo"));
// Initialize printer
printer.begin(); // Init printer
// Sample 3 code integration
printer.justify('C');
printer.boldOn();
printer.println(F("BARCODE EXAMPLES\n"));
printer.boldOff();
printer.justify('L');
// There seems to be some conflict between datasheet descriptions
// of barcode formats and reality. Try Wikipedia and/or:
// Also note that strings passed to printBarcode() are always normal
// RAM-resident strings; PROGMEM strings (e.g. F("123")) are NOT used.
// UPC-A: 12 digits
printer.print(F("UPC-A:"));
printer.printBarcode("123456789012", UPC_A);
// EAN-13: 13 digits (same as JAN-13)
printer.print(F("EAN-13:"));
printer.printBarcode("1234567890123", EAN13);
// EAN-8: 8 digits (same as JAN-8)
printer.print(F("EAN-8:"));
printer.printBarcode("12345678", EAN8);
// CODE 39: variable length w/checksum?, 0-9,A-Z,space,$%+-./:
printer.print(F("CODE 39:"));
printer.printBarcode("ADAFRUT", CODE39);
// ITF: 2-254 digits (# digits always multiple of 2)
printer.print(F("ITF:"));
printer.printBarcode("1234567890", ITF);
// CODABAR: variable length 0-9,A-D,%+-./:
printer.print(F("CODABAR:"));
printer.printBarcode("1234567890", CODABAR);
// CODE 93: compressed version of Code 39?
printer.print(F("CODE 93:"));
printer.printBarcode("ADAFRUIT", CODE93);
// CODE 128: 2-255 characters (ASCII 0-127)
printer.print(F("CODE128:"));
printer.printBarcode("Adafruit", CODE128);
printer.feed(2);
printer.setDefault(); // Restore printer to defaults
}
void loop() {
Serial.print("try");
const char *msg = "hello world!!\n \n";
int retryCount = 0;
const int maxRetries = 3;
bool success = false;
while (retryCount < maxRetries && !success) {
if (mySerial.write(msg) == strlen(msg)) {
success = true;
} else {
Serial.print(F("Error writing to SoftwareSerial, attempt "));
Serial.println(retryCount + 1);
retryCount++;
delay(100); // Retry delay
}
}
if (!success) {
Serial.println(F("Failed to write to SoftwareSerial after maximum retries"));
}
delay(1000); // Adjust the delay as needed
}
hello world
code:index.uno
現在のコードは以下です。これはプリンターのコードです。
読んで理解したら了解と送信してください。
// Set up a new SoftwareSerial object
SoftwareSerial mySerial(rxPin, txPin);
void setup() {
// Define pin modes for TX and RX
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
mySerial.begin(9600);
pinMode(LED_PIN, OUTPUT);
for (int i = 0; i < 3; i++) {
digitalWrite(LED_PIN, HIGH);
delay(50);
digitalWrite(LED_PIN, LOW);
delay(100);
}
Serial.begin(115200);
Serial.println(F("SPRESENSE ESP8266 Demo"));
}
void loop() {
Serial.print("try");
const char *msg = "hello world!!\n \n";
int retryCount = 0;
const int maxRetries = 3;
bool success = false;
while (retryCount < maxRetries && !success) {
if (mySerial.write(msg) == strlen(msg)) {
success = true;
} else {
Serial.print(F("Error writing to SoftwareSerial, attempt "));
Serial.println(retryCount + 1);
retryCount++;
delay(100); // Retry delay
}
}
if (!success) {
Serial.println(F("Failed to write to SoftwareSerial after maximum retries"));
}
delay(1000); // Adjust the delay as needed
}
配線記録用
https://gyazo.com/3f47320ca7195d49897f0f16e066759f
https://gyazo.com/9c09e7afc5ffcd814abd670ad2e1a710