让爱普生收据打印机从Arduino打印

时间:2009-03-02 16:41:32

标签: embedded serial-port arduino epson

我正在尝试使用Arduino和Epson TM-T88II收据/ POS打印机构建微型打印机。打印机使用Epson Esc/POS系统,但我无法从Arduino中做任何事情。我正在做的事情:

#include <SoftwareSerial.h>

#define out_pin 3
#define in_pin 2
SoftwareSerial printer =  SoftwareSerial(in_pin, out_pin);

void setup()
{
    pinMode(in_pin, INPUT);
    pinMode(out_pin, OUTPUT);
    printer.begin(9600);

    delay(1000);

    printer.print(0x1B, BYTE);
    printer.print('@'); // ESC(HEX 1B) @ is supposed to initialize the printer
    printer.print("hello world");
    printer.print(0xA, BYTE); // print buffer and line feed
}

我根本无法让打印机做出回应。打印机启动并打印自检就好了。它是一个串行(RS-232)打印机,我通过MAX233芯片将它连接到Arduino。我已经通过芯片检查并重新检查了我的连接,我认为这是基于一个有类似设置工作的朋友。我在某处看到TM-T88打印机需要零调制解调器串行电缆,所以我买了一个适配器,这似乎没什么区别。

我是电子新手,所以我完全难过了。我只是想让它打印出来,所以我可以进入有趣的部分 - 编程:)。有关测试/尝试的事情的任何想法?我可以提供有关布线或其他任何内容的更多细节,只是不想让它太长。

4 个答案:

答案 0 :(得分:3)

您使用的是RS-232收发器吗? Arduino输出0和5 V用于串行,而打印机使用-12和12 V用于串行。您应该使用MAX232或类似设备来获取正确的物理接口。 (如果你反转Arduino上的串口,你可能会作弊,但这可能不起作用,而且刚入门时就更麻烦了。)

一旦处理完毕,RTS和DTR可能就是您的问题。您应该能够更改打印机上的DIP开关设置并完全关闭流量控制,或将其切换到软件流控制。

此外,您可能需要同时发送换行和回车。

然而,一旦完成所有这一切,它应该打印得很好,即使没有任何重置命令。发送一堆ASCII字符和换行符/回车符,它会全部吐出来。

你现在可以忽略RX线(在Arduino一侧,打印机一侧的TX) - 只需发送数据,直到找出接线,电平转换,流量控制等。

答案 1 :(得分:1)

您可以检查是否可以通过Arduino和打印机与PC通信。

我会使用示波器来查看串行信号是否来自Arduino和MAX,但是你可能没有。

您确定通讯设置正确吗?您将波特率设置为9600,但数据位,奇偶校验,停止位呢?控制线怎么样?

答案 2 :(得分:1)

我将另一台PC而不是打印机连接到串行电缆的另一端,并在该系统上运行telnet或PuTTY,以确保您正在通过串口进行通信并实际通话。如果是这样,您可以使用相同的解决方案将数据发送到打印机以确认所有设置,如数据位数,奇偶校验等。

答案 3 :(得分:1)

我做过类似的项目并遇到了同样的问题。您需要一个零调制解调器/交叉电缆从max232到打印机,因为两个设备都处于从属配置