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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章