pythonを使用してstm 32シリアルポートをテストする
本文は在下の個人ブログblogに先発した.keysking.com
この間、あるプロジェクトがあって、stm 32で比較的に大きくて、比較的重い設備と頻繁なシリアル通信を行います.設備が移動するのが不便なので、スクリプトを書きたいです.設備の代わりに、stm 32の通信ロジックをテストします.
次のコードがあります.
主な役割はcsvファイルに存在する多くの身分証明書情報を取り出し、stm 32側からシリアルポートを介して要求情報(ackData)が送信されると、ランダムに5~15個の身分証明書情報を取り出し、一定のデータフォーマットでstm 32に送信することである.
この間、あるプロジェクトがあって、stm 32で比較的に大きくて、比較的重い設備と頻繁なシリアル通信を行います.設備が移動するのが不便なので、スクリプトを書きたいです.設備の代わりに、stm 32の通信ロジックをテストします.
次のコードがあります.
# coding=utf-8
import serial
import threading
import csv
import random
identitys_csv = csv.reader(open('./identitys.csv','r'))
# identitys_csv = csv.reader(open('./identitys_less.csv','r'))
identitys = list()
ser = serial.Serial("COM13",9600)
askData = bytes([0xA0, 0x0D, 0x01, 0x8A, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x03, 0x01, 0x00, 0x0A, 0xB4])
def receiveFunc():
print("--------------- --------------")
serData = bytes()
while len(identitys) != 0:
if ser.inWaiting() > 0 :
out = ser.read(1)
serData += out
if len(serData) == 15:
if serData == askData:
print("------------- ------------")
num = random.randint(5,15)
if num > len(identitys):
num = len(identitys)
print("-------------- "+str(num)+" ------------")
for identity in identitys[0:num]:
print(identity)
identityFormatData = transToFormat(identity)
ser.write(identityFormatData)
for i in identityFormatData:
print('0x%02x'%i,end=' ')
print("")
del identitys[0:num]
else:
print("------------ -----------")
for i in out:
print('0x%02x'%i,end=' ')
print("")
serData = bytes()
print("--------------- --------------")
def transToFormat(identity):
if identity[-1] == "X":
identity = identity.replace("X",":")
formatData = bytes([0xA0,0x13,0x01,0x8A,0x00,0x00,0x00])
for i in range(len(identity)//2):
temp = ((identity[2*i].encode('utf-8')[0] - 0x30) << 4) + (identity[2*i+1].encode('utf-8')[0] - 0x30)
formatData += bytes([temp])
formatData += bytes([0x00,0x00,0x00,0x00])
checkSum = 0
for i in formatData:
checkSum += i
checkSum = checkSum & 0x00FF
checkSum = 0x100 - checkSum
if checkSum == 256:
checkSum = 0
formatData += bytes([checkSum])
return formatData
if __name__== '__main__':
print("--------- --------")
for i in identitys_csv:
identitys.append(i[0])
print("--------- "+str(len(identitys))+" --------")
receiveThread = threading.Thread(target=receiveFunc,name="receive")
receiveThread.start()
主な役割はcsvファイルに存在する多くの身分証明書情報を取り出し、stm 32側からシリアルポートを介して要求情報(ackData)が送信されると、ランダムに5~15個の身分証明書情報を取り出し、一定のデータフォーマットでstm 32に送信することである.