tyxiayu 发表于 2015-12-1 14:56:28

用python虚拟串口

  在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(, [], [], 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', * 7)
buf = 0x00
buf = 0x02
buf = 0x8a
buf = 0x2d
buf = 0xc5
buf = 0x3f
buf = 0x00
while True:
if buf < 40:
buf = buf + 1
else:
buf = 1
buf = buf + 1
if buf == 255:
buf = 0
#      buf = random.randint(40,50)
buf = random.randint(0,250)
buf = ( buf+buf+buf+buf+buf+buf) %256
os.write(master,buf)
#      print buf
time.sleep(0.02)      
  
页: [1]
查看完整版本: 用python虚拟串口