精华内容
下载资源
问答
  • 2020-12-05 06:36:43

    2015-04-02 回答

    python非常适合写一些测试的脚本,如快速的串口通信测试等。如果使用vc++ qt开发,可能用时较多,使用python,如果掌握使用方法,可以直接读写测试,配合设备或是串口助手,很快验证与实现。

    python有没有现成的串口api直接调用呢?经过实践验证,需要安装一个叫 pyserial的组件即可。这个可以在github上下载。

    在windows 7 64bit 上可以使用吗?当然可以使用,我安装的python3.5为64位的。把下载后的文件,其中有一个serial的文件夹,拷贝到python35安装路径, c:\python35\lib\site-packages\serial

    网上可以搜一下windows的安装包,安装完也是:c:\python35\lib\site-packages\serial ,可以用最新的版本,替换即可。

    测试的方法:在python ide里测试:

    >>> import serial

    这里如果报错,是python版本与pyserial版本没有配合好。如果正常,不返回,即可以导入serial模块。

    >>> ser=serial.serial("com5",115200)

    这里为com5,115200的波特率。如果打不开,请检查安装环境。

    >>> ser.write('hello,serial test'.encode())

    17

    发送测试(如果返回字节数,说明返回成功),这里需要转换一个编码为字节。

    以上测试,可以使用现在的设备或是串口助手,如安装virtual serial port driver 7.2 虚拟串口软件,设置一对串口,进行自发自收的测试。

    >>> print(ser.readline())

    b'abcdefg\r\n'

    这里是串口接收,有接收的超时。设备或是串口助手发送一个字符串,以回车换行结束,这里就可以收到打印出来。

    也可以用ser.read(),这里只接收一个字符来实现。

    上面已经实现了基本的串口操作。

    关闭串口为:

    >>> ser.close()

    如果使用python,一般写个py文件,就像windows bat 批处理一样,这是python强大的地方。如果写一个py脚本呢?其实只要把上面的命令,一条条写下来,就是一个脚本,测试如下:

    import serialser=serial.serial("com5",115200,timeout=0.5)for i in range(0,100-1):ser.write('hello\r\n'.encode())print(ser.readline());ser.close()

    更多相关内容
  • 1、需要模块以及测试工具模块名:pyserial使用命令下载:python -m pip install pyserial串口调试工具:sscom5.13.1.exe2、导入模块import serial3、打开串口直接通过new一个Serial()的实例即可打开返回实例# ...

    1、需要模块以及测试工具

    模块名:pyserial

    使用命令下载:python -m pip install pyserial

    串口调试工具:sscom5.13.1.exe

    2、导入模块

    import serial

    3、打开串口

    直接通过new一个Serial()的实例即可打开

    返回实例

    # encoding=utf-8

    import serial

    if __name__ == '__main__':

    com = serial.Serial('COM3', 115200)

    print com

    运行结果

    Serial(port='COM3', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)

    4、发送数据

    函数名write()

    返回值为发送成功的字节数

    # encoding=utf-8

    import serial

    if __name__ == '__main__':

    com = serial.Serial('COM3', 115200)

    success_bytes = com.write('This is data for test')

    print success_bytes

    运行结果

    21

    串口工具界面

    5、接收数据(接收固定长度数据)

    函数名为read(size=1)

    接收size单位的字符,是阻塞的,不接收到就一直等待接收,除非设置了超时时间(未设置该示例)

    # encoding=utf-8

    import serial

    if __name__ == '__main__':

    com = serial.Serial('COM3', 115200)

    data = com.read(10)

    print data

    运行结果

    123456789a

    串口工具界面

    6、接收数据(超时时间内一直接收)

    函数名为read(size=1)

    参数为接收的长度,默认为1,一般传入inWaiting(),它表示监测接收的字符串长度

    配合While可以一直接收

    # encoding=utf-8

    import serial

    import time

    if __name__ == '__main__':

    com = serial.Serial('COM3', 115200)

    over_time = 30

    start_time = time.time()

    while True:

    end_time = time.time()

    if end_time - start_time < over_time:

    data = com.read(com.inWaiting())

    data = str(data)

    if data != '':

    print data

    运行结果

    111

    222

    aaa

    bbb

    1a2b3c4d

    串口工具界面

    7、封装为类

    # -*- encoding=utf-8 -*-

    import serial

    import time

    import WriteLog

    class COM:

    def __init__(self, port, baud):

    self.port = port

    self.baud = int(baud)

    self.open_com = None

    self.log = WriteLog.WriteLog('ITC_LOG.LOG')

    self.get_data_flag = True

    self.real_time_data = ''

    # return real time data form com

    def get_real_time_data(self):

    return self.real_time_data

    def clear_real_time_data(self):

    self.real_time_data = ''

    # set flag to receive data or not

    def set_get_data_flag(self, get_data_flag):

    self.get_data_flag = get_data_flag

    def open(self):

    try:

    self.open_com = serial.Serial(self.port, self.baud)

    except Exception as e:

    self.log.error('Open com fail:{}/{}'.format(self.port, self.baud))

    self.log.error('Exception:{}'.format(e))

    def close(self):

    if self.open_com is not None and self.open_com.isOpen:

    self.open_com.close()

    def send_data(self, data):

    if self.open_com is None:

    self.open()

    success_bytes = self.open_com.write(data.encode('UTF-8'))

    return success_bytes

    def get_data(self, over_time=30):

    all_data = ''

    if self.open_com is None:

    self.open()

    start_time = time.time()

    while True:

    end_time = time.time()

    if end_time - start_time < over_time and self.get_data_flag:

    data = self.open_com.read(self.open_com.inWaiting())

    # data = self.open_com.read() # read 1 size

    data = str(data)

    if data != '':

    self.log.info('Get data is:{}'.format(data))

    all_data = all_data + data

    print data

    self.real_time_data = all_data

    else:

    self.set_get_data_flag(True)

    break

    return all_data

    if __name__ == '__main__':

    pass

    com = COM('com3', 115200)

    # com.open()

    print com.send_data('data')

    com.get_data(50)

    com.close()

    8、对于一次函数说明(百度看到,并未测试)

    readall():读取全部字符,是阻塞的,除非接收的字符串以EOF结尾或者超出缓冲区,否则函数不会返回。一般要结合超时设置,设置串口的timeout参数

    Readline():读取一行,以/n结束,要是没有/n就一直读,阻塞。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持python博客。

    展开全文
  • python控制串口

    2021-04-19 22:35:31
    ctrl(com, bps,parity_,stopbits_,bytesize_): #print(__file__, sys._getframe().f_lineno, port_, bitrate_, var.get()) global ser, button_var if button_var.get() == "打开串口": button_var.set("关闭串口") ...
    1. 获取电脑中所有的串口号的函数
    serial_com = serialPortFile.GetCom()
    # 获取并存储串口号到数组
    def GetCom():
        port_list = list(serial.tools.list_ports.comports())
        #通过serial.tools.list_ports.comports()获取所有的串口号之后进行了一步转换,存在一个数组中
        #这样,传入serial中才能被识别
        print(len(port_list))
        portcnt = len(port_list)
        serial_com = []
        for m in range(portcnt):
            port_list_1 = list(port_list[m])
            serial_com.append(port_list_1[0])
            #serialPortFile.GetCom()是获取所有串口号的函数
        return serial_com
    
    1. 串口打开关闭函数,串口打开之后创建了一个线程threading,线程中一直监视串口的状态,一旦接受到数据,就把数据显示到接受数据显示框中。
    def usart_ctrl(com, bps,parity_,stopbits_,bytesize_):
        #print(__file__, sys._getframe().f_lineno, port_, bitrate_, var.get())
        global ser, button_var
        if button_var.get() == "打开串口":
            button_var.set("关闭串口")
            ser = serial.Serial(
                port=com,
                baudrate=int(bps),
                parity=parity_,
                timeout=0.2,
                stopbits=float(stopbits_),
                bytesize=int(bytesize_))
            if ser.is_open:
                pass
            else:
                ser.open()
            recv_data = threading.Thread(target=thread_recv)
            recv_data.start()
        else:
            button_var.set("打开串口")
            if ser.is_open:
                ser.close()
            else:
                pass
    
    展开全文
  • python调用串口,写入数据 #!/usr/bin/python3 import serial def serialTest(): try: port = "COM3" bps = 115200 timeO = 5 ser = serial.Serial(port, bps, timeout = timeO) result = ser.write("python ...
  • python串口读写源代码程序+详细注释 简单的python串口读写介绍 ser serial Serial 0 是打开第一个串口 print ser portstr 能看到第一个串口的标识 windows...ser close 就是关闭ser表示的串口 ser open 会打开这个串口
  • python--禁用、启用串口设备

    千次阅读 2022-01-26 12:02:02
    python禁用并使能串口设备 最近在做一个设备,需要用到单片机的USB虚拟串口,并不是用的CH340之类的转换芯片,而是用的MCU的USB接口与电脑相连。 在调试的过程中,由于要不断的复位和上电,电脑上的串口就总是处于不...

    python–禁用、启用串口设备

    最近的项目,由于通讯数据量较大,将会尝试高速的传输(1MBps),决定采用单片机的USB虚拟串口。并不是用的CH340之类的转换芯片,而是用的MCU的USB接口与电脑相连。

    在调试的过程中,由于要不断的复位和上电,电脑上的串口就总是处于不可用的状态,必须将端口禁用,再启用,才能正常工作。而MCU一旦复位,电脑上又得重来一遍。所以就想着将这个动作集成到我的上位机软件中。

    获得设备ID

    手动获取可以通过设备管理器,在相应设备上右击,设备属性–详细信息–设备实例路径,USB\VID开头的一整串字符就是ID了。
    自动获取的代码如下:

    def get_dev_id(dev="COM1"):
        wmi = win32com.client.GetObject("winmgmts:")
        for usb in wmi.InstancesOf("Win32_SerialPort"):
            if True:
                if usb.DeviceID == dev:
                    print("\r\n设备信息:", usb.DeviceID, usb.Name, usb.PNPDeviceID)
                    return usb.PNPDeviceID
        return None
    

    禁用和启用设备

    这个简单,调用pnputil即可,以管理员方式运行CMD,并运行
    pnputil /disable-device “USB\VID_0483&PID_5740\3251386A3038”
    pnputil /enable-device “USB\VID_0483&PID_5740\3251386A3038”

    os.system("pnputil /disable-device \"USB\\VID_0483&PID_5740\\3251386A3038\"")
    os.system("pnputil /enable-device \"USB\VID_0483&PID_5740\\3251386A3038\"")
    
    

    获取管理员权限

    集成到python中时,就需要先获取管理员权限,
    ctypes.windll.shell32.IsUserAnAdmin()

    完整代码如下

    import ctypes
    import os
    import win32com.client
    
    
    # 获取串口的ID
    def get_dev_id(dev="COM1"):
        wmi = win32com.client.GetObject("winmgmts:")
        for usb in wmi.InstancesOf("Win32_SerialPort"):
            if True:
                if usb.DeviceID == dev:
                    print("\r\n设备信息:", usb.DeviceID, usb.Name, usb.PNPDeviceID)
                    return usb.PNPDeviceID
        return None
    
    
    def is_admin(id=""):
        if ctypes.windll.shell32.IsUserAnAdmin():   # 获取管理员权限
            print("以管理员权限运行")
    
            # USB\VIDxxxxxxxxxxxxx,设备管理器中--设备属性--详细信息--设备实例路径
            # 需要注意特殊字符要用\标注
            str = "pnputil /disable-device \"" + id + "\""
            os.system(str)  # 禁用设备
    
            str = "pnputil /enable-device \"" + id + "\""
            os.system(str)  # 使能设备
    
        else:
            print("无管理员权限")
    
    
    if __name__ == "__main__":
        # run1 = os.system("pnputil /disable-device \"USB\\VID_0483&PID_5740\\3251386A3038\"")
        # run1 = os.system("pnputil /enable-device \"USB\VID_0483&PID_5740\\3251386A3038\"")
    
        com_id = get_dev_id("COM98")    # 串口号,见设备管理器
        is_admin(com_id)
    
    
    展开全文
  • python 操作 串口

    千次阅读 2021-11-19 14:28:14
    一、导入serial模块 参考https://www.jb51.net/article/164455.htm 模块下载地址... 找到serial文件夹,并找到python的安装位置 放入到 site-packages文件夹C:\Users\Administra
  • python操作串口

    千次阅读 2021-03-14 20:53:45
    print("---异常---:", e) return ser # 关闭串口 def DColsePort(ser): uart.fdstate = -1 ser.close() # 写数据 def DWritePort(ser, data): result = ser.write(data) # 写数据 logging.info(ser) logging.info...
  • 我使用Pyserial的python来使用串口,​​代码如下:import serialportName = 'COM5'ser = serial.Serial(port=portName)# Use the serial port...但是,问题是,如果端口已经打开(例如另一个应用程序),当我尝试打开它时...
  • 主要介绍了python 按钮点击关闭窗口的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python串口操作

    2021-07-12 11:28:02
    9600, timeout=0.2) # 接收返回的信息 while True: recv = ser.readline() print(str(recv)) if str(recv) == 'q': break 方式二:这个是可以关闭串口的 import serial # 连接 ser = serial.Serial() ser.port = '/...
  • 使用Python读取串口数据

    千次阅读 2020-11-18 16:39:06
    Python读取串口数据使用Python读取串口数据1.面向百度编程2.应用serial库3.编码设计4.编程实现 使用Python读取串口数据 1.面向百度编程 通过百度,定位到可使用Python的serial库进行读写串口数据。接着,开始用pip...
  • python串口通信的步骤及实现

    千次阅读 多人点赞 2020-11-18 18:59:09
    python内置的库函数确实很强大,serial库中包含了串口通信所用到的一些函数。本文用python实现了串口的一种简单通信。 代码实现: import serial#导入串口通信库 from time import sleep ser = serial.Serial() ...
  • Python 串口

    千次阅读 2019-03-20 15:24:07
    import serial#导入模块 ser = serial.Serial(串口号,波特率) #打开第一个串口 print ser.portstr 能看到第一个串口的...ser.close() 就是关闭ser表示的串口 ser.open() 会打开这个串口 ser = serial.Serial('COM...
  • python串口收发

    2020-12-19 16:46:41
    一、安装串口模块 pip3 install pyserialer 二、串口接口 打开串口,并得到串口对象 ser=serial.Serial(portx,bps,timeout=timex) 发送 result=ser.write(text.encode(“gbk”)) 接收 rcv = ser.read_all() 三、...
  • 前言继续上一篇使用 python 制作串口工具(一),完成要实现的串口工具代码逻辑!实现最终效果:image获取接入的 com 口首先,我们先实现获取电脑当前所接入的串口,实现效果为:每次点击 Combo Box,就把当前电脑接入...
  • python--串口通信

    千次阅读 2022-01-15 09:35:22
    Python串口通信 串口通信是嵌入式工程师的必备技能,如果能自己写一个简单的上位机的话,肯定会加分不少。 本系列是把相关的工作做个记录,毕竟Python不是经常用,老是忘记很多东西。用的时候总是重头再学一遍太...
  • 【如何用python实现串口通信】

    千次阅读 2020-12-30 17:37:16
    【如何用python实现串口通信】python 串口教程2020-09-19 09:54:51人已围观如何用python写个串口通信的程序一般很少用Python做偏底层的吧。是我的话,就直接让Python调c 库如何用python实现串口通信Python非常适合写...
  • python串口通信

    2021-01-13 18:15:22
    测试1 单独开一个进程接收,不发送,共享内存拿数据创建一个类Serial.py'''函数作用:1开启其一个进程2开启一个串口3串口数据解析4开辟共享内存 str 接收温度 湿度 mq2数据 (字符类型)5主进程创建类调用这些数据'''#...
  • python串口读取数据

    千次阅读 2021-08-12 15:34:48
    python串口读取数据python库 serial串口调试工具serial库编程实例 python库 serial 初学者学习使用串口接收数据,serial为python提供的串口通信库 串口调试工具 串口调试工具使用:ssscom(习小猛版) 使用步骤: 1...
  • Python-串口通讯

    2021-01-13 11:22:50
    Python-串口通讯 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对...
  • 使用python进行串口操作-学习笔记

    千次阅读 2019-06-05 16:01:27
    最近由于工作需要,因此我对使用python编写程序来实现与串口的通讯进行了学习。 首先我先说一下python中对串口操作所使用的模块Serial,安装方法如下所示: 打开cmd窗口输入:python -m pip install pyserial 安装...
  • Python设计串口调试助手,结合FPGA串口工程进行验证一、用python设计串口1.串口到FPGA的数据格式是gbk,所以先将汉字编码为gbk编码 (双字节编码)2.将gbk编码转化为字符串格式送到FPGA中3.打开端口4.将数据写到FPGA...
  • python实现串口通信

    千次阅读 多人点赞 2020-02-08 23:43:26
    因为店家只给了我两页纸的vc0706通信...3 实现串口通信 3.1 发现端口 3.2 发送命令 3.2.1 协议格式 3.2.2serial传送的方式 3.3 获取版本号(hello world) 3.4 复位 3.5 照相 3.5.1停止当前帧刷新 3.5.2...
  • 话不多说,直接上代码: aa为瞎写方法名,验证是否能输出与...ser.close()#关闭串口 except Exception as e: print("---异常---:",e) 原创链接在这,进行了针对自己改动:Python的串口通信(pyserial) - 东小东 - 博客园
  • python实现串口通讯小程序(GUI界面)使用python实现串口通讯需要使用python的pyserial库来实现,这个库在安装python的时候没有自动进行安装,需要自己进行安装。1、安装pyserial库:打开命令行窗口,在命令行中输入:...
  • python串口打印助手 超级好用的串口打印助手 !!! 缤果python串口打印助手支持常用的50bps - 10Mbps波特率,支持控制台打印串口log, 时间戳以及分组保存串口log功能。 中文名:缤果python串口打印助手 外文名:...
  • print("open success") ser.flushInput() # 清空缓冲区 else: print("open failed") serial.close() # 关闭端口 historyLength = 80 # 横坐标长度 data1 = array.array('h') # 可动态改变数组的大小,signed short型...
  • python获取串口设备的描述importwinregkey=winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r"SYSTEM\ControlSet001\Control\Class\{36FC9E60-C465-11CF-8056-444553540000}")foriinrange(winreg.QueryInfoKey(key)[0]):...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,895
精华内容 1,558
关键字:

python关闭串口