精华内容
下载资源
问答
  • 记得之前在很多项目开发中,都需要通过上位机来控制ECU或者通过上位机来读取ECU中的数据。其中上位机和ECU的通讯接口有串口,LIN或者CAN总线。串口作为一种低成本而又简单的通讯方式,仍然有很多客户在使用。毕竟,...

    **

    Python开发串口通讯上位机程序三部曲

    **

    2020很特殊!这个春节假期,除了吃饭、睡觉、追剧、忧国忧民以外,仍然有大把的闲暇时间想想工作的事情。记得之前在很多项目开发中,都需要通过上位机来控制ECU或者通过上位机来读取ECU中的数据。其中上位机和ECU的通讯接口有串口,LIN或者CAN总线。串口作为一种低成本而又简单的通讯方式,仍然有很多客户在使用。毕竟,一个USB转串口工具,淘宝网上只要几十块就可以买一个,而LIN总线或CAN总线转换接口,成本至少在几百元以上。
    在这里插入图片描述
    要实现上位机和ECU之间的串口通讯,除了一个USB转串口硬件工具以外,还需要一个上位机软件。上位机软件可以采用串口调试助手(可以从网上免费下载),但是很多情况下,串口调试助手无法满足控制和数据监视,以及分析功能,还需要根据项目需求,进行定制化开发。定制化开发串口上位机可以采用Visual Basic、Visual C#、labview等软件开发。这些软件特别适合于开发图形化界面。但是这几个软件需要占用很大的硬盘空间,而且对于文件操作,数据记录等并不是特别方便。最近听说python很火,一直好奇能否用python开发一个串口上位机软件,经过这几天的尝试,终于成功了。接下来给大家分享一下。
    在这里插入图片描述

    安装python开发环境

    1. 首先到python官网https://www.python.org/downloads/windows/下载python软件。如下图所示,最新版本为3.8. 本人的电脑是WIN 10 64位操作系统,需要下载的文件为:Windows x86-64 executable installer(64位操作系统一定要下载这个文件,如果下载32位的文件,后果自负)下载好的文件名为:python-3.8.1-amd64.exe.
    2. 双击这个文件,进行安装。安装时,选择Add python3.8 to PATH。这一点也非常重要!选中这个框,后续会省去很多麻烦的。单击Install Now, 可以用默认的安装路径安装。在这里插入图片描述
    3. 安装完成后,在运行窗口或者win10的搜索窗口中输入”cmd”,打开DOS窗口在这里插入图片描述
    4. 在DOS窗口中出现:C:\Windows\system32>,然后输入python, 回车,出现如上图所示的内容,以及“>>>”,说明python已经安装成功。然后在>>>后面,输入exit()可以退出。
    5. 在win10程序中,可以发现新安装的程序:IDLE (python 3.8 64-bit)。运行这个程序,出现IDLE开发环境界面在这里插入图片描述
    6. 在IDLE界面中的File菜单中可以创建一个新文件,我们的python上位机程序就可以存储在这个新文件中。
    7. 好的!我们已经顺利完成第一步,比起Visual studio和LabVIEW,是不是又快又简单啊?先喝杯酒庆祝一下吧!

    安装pyserial模块

    • Python的最大优点是共享和开源,有很多工程师已经开发了很多程序模块,并且无私奉献出来,我们可以直接利用这些现成的模块。是不是相当于踩在巨人的肩膀上一样啊?所以首先我们要感谢一下这些前辈们!他们已经把串行通讯的代码封装在了pyserial模块中(即便封装好,你也可以看到源代码的),接下来我们可以直接安装这个模块了。
    • 大家还记得把大象放进冰箱的三步法吗,那么我们安装pyserial是不是也要经过找到网址,下载软件,安装软件三步法呢?No! 让我们一起见证奇迹是如何发生的吧:运行cmd把DOS窗口打开,在C:\Windows\system32>后面直接输入”pip install pyserial”,然后系统会自动搜索下载链接,下载并且安装,一步搞定!
    • 在C:\Windows\system32>后输入”python”,回车,当出现“>>>”以后,输入import serial, 导入pyserial模块。然后在“>>>”之后,输入“serial”,可以看到pyserial被安装到的文件夹。
    • 好的,pyserial安装也搞定了!在这里插入图片描述

    编写串口上位机软件

    编写串口上位机软件:

    • 功能说明:
      • 上位机首先向ECU发出指令:控制命令(用字母c表示),读取数据指令(用字母r表示)
      • ECU收到指令后,进行处理,如果是c,则将LED蓝灯点亮;如果是r,则将LED红灯点亮,并向上位机发送0x30到0x39的十个数字。
      • 上位机发出r指令后,等待接收数据,接收到数据以后,将数据输出到屏幕。
        重复以上步骤,如果输入字母n,则退出上位机
        软件流程图如下:
        在这里插入图片描述
        打开IDLE软件,创建一个新文件,并且保存为SCI.py
        在这里插入图片描述编写上位机界面程序
    import serial  #导入串口模块
    import time    #导入时间模块,时间模块是Python自带模块,无需安装
    try:
        #打开串口,并且获得串口对象
        SCI1 = serial.Serial("com15",9600,timeout=50)
        #判断是否打开成功
        if (SCI1.isOpen()==True):
            print("串口已经打开!")
    except Exception as exc:
        print("串口打开异常:",exc)
    while True:
        commandFromECU = input("请输入控制命令,c-向ECU发送命令;r-从ECU中读取数据。")  #从键盘上输入一个命令
        SCI1.write(str(commandFromECU).encode("utf-8"))  #将键盘输入的控制命令发送给ECU上的单片机
        if commandFromECU == 'r':          #如果是读取数据,则从串口中接收数据。    
            time.sleep(1)                  #等待1秒,等待接收ECU上单片机返回的数据. ECU会依次发送0x30-0x39等10个数据
            bufferSize = SCI1.in_waiting   #接收ECU上单片机发过来的数据,并且返回数据的大小
            print("接收到",str(bufferSize),'个数据') #打印缓冲区中接收到数据的个数 
            data = SCI1.read_all().hex()           #将接收缓冲区中数据读取到data中
            print(data)                    #将接收到的数据按照16进制打印出来                
        time.sleep(1)                      #等待1秒
        if(input("如果退出,请输入n,如果继续发送命令,请按其他键 ") == 'n'):
            break
    SCI1.close()    #关闭端口
    

    在Run菜单中,选择Run Module或者直接按F5键,运行程序,界面如下:
    在这里插入图片描述好的,大功告成!我们已经完成了上位机和ECU之间的基本通讯流程。是不是软件非常简单呢?个人认为这个是python最大的优点:简约而不简单!

    总结

    我们再回顾一下python开发一个基于串口通讯的上位机程序的步骤:

    1. 到python.org下载python 3.8 64-bit并安装
    2. 使用pip install pyserial安装serial模块
    3. 编写上位机和ECU的通讯流程,画出软件流程图,编写代码,运行测试程序

    熟悉了这个程序以后,我们还可以在这个程序上增加更多的功能:

    • 将收到的数据,打印曲线,用图形显示出来。这个需要用到自带的turtle画图模块
    • 将收到的数据,保存到txt, csv文件中。
    • 将收到的数据,自动发送到邮件中。

    以上每个功能的实现,也只需要几行代码就可以实现,接下来的几年里,我会慢慢介绍给大家。好的,如果大家觉得这个串口好用的话,赶紧把电脑拿出来试一试吧。

    展开全文
  • 关于python读取Arduino发送串口数据将bytes转换为str问题 Arduino作为一款非常好的开源软件,在控制领域十分受欢迎。最近在做一件事就是将Arduino的数据通过串口传输到电脑,然后电脑端使用python读取数据,进而...

    关于python读取Arduino发送的串口数据将bytes转换为str问题

    Arduino作为一款非常好的开源软件,在控制领域十分受欢迎。最近在做一件事就是将Arduino的数据通过串口传输到电脑,然后电脑端使用python读取数据,进而用于控制。但是python3的串口读取数据为bytes类型,因此一般都需要将bytes类型转换为字符串类型,编码格式通常使用utf-8。 不幸的是,Arduino传输开启后,python进行读取,在读取的前三个字节串是随机的,但是utf-8又不支持一部分的字节串转换。因此我想出一种解决办法是:
    读取到串口数据后,先使用strip()函数去掉数据后面的"\r\n",然后使用decode()函数将bytes转换为str,decode()函数内必须有一个‘’ignor参数。具体代码如下:

    一、Arduino端

    简单向串口发送一个数字

    void setup(){
    	Serial.begin(9600);
    }
    void loop(){
    	Serial.println(100)
    }

    二、python端

    import serial
    serialPort = "COM3"
    baudRate = 9600
    myser = serial.Serial(serialPort,baudRate,timeout = 0.5)
    print("参数设置:串口=%s ,波特率=%d" % (serialPort, baudRate))
    while(1):	
    	#从串口读取数据
        data = myser.readline()  
        print(data)    
        print(type(data))
          
        #去掉串口读取的"\r\n"    
        data = data.strip()
        #将字节串变成字符串并且忽略不合法字符串,,因为部分字符串不能转换为utf-8    
        data = data.decode('utf-8','ignore')    
        print(data)    
        print(type(data))
    ser.close()

    运行结果
    运行结果

    展开全文
  • python PYQT实战——基于串口控制系统数据发送(一) 小编用了好几年CSDN网了,但写博客还是第一次写,主要是最近刚做完导师分配的一个任务吧,突发奇想的想写一片博客分享自己QT开发过程中的一些简单的心得体会。...

    python PYQT实战——基于串口的控制系统数据发送(一)

    	小编用了好几年CSDN网了,但写博客还是第一次写,主要是最近刚做完导师分配的一个任务吧,突发奇想的想写一片博客分享自己QT开发过程中的一些简单的心得体会。小编在此之前也没有接触过QT这个东西,也是导师任务要求需要才选择了PYQT,主要是因为小编主做python这方面以及PYQT上手难度小,下面小编将针对小编的实战运用简单的分享下PYQT的开发过程。
    

    PYQT的环境配置

    这里呢,小编开发环境用的是

    1. Windows 10 (Build 17763)
    2. Python 3.7.2
    3. PyCharm Community Edition 2020.2.1 x64
    4. PyQt5
    5. Qt Designer

    其中用到的主要开发库如下:

    1. PyQt5 5.15.1 5.15.1
    2. pyserial 3.4 3.4

    PyQt有超过300类,将近6000个函数和方法。它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac。 PyQt采用双许可证,开发人员可以选择GPL和商业许可。在此之前,GPL的版本只能用在Unix上,从PyQt的版本4开始,GPL许可证可用于所有支持的平台
    PyQt的资源地址PyQt官网

    pySerial是Python中专门的串口操作模块。pySerial 封装了串口通讯模块,支持Linux、Windows、BSD(可能支持所有支持POSIX的操作系统),支持Jython(Java)和IconPython(.NET and Mono).pyserial模块封装了对串口的访问。
    pySerial的资源网址pySerial官网

    pycharm具体安装方法如下:

    进入pycharm软件后,点击左上角file菜单,在菜单中选择setting选项

    在这里插入图片描述
    点击如图所示的“+”键
    在这里插入图片描述
    进入开发库安装界面后,在搜索框内搜索pyqt5以及serial两个库,并点击Install Package安装库(这里小编的pycahrm是加入了国内的第三方库的镜像)
    在这里插入图片描述
    最后等待安装就OK了。

    还有一种方式是通过pip安装
    电脑桌面同时按下win+R,进入运行界面,输入cmd进入控制台,输入pip install pyqt5,回车安装就可。
    在这里插入图片描述
    这里呢,由于使用官方的源安装容易失败,所以小编这里用的是国内的镜像源(这个是清华的)。

    小编附上一些国内镜像源:

    1. 清华:https://pypi.tuna.tsinghua.edu.cn/simple
    2. 阿里云:http://mirrors.aliyun.com/pypi/simple/
    3. 中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
    4. 华中理工大学:http://pypi.hustunique.com/ 山东理工大学:http://pypi.sdutlinux.org/
    5. 豆瓣:http://pypi.douban.com/simple/

    大家使用pip安装时,只需要像上图一样,输入代码并加上镜像源就可pip install XXXX -i xxxxxxx

    到此,PYQT的基本开发环境就配置好了,下面小编将介绍如何把QT designer以及PyUIC嵌入到pycharm中,方便界面设计。

    这里,需要大家去下载QT designer软件,下载完成后进入pycharm中,点击file–>settings,点击tools中的External Tools,点击“+”按钮添加控件。
    在这里插入图片描述
    如下图所示,框①是嵌入控件的名称,这里需要加入两个控件:QT designer和PyUIC,所以需要重复操作两次。本次先添加QT designer,框②为控件的目录,框③是工作路径:ProjectFileDirProjectFileDir,这个大家可以和小编一样
    在这里插入图片描述
    类似地,添加PyUIC控件。特别地需要注意,这里多了一个Arguments,这里大家跟小编的一样就行了:-m PyQt5.uic.pyuic FileNameFileName -o FileNameWithoutExtensionFileNameWithoutExtension.py
    在这里插入图片描述
    至此,基本环境就配置好了。我们在上方菜单栏点击tools,再选择External Tools就可以看到我们配置的两个控件了。
    在这里插入图片描述
    好了,pyqt的环境配置已经讲完了
    下一篇小编将介绍如何使用QT designer做到快速开发界面。

    展开全文
  • 在刚开始的时候,我定义了很多个函数,在发送数据后立马就接收驱动器回复的数据,在后期想用多线程的时候很容易产生错误,导致驱动器不知道我发送的是什么指令需要使用线程锁来编写,又导致程序非常的复杂。...

    继续上节的工程,我给电机做了一个简单的建模后,就需要具体实现每一个功能了。

    首先我们要在脑海里建立好一个模型,我们一方面向串口输入数据,一方面还要从串口里接收数据。在刚开始的时候,我定义了很多个函数,在发送完数据后立马就接收驱动器回复的数据,在后期想用多线程的时候很容易产生错误,导致驱动器不知道我发送的是什么指令需要使用线程锁来编写,又导致程序非常的复杂。在参考网上的的串口多线程编程的过程中,我转变了思想,为什么不定义一个线程向驱动器写数据,另一个线程接收驱动器数据并解析数据呢?这样很大的提高了程序的性能。

    #!/usr/bin/env python
    
    import serial
    import time
    import threading
    
    motor_speed_mode = b'\x02\x00\xC4\xC6'
    motor_status = b'\x80\x00\x80'
    motor_start = b'\x00\x00\x01\x01'
    
    
    class SpeedMotor:
        def __init__(self, device, acc, dcc):
            # 真实速度
            self.rel_speed = 0
            # 设置的速度
            self.set_speed = 0
            # 运行状态
            self.run = False
            # 故障状态
            self.fault = None
            # 电机电压
            self.voltage = 0
            # 电机电流
            self.current = 0
            # 设置串口通讯
            self.serial = serial.Serial(device, 57600)
            self.serial.timeout = 0
            # 开启读数据线程
            threads = []
            t1 = threading.Thread(target=self.read_motor)
            threads.append(t1)
            for t in threads:
                t.start()

    通过初始函数的过程,定义一个读线程。

    下面是读取线程的代码:

        def read_motor(self):
            while True:
                n = self.serial.inWaiting()  # 等待数据的到来,并得到数据的长度
                if n:   # 如果有数据
                    n = self.serial.read(n)  # 读取n位数据
                    s = [hex(x) for x in bytes(n)]
                    for i in range(len(s)):
                        s[i] = int(s[i], 16)
                    print(s)

    通过不断的循环,从而不断的接收驱动器的数据。

    展开全文
  • 记得先看仪器的说明说调成一直循环向电脑发送数据 误区:一开始在关闭的时候总想着杀死线程也找到了方案. 后来看杀死线程处理不太友好. 所以加了off来控制线程的存活 没写注释是英文起的都非常通俗易懂 比较难看懂的...
  • (2)mqtt,Django和数据信息假设到云端既可以真正实现远程获取数据以及控制传感器 涉及: linux下的Python串口编程、mqtt编程、网络udp编程、数据库编程 Django下的网页实时获取数据库信息 1、工具 (1)操作系统:...
  • 自己初学单片机走了很多弯路,比如电脑如何使用python通过串口发送数据帧,通过esp8266模块如何接收发送数据到单片机,网上资源甚少,以此写下总结,如需要可以作为参考,主要是四驱小车单片机端的下载
  • 通过Python调用OpenMV识别小球获取坐标

    万次阅读 多人点赞 2018-04-29 12:13:14
    OPenMV介绍 OpenMV是基于Python的嵌入式机器视觉模块,目标是成为机器视觉界的“Arduino”。...一、如何通过串口发送数据—-UART 1、UART用法读写操作 uart.read(10) # read 10 characters, ...
  • python编程来控制串口(COM口),来让一对XBee进行通讯。不需要借助终端来发送和接收数据,增大了XBee使用的灵活性。这才是使用XBee模块的最初目的。使用XBee的API模式来通讯非常容易(在没做出来之前很头大),...
  • 蓝牙串口控制代码 轿厢类型:伺服转向和后置电机驱动 发送到设备的串行数据格式:“ 100,-255; \ n”(直接arduino串行不带引号),其中第一个数字(100)是转向角,第二个数字(-255)则是定向速度(负号表示反向...
  • 最近老板给提出一个需要,项目需求大致如下: ...2、要有数据的反向控制通道,即网关与Server间要保持长连接,采用websocket实现,以此实现给ZigBee传感节点发送控制命令,来实现对ZigBee节点的远...
  • ) #发送数据 sock.close() #关闭连接 def bt_open():#开门指令 bd_addr = "00:19:09:11:07:F1" port = 1 sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM ) sock.connect((bd_addr, ...
  • 树莓派中Python控制购物机器人完成预定轨迹行走 完成了底盘子系统的运动控制之后,就需要做图像识别了,那么完成图像识别的前提就是拍照,拍照就需要用到摄像头,我们小组选用的摄像头是KS2A242,那么在我驱动2个KS...
  • 功能简介 小车实现了 前进, 后退 ...笔记本电脑运行的是python程序, 使用pyqt5模块做了一个界面(现主要用于接收键盘信号),pyserial模块控制串口发送数据。 下面以一条简单的数据流介绍整个过程,键盘按下W,...
  • Face Tracking Pan-Tilt Camera 目录 一. 概述 本项目为基于OpenCV-Python和STM32F103单片机的二自由度人脸跟踪舵机云台...将检测到的人脸的中心点坐标用串口发送给STM32单片机即可。 舵机控制方面,使用STM32单片机,
  • 使用套接字时JSON是一种很好的数据封装类型,假设我需要远程操控一个设备,发送一个JSON的数据包就可以了,像这样: {"command":"命令","args":[各种控制参数]} 当远端设备的接收程序是使用JAVA、PYTHON这种类型...
  • 目前的进展是在本机上完成的人工的数据发送如下所示,这里收到了“孙大圣”的指点,通过python编写客户端和服务端程序,分别下载客户端和服务器端的Edison控制板上。分别通过PUTTY的串口和SSH登录运行相应的CLIENT....
  • 基于LabVIEW的串口数据采集的实现及应用.pdf 基于LabVIEW的串口通信应用.pdf 基于LabVIEW的信号处理技术应用演示及实验系统设计.pdf 基于LabVIEW的倒立摆控制系统研究.pdf 基于LabVIEW的光纤傅里叶变换光谱仪数据...
  • 基于LabVIEW的串口数据采集的实现及应用.pdf 基于LabVIEW的串口通信应用.pdf 基于LabVIEW的信号处理技术应用演示及实验系统设计.pdf 基于LabVIEW的倒立摆控制系统研究.pdf 基于LabVIEW的光纤傅里叶变换光谱仪数据...
  • 基于LabVIEW的串口数据采集的实现及应用.pdf 基于LabVIEW的串口通信应用.pdf 基于LabVIEW的信号处理技术应用演示及实验系统设计.pdf 基于LabVIEW的倒立摆控制系统研究.pdf 基于LabVIEW的光纤傅里叶变换光谱仪数据...
  • 基于LabVIEW的串口数据采集的实现及应用.pdf 基于LabVIEW的串口通信应用.pdf 基于LabVIEW的信号处理技术应用演示及实验系统设计.pdf 基于LabVIEW的倒立摆控制系统研究.pdf 基于LabVIEW的光纤傅里叶变换光谱仪数据...
  • RED HAT LINUX 6大全

    热门讨论 2011-10-21 18:46:06
    11.6.2 DNS区数据文件 212 11.7 配置DNS服务器主域 215 11.7.1 添加本地域解析 215 11.7.2 添加虚拟域解析 217 11.8 授权委托 218 11.8.1 在sylvia上添加 subdomain. domain.cxm的授权 218 11.8.2 测试subdomain....
  • SeqAn:专注于生物数据序列分析的算法和数据结构。 Vcflib :用于解析和处理VCF文件的C++库。 Wham:直接把联想测试应用到BAM文件的基因结构变异。 比特流 jech/dht:C实现的比特流分布式哈希表库。 ...
  • letter shell 支持使用命令导出方式和命令表方式进行命令的添加,定义,通过宏SHELL_USING_CMD_EXPORT控制 命令导出方式支持keil,IAR(未测试)以及GCC 命令导出方式 letter shell 支持在函数体外部,采用定义常量...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

python控制串口发送数据

python 订阅