专栏首页python3python serial读串口

python serial读串口

由于项目需求,需要从传感器节点和GPS中读取数据,所以学习了如何用python读串口。

python提供了pySerial,Linux和windows下有相应的模块

linux版本: pyserial (http://pyserial.wiki.sourceforge.net/pySerial)   (在我的虚拟机中Ubuntu 12.04 LTS 版本中好像已经自带) windows版本: pywin32 (http://sourceforge.net/projects/pywin32/) 下载直接安装

先看一个例子:

import serial
ser = serial.Serial('/dev/ttyTX0', 9600, timeout=1)
while True:
    data = ser.read(100)
    print repr(data)

1、读串口步骤:

实例化 --> 设置 (当然可以一步完成)

2、serial详解

2.1 serial类原型

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 created baudrate=9600,          # baud rate bytesize=EIGHTBITS,     # number of databits parity=PARITY_NONE,     # enable parity checking stopbits=STOPBITS_ONE,  # number of stopbits timeout=None,           # set a timeout value, None for waiting forever

                              #zero, non-blocking mode, return immediately on read 

xonxoff=0,              # enable software flow control rtscts=0,               # enable RTS/CTS flow control interCharTimeout=None   # Inter-character timeout, None to disable )

注;Port可以用数字表示。COM1为 0,COM2为1 .......

也可以实用绝对路径:ser.port = '/dev/ttySAc2' 

timeout说明(None和 0不同):

timeout = None: 长时间等待

timeout = 0: 不阻塞形式 (读完之后就返回)

timeout = x: x秒后超时 (float allowed)

2.2 Serial方法:

open()                  # open port close()                 # close port immediately setBaudrate(baudrate)   # change baud rate on an open port inWaiting()             # return the number of chars in the receive buffer read(size=1)            # read "size" characters write(s)                # write the string s to the port flushInput()            # flush input buffer, discarding all it's contents flushOutput()           # flush output buffer, abort output sendBreak()             # send break condition setRTS(level=1)         # set RTS line to specified logic level setDTR(level=1)         # set DTR line to specified logic level getCTS()                # return the state of the CTS line getDSR()                # return the state of the DSR line getRI()                 # return the state of the RI line getCD()                 # return the state of the CD line

2.3 Serial 实例属性

portstr                 # device name BAUDRATES               # list of valid baudrates BYTESIZES               # list of valid byte sizes PARITIES                # list of valid parities STOPBITS                # list of valid stop bit widths

以下属性可以改变,即使在端口打开时也可以重新赋值

port                    # port name/number as set by the user baudrate                # current baud rate setting bytesize                # byte size in bits parity                  # parity setting stopbits                # stop bit with (1,2) timeout                 # timeout setting xonxoff                 # if Xon/Xoff flow control is enabled rtscts                  # if hardware flow control is enabled

3.简单实例

import serial
ser = serial.Serial()
def hexShow(argv):
    result = ''
    hLen = len(argv)
    for i in xrange(hLen):
        hvol = ord(argv[i])
        hhex = '%02x'%hvol
        result += hhex+' '
        print 'hexShow:',result
ser.baudrate = 57600
ser.port = '/dev/ttySAC2'

ser.open()
readstr = ser.read(20)
print ser.portstr
hexShow(readstr)

执行结果如图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Appium Python API 中文

    2. current_context current_context(self):

    py3study
  • python note #1

    To record my process of studying python and to practice my English meanwhile, I'...

    py3study
  • python的Pattern模块

    Pattern is a web mining module for the Python programming language.

    py3study
  • 8.26 讲座 | Mathematica 软件包 FeynCalc 在量子场论应用中的最新功能

    FeynCalc (https://feyncalc.github.io/)是用于符号量子场理论(QFT)计算的流行的 Mathematica 工具包。最近发布...

    WolframChina
  • maven settings.xml 包含多个镜像库

    Java学习123
  • 剖析nsq消息队列(四) 消息的负载处理

    实际应用中,一部分服务集群可能会同时订阅同一个topic,并且处于同一个channel下。当nsqd有消息需要发送给订阅客户端去处理时,发给哪个客户端是需要考...

    lpxxn
  • 如何在Ubuntu 18.04上使用PostgreSQL 10设置逻辑复制

    在为生产设置应用程序时,准备好多个数据库副本通常很有用。保持数据库副本同步的过程称为复制。复制可以为大量同时读取操作提供高可用性水平扩展,同时减少读取延迟。它还...

    葡萄
  • C++核心准则R.12:立即将显式分配的资源交给资源管理对象​

    If you don't, an exception or a return may lead to a leak.

    面向对象思考
  • 打断别人会有好结果吗?插播广告对消费者支付意愿的影响(CS CY)

    我们展示了一项研究的结果,该研究旨在衡量插播广告对消费者购买该广告品牌的产品意愿的影响。在一项对照实验中,研究人员让受试者玩一款电脑游戏,并在途中插播了一些广告...

    奥斯特洛夫斯萌
  • 无人机无线数据采集路径规划:一种深度强化学习方法(CS)

    自主部署支持下一代通信网络的无人机需要有效的轨迹规划方法。我们提出了一种新的端到端强化学习(RL)方法,用于在城市环境中从物联网(IoT)设备收集无人机支持的数...

    DDDDDaemon

扫码关注云+社区

领取腾讯云代金券