`
f002489
  • 浏览: 274461 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

使用python操作串口 ★☆★

阅读更多

另参考:如何用python写个串口通信的程序? http://www.douban.com/group/topic/7400483/

 

使用python操作串口
一、
为了使用python操作串口,首先需要下载相关模块:
1. pyserial (http://pyserial.wiki.sourceforge.net/pySerial)

                http://pyserial.wiki.sourceforge.net/pySerial


2. pywin32 (http://sourceforge.net/projects/pywin32/)

二、
google “python 串口 操作”关键字,找到相关python代码,
我是从http://currentlife.blog.sohu.com/53741351.html页面上拷贝代码。
咱得参考人家的代码修改。

三、
发送数据可用chr和pack组装处理,如:
snd = ''

snd += chr(97)

data = 0x12345678

snd += pack.('i', data)

snd += chr(0x64)

self.l_serial.write(snd);

#发送的数据是(16进制):61 78 56 34 12 64



接收的数据用ord函数,将字节内容变为整数,进行判断处理。

如:if ord(recv[2])== 0x01:

判断recv[2]是否是0x01.





注意:不能这样比较

if recv[2] == 'a':

   pass

也不能这样比较

if recv[2] == 0x97:

   pass



因为python的字符串存储机制我不清楚,所以不知道为什么这样比较不可以。



帖点代码,依据前面的参考代码修改的:

#coding=gb18030


import sys,threading,time;
import serial;
import binascii,encodings;
import re;
import socket;
from struct import *;

class ComThread:
    def __init__(self, Port=0):
        self.l_serial = None;
        self.alive = False;
        self.waitEnd = None;
        self.port = Port;


    def waiting(self):
        if not self.waitEnd is None:
            self.waitEnd.wait();


    def SetStopEvent(self):
        if not self.waitEnd is None:
            self.waitEnd.set();
        self.alive = False;
        self.stop();


    def start(self):
        self.l_serial = serial.Serial();
        self.l_serial.port = self.port;
        self.l_serial.baudrate = 9600;
        self.l_serial.timeout = 2;
        self.l_serial.open();

        if self.l_serial.isOpen():
            self.waitEnd = threading.Event();
            self.alive = True;
            self.thread_read = None;
            self.thread_read = threading.Thread(target=self.FirstReader);
            self.thread_read.setDaemon(1);
            self.thread_read.start();
            return True;
        else:
            return False;


    def FirstReader(self):
        while self.alive:
            # 接收间隔
            time.sleep(0.1);
            try:
                data = '';
                n = self.l_serial.inWaiting();
                if n:
                    data = data + self.l_serial.read(n);
                    for l in xrange(len(data)):
                        print '%02X' % ord(data[l]),


                    # 发送数据
                    snddata = '';
                    snddata += chr(97)
                    tt = 0x12345678;
                    snddata += pack('i', tt)
                    snddata += chr(0x64)
                    self.l_serial.write(snddata);

                # 判断结束
                if len(data) > 0 and ord(data[len(data)-1])==0x45:
                    #pass;
                    break;
               
            except Exception, ex:
                print str(ex);


        self.waitEnd.set();
        self.alive = False;


    def stop(self):
        self.alive = False;
        self.thread_read.join();
        if self.l_serial.isOpen():
            self.l_serial.close();



#测试用部分
if __name__ == '__main__':
    rt = ComThread();
    try:
        if rt.start():
            rt.waiting();
            rt.stop();
        else:
            pass;            
    except Exception,se:
        print str(se);

   

    if rt.alive:
        rt.stop();


    print '';
    print 'End OK .';
    del rt;

分享到:
评论

相关推荐

    使用python3实现操作串口详解

    通过引用serial模块包,来操作串口。 1、查看串口名称 在Linux和Windows中,串口的名字规则不太一样。 需要事先查看。 Linux下的查看串口命令 root@D2:~# ls -l /dev/ttyS* crw-rw—- 1 root dialout 4, 64 Dec ...

    基于python实现串口GUI编程

    这样的方法适合初学者快速上手Python串口编程,同时也为更复杂的项目提供了基础。随着技能的提升,开发者还可以进一步完善GUI界面,添加错误处理机制,以及支持更多高级功能,如波特率动态调整、多种设备连接管理等...

    Python 读取串口数据,动态绘图的示例

    1. **串口通信**:串行接口是计算机系统中最常见的通信方式之一,它允许计算机与外部设备(如单片机)之间通过串行方式传输数据。常见的串行接口包括 RS-232 和 USB 转串口等。 2. **Python**:一种高级、解释型、...

    python编写的串口调试工具

    Python编写的串口调试工具是一种基于Python编程语言的实用程序,用于与硬件设备进行串行通信。这个工具通常包括读取、写入数据、设置波特率、数据位、停止位和奇偶校验等功能,方便开发者进行串口设备的调试和测试。...

    基于Python的串口通信(2).doc

    基于 Python 的串口通信(2) 本文档将详细介绍基于 Python 的串口通信,包括 Pyvisa 的...通过本文档,可以了解基于 Python 的串口通信的基本原理和实现方法,并了解 Pyvisa 库的使用方法和 NI-VISA 库的安装方法。

    python串口接收源码可以实时绘图

    本项目“python串口接收源码可以实时绘图”结合了这两个工具,旨在实现串口数据接收并实时可视化显示。 项目的核心是通过Python的`pyserial`库来处理串口通信。`pyserial`库提供了一系列API,使得开发者可以方便地...

    python实时读取串口数据并自动保存至excel

    1. **Python串口通信**:Python提供了`pyserial`库来处理串口通信。通过创建`Serial`对象,设置波特率、校验位、数据位和停止位等参数,可以打开串口并与连接的设备进行数据交换。例如,`ser = serial.Serial(port='...

    python编写串口工具

    本主题聚焦于使用Python创建一个串口通信工具,它利用了Tkinter库来构建图形用户界面(GUI)。Tkinter是Python的标准GUI库,易于学习且功能齐全,非常适合初学者和专业人士快速开发桌面应用。 串口通信,又称UART...

    Python 使用Pandas实现数据库的读、写操作 Python源码

    Python 使用Pandas实现数据库的读、写操作 Python源码Python 使用Pandas实现数据库的读、写操作 Python源码Python 使用Pandas实现数据库的读、写操作 Python源码Python 使用Pandas实现数据库的读、写操作 Python源码...

    【Python原创技术】Python通过串口收发文件

    具体使用方法:内网网电脑都安装Python,最好同一版本,不同版本不知行不行.外网电脑运行pip install xmodem安全文件传输库.,然后运行pip freeze>C:\pip.txt和pip download -d C:\offline -r C:\pip.txt两个命令,将生成...

    基于python编写的串口调试助手,内含.exe程序和源代码

    串口调试助手是一种工具,它允许用户通过计算机的串行接口(如COM1、COM2等)与外部设备进行通信和数据交换。在IT领域,尤其是在硬件开发、物联网(IoT)项目或者嵌入式系统调试中,串口调试助手扮演着至关重要的角色...

    STPython使用说明 国产神通数据库 OSCAR python操作模块及使用手册

    STPython的核心功能是通过调用神通数据库的ACI(Application Call Interface)接口来扩展Python的功能,使得开发者可以使用Python编写SQL语句来操作神通数据库。然而,为了正常运行STPython,除了Python标准库外,还...

    Python 串口实时绘图工具

    Python有许多库可以实现串口通信,例如`pyserial`,它是Python中广泛使用的串口通信库。通过`pyserial`,我们可以打开、配置(如设置波特率、数据位、停止位等)和读写串口。在这个工具中,它能自动检测串口端口的...

    python获取串口数据

    python获取串口数据

    Python串口日志小工具

    Python串口日志小工具是一种基于Python编程语言开发的实用程序,主要用于与硬件设备通过串行接口进行通信,实现数据的收发以及日志记录功能。在嵌入式系统、物联网(IoT)项目或者需要与外部设备进行交互的场景中,...

    Python的串口接口

    Python的串口接口

    Python thinker串口助手V2.0-0524

    Python thinker串口助手V2.0-0524是一个专为串行通信设计的上位机工具,尤其适用于Python编程环境。这个软件提供了一种简单直观的方式,帮助用户进行串口(Serial Port)的数据接收与发送,同时具备RX数据解析和TX...

    python操作艾德克斯程控电源IT6723

    python操作艾德克斯程控电源IT6723

    Python中文操作手册

    3. **标准库**:涵盖`os`、`sys`、`math`、`string`、`random`、`time`等模块,提供了操作系统接口、数学运算、字符串处理、随机数生成、时间操作等功能。 4. **异常处理**:Python中的错误和异常处理机制,如`try/...

Global site tag (gtag.js) - Google Analytics