在linux下調試串口程序,無奈下面的硬件還沒到位,所以,想着自己模擬一個串口用用。試了下下面這段代碼:
#!/usr/bin/env python #coding=utf-8 import pty import os import select def mkpty(): #Open a new tty master1, slave = pty.openpty() slaveName1 = os.ttyname(slave) master2, slave = pty.openpty() slaveName2 = os.ttyname(slave) print '\nslave device names:', slaveName1, slaveName2 return master1, master2 if __name__ == "__main__": master1, master2 = mkpty() while True: # rl=read list, wait until ready to reading # wl=write list, wait until ready to writing # el=exception list, wait for an "exceptional condition" # timeout = 1s rl, wl, el = select.select([master1, master2], [], [], 1) for device in rl: data = os.read(device, 128) print "read %d data."%len(data) if device == master1: os.write(master2, data) else: os.write(master1, data)
pty是假串口的意思,但是支持硬件串口的所有操作。so。。。
另外一個,模擬同事通過串口發來的數據。所有寫到master的數據,都被自動的發往slave。所以,我們在slave這邊就可以收到想要的數據。
#!/usr/bin/env python #coding=utf-8 import pty import os import time import array import random def mkpty(): #make pair of pseudo tty master, slave = pty.openpty() slaveName = os.ttyname(slave) print '\nslave device names:', slaveName return master if __name__ == "__main__": master = mkpty() buf = array.array('B', [0] * 7) buf[0] = 0x00 buf[1] = 0x02 buf[2] = 0x8a buf[3] = 0x2d buf[4] = 0xc5 buf[5] = 0x3f buf[6] = 0x00 while True: if buf[1] < 40: buf[1] = buf[1] + 1 else: buf[1] = 1 buf[0] = buf[0] + 1 if buf[0] == 255: buf[0] = 0 # buf[5] = random.randint(40,50) buf[2] = random.randint(0,250) buf[6] = ( buf[0]+buf[1]+buf[2]+buf[3]+buf[4]+buf[5]) %256 os.write(master, buf) # print buf time.sleep(0.02)