【Python】python2.7使用串口发送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()  

效果如显示,

 

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'))

 

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值