实现效果:Python端发送txt文件里的数据
串口助手显示接收到的数据
操作步骤如下:
1、先安装Python的串口库pyserial,安装方法有很多种,以下的适用我的win10 64位。
将你电脑安装的Python程序目录放入系统的path路径
点击
https://pypi.python.org/packages/source/p/pyserial/pyserial-2.7.tar.gz#md5=794506184df83ef2290de0d18803dd11
下载,
然后随便解压到某个目录下,
在这个目录下按shift+右键空白处可以直接调出cmd,
然后在命令行输入
python setup.py install
至此pyserial安装完毕。
2、由于不想拍打印机的打印效果,也考虑到读者不一定有打印机,所以我们用虚拟的串口工具短接一下,能接到数据显示就可以了。
下载串口虚拟软件
安装完成后把Cracked文件夹里的vspdconfig.exe和vspdctl.dll复制到安装目录后就可完成汉化破解。
打开
尝试发送普通数据没问题,发送没问题,尝试发送txt,代码如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import serial
#打开串口
serialPort="COM2" #串口
baudRate=9600 #波特率
ser=serial.Serial(serialPort,baudRate,timeout=0.5)
print "参数设置:串口=%s ,波特率=%d"%(serialPort,baudRate)
CMD = open('./60mmx70mm的模板.txt')
print ("CMD:%s" % (CMD))
line = CMD.readline();
#收发数据
while line:
#str = raw_input("请输入要发送的数据(非中文)并同时接收数据: ")
#ser.write((str+'\n').encode())
#print(ser.readline())#可以接收中文
ser.write(line)
print (line)
line=CMD.readline()
ser.close()
但是出现错误提示
IOError: [Errno 22] invalid mode ('r') or filename
确认已经将60mmx70mm的模板.txt文件放入该目录下,百度说该原因是文件权限问题,尝试如下改进
CMD = open('.//60mmx70mm的模板.txt')
还是同样提示
考虑到文件中包含中文,所以需要增加
# -*- coding: cp936 -*- #2.7版本带中文需要加该语句否则无法打印
该语句应该很关键,一定要在utf-8之前,完整代码如下
#!/usr/bin/env python
# -*- coding: cp936 -*- #2.7版本带中文需要加该语句否则无法打印
# -*- coding: utf-8 -*-
import serial
#打开串口
serialPort="COM2" #串口
baudRate=9600 #波特率
ser=serial.Serial(serialPort,baudRate,timeout=0.5)
print "参数设置:串口=%s ,波特率=%d"%(serialPort,baudRate)
CMD = open('.//60mmx70mm的模板.txt')
print ("CMD:%s" % (CMD))
line = CMD.readline();
#收发数据
while line:
#str = raw_input("请输入要发送的数据(非中文)并同时接收数据: ")
#ser.write((str+'\n').encode())
#print(ser.readline())#可以接收中文
ser.write(line)
print (line)
line=CMD.readline()
ser.close()
效果如显示,
2019年08月28日补充:
如果是Python3.0,要作出很多改变,比如需要将文件指定编码格式来获取字符串,发送时再用encode编码为gb2312的byte,如下:
```python
CMD = open('模板.txt', encoding='utf-8')
ser.write(line.encode('gb2312'))
```
这样才能被打印机识别,2.7反倒不用,虽然2.7便利些,但在一些打印机字符需要指定特定编码格式时它是无力的。
2019年08月26日补充:
txt文件编码格式要先解码,易混淆,推荐直接在代码中写打印指令
printCommand = [
'SIZE 70 mm,40 mm',
'GAP 3 mm,0',
'SPEED 5',
'DENSITY 5',
'DIRECTION 1',
'CLS',
'……',
'PRINT 3,1'
]
print("可将输出作为txt文件提供给开发:\r\n")
for i in printCommand:
print(i + "\r\n")
# 每条指令后面都要有\r\n
ser.write((i + "\r\n").encode('gb18030'))