Orange_Pi_PC启用UART1并连接打印机测试
2018-12-11 本文已影响0人
Milotic
依次进入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
如果朋友有更好的解决方案,麻烦告知一下。谢谢哈