python串口模块找不到_有没有python的串口库

本文介绍了如何使用Python的pyserial模块进行串口通信,包括设置波特率、打开和关闭串口、定时发送数据、读取数据等操作,并提供了Windows下设备名的注意事项和一个完整的串口收发示例。
摘要由CSDN通过智能技术生成

展开全部

串口模块的波特率比较32313133353236313431303231363533e4b893e5b19e31333363396463特别,找了几个串口工具都不支持。。。所以,干脆用python自己来写了,其实已经好奇好久了,别人的工具各种不顺手。

需要pyserial的支持,兼容各种平台,不需要新编译二进制文件。

先贴一个定时发送的代码:

import serialimport time

ser = serial.Serial('/dev/ttyUSB0', 250000, timeout=1)print ser.isOpen()

words="gggggggggggggggg"while (1):        print "send 256x\""+words+"\" to remotes"

startTime = time.time()

times = 256        while (times):

times -= 1

s = ser.write(words)

endTime = time.time()        print "use time: "+str(endTime-startTime)        print ""

time.sleep(5)

ser.close()

然后是一些其它的方法:

1. 使用序号打开串口:ser = serial.Serial(0) 。but,怎么确定串口的序号???

2. 查看串口的名称,啊哈,用1的方法打开串口后,你可以产看串口的名字:print ser.portstr

3. 先例化一个实体,再打开:

>>> ser = serial.Serial()>>> ser.baudrate = 19200

>>> ser.port = 0>>> ser

Serial(port='COM1', baudrate=19200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0)>>> ser.open()>>> ser.isOpen()

True>>> ser.close()>>> ser.isOpen()

False

好多人问 windows 下面提示设备不存在!亲,windows 下面的串口设备名不一样的啊,上面的代码里面 COM1 就是 windows 下面的设备。

4. 读取数据的几种方式

>>> ser = serial.Serial('/dev/ttyS1', 19200, timeout=1)>>> x = ser.read()          # read one byte>>> s = ser.read(10)        # read up to ten bytes (timeout)>>> line = ser.readline()   # read a '/n' terminated line>>> ser.close()

其中,如果只是串口调试,直接ser.read(1000),这样会把读到的值直接打印到屏幕上。

5.所有参数

ser = serial.Serial(

port=None,              # number of device, numbering starts at# zero. if everything fails, the user# can specify a device string, note# that this isn't portable anymore# if no port is specified an unconfigured# an closed serial port object is createdbaudrate=9600,          # baud ratebytesize=EIGHTBITS,     # number of databitsparity=PARITY_NONE,     # enable parity checkingstopbits=STOPBITS_ONE,  # number of stopbitstimeout=None,           # set a timeout value, None for waiting foreverxonxoff=0,              # enable software flow controlrtscts=0,               # enable RTS/CTS flow controlinterCharTimeout=None   # Inter-character timeout, None to disable)

6. exception:serial.SerialException

另一个完整收发的例子,单片机数据以TLV(Type,Length,Value)格式发上来

#!/usr/bin/env python

# it's a program of luo, piedgogo@sina.com

import serialimport arrayimport osimport signalfrom time import sleep

flag_stop = Falsedef onsignal_int(a,b):    print "sigint!"

global flag_stop

flag_stop = True

signal.signal(signal.SIGINT, onsignal_int)

signal.signal(signal.SIGTERM, onsignal_int)

ser = serial.Serial('/dev/ttyUSB0', 9600, timeout = 0.001)print "serial.isOpen() =",ser.isOpen()

cmd_send = "7b02000129cc00c80378290400640000cc7d0d0a"cmd_send = cmd_send.decode("hex")

stop = "7b04047d0d0a"stop = stop.decode("hex")

cmd_back = ""cmd_length = 0x00cmd_count = 0x00s = ser.write(cmd_send)while True:

sleep(0.1)

if flag_stop:                # read data until Ctrl+c

ser.write(stop)            # send cmd stop before exit

print "reset cmd has been sent!"

sleep(0.05)        break

text = ser.read(1)          # read one, with timout

if text:                    # check if not timeout

n = ser.inWaiting()     # look if there is more to read

if n:

text = text + ser.read(n) #get it

cmd_back = cmd_back + text

text = ""

if len(cmd_back) < 2:        # go back if no enough data recvd

continue

if cmd_length == 0x00:                        # new loop

cmd_length = ord(cmd_back[1])            # Type(1 byte),Length of Value(1 byte),Value

print "new cmd length,",cmd_length

if (cmd_length + 0x02) > len(cmd_back):        # do nothing until all bytes is recvd

continue

# so far, we have got a full cmd

hex_list = [hex(ord(i)) for i in cmd_back]    # more readable than data.encode("hex")

print "In buffer:",hex_list

cmd_back = cmd_back[cmd_length+2:]            # remove this cmd(TLV) from buffer

cmd_length = 0

cmd_count += 1

print "==> %d cmds recvd."%(cmd_count)    print "-------------"

ser.close()

——————

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值