美文网首页
Orange_Pi_PC启用UART1并连接打印机测试

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

作者: Milotic | 来源:发表于2018-12-11 23:30 被阅读0次

    依次进入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并连接打印机测试

          本文链接:https://www.haomeiwen.com/subject/mdmyhqtx.html