Orange_Pi_PC启用UART1并连接打印机测试

依次进入armbian-config --> System --> Hardware 选中 uart1 并确认重启。
成功启用后可以在 /boot/armbianEvn.txt 中查看
overlays=uart1
uart1对应系统中的/dev/ttyS1

测试设备“歌翼EH400”
测试环境:Armbian Debian Linux
测试套件:Python3 + pyserial3.4
File_name: my_printer.py

#!/usr/bin/env python3
# encoding: utf-8

import serial,binascii

class my_printer:
    def __init__(self,serial_number,baudrate,timeout):
        self.serial_number = serial_number
        self.baudrate = baudrate
        self.timeout = timeout
        self.printer = self.__ready()

        def __ready(self):
        try:
            ser = serial.Serial(port=self.serial_number, 
                                baudrate=self.baudrate, 
                                timeout=self.timeout)
            if ser.isOpen():
                return ser
            else:
                ser.open()
                return ser
        except:
            print('printer connect fail')

    def printer_test(self):
        self.printer.flushInput()
        self.printer.flushOutput()
        self.printer.write(b'\x1B\x40\x12\x54')

    # 将字符串转换成十六进制格式
    def __str_to_hex(self,source_str):
        # 获取字符串长度
        str_len = len(source_str)
        # 将byte格式强制转换成字符串,截取b''中间的字符串
        source_str = str(binascii.b2a_hex(source_str.encode('GB2312')))[2:-1]
        rev = []
        start_flag = 0
        while str_len:
            # 字符转成十六进制后会占用2个字符,所以每两个字符对应原字符串的单个字符
            rev.append(source_str[start_flag:start_flag+2])
            str_len -= 1
            start_flag += 2
        # 返回 ['xx','xx']格式的列表,再转换成'xx xx'格式的字符串
        return ' '.join(rev)

    # 打印机基本指令格式
    # 1B 40   //初始化打印机
    #
    # 1B 33 10  //设定行高距离10  行距范围10,20,30,40,50,60
    # 1B 33 20
    # 1B 33 30
    # 1B 33 40
    # 1B 33 50
    # 1B 33 60
    #
    # 1D 21 00   //正常字体大小
    # 1D 21 11   //字体放大一倍
    # 1D 21 10   //字体宽度放大一倍
    # 1D 21 01   //字体高度放大一倍
    #
    # 1B 61 00    //文本左对齐
    # 1B 61 01    //文本居中对齐
    # 1B 61 02    //文本右对齐
    #
    # BB B6 D3 AD B9 E2 C1 D9   //文本打印内容“欢迎光临”
    #
    # 0D 0A  结束符,也可当换行使用

    # 将需要打印的字符串转换为十六进制的指令格式
    def printer_text_format(self,str):
        # 设置自己需要的格式
        f_1 = '1B 40'
        f_2 = '1B 33 10'
        f_3 = '1D 21 00'
        f_4 = '1D 21 00'
        f_5 = '1B 61 00'
        f_6 = '{}'.format(self.__str_to_hex(source_str=str))
        f_7 = '0D 0A'
        # 将设置好的格式数据转成单个字符串
        full_data = ' '.join([f_1,f_2,f_3,f_4,f_5,f_6,f_7])
        self.printer.write(bytes.fromhex(full_data))


if __name__ == '__main__':
    test_p = my_printer('/dev/ttyS1',9600,1)
    # 打印测试页
    test_p.printer_test()
    test_p.printer_text_format('hello,lalalalalbabab')

如果在Linux下测试,请使用sudo python3 my_printer.py
如果朋友有更好的解决方案,麻烦告知一下。谢谢哈

你可能感兴趣的:(Orange_Pi_PC启用UART1并连接打印机测试)