【Python】使用串口发送txt文件的数据

实现效果: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()  

效果如显示,

虽然没有特别详细的知识表述,不过考虑到现在电脑随时可能坏或者丢失,把学习记录放在网上让我觉得更安心。

对了,想起来,如果是Python3.0,要作出很多改变,比如将line用decode解码为Unicode,再用encode编码为gb2312,

ser.write(line.decode('utf8').encode('gb2312'))

,才能被打印机识别,2.7反倒不用,不知道是进步还是退步了。

 

 

 

 

猜你喜欢

转载自blog.csdn.net/bfz_50/article/details/81974907