python串口通信的接收与发送_python实战串口助手---6实现串口接收

#! /usr/bin/env python

# -*- coding: utf-8 -*-

import time

import datetime

import threading

import binascii

import platform

import logging

import serial

import SerialDeal

import serialMainUI

if platform.system() == "Windows":

from serial.tools import list_ports

elif platform.system() == "Linux":

import glob, os, re

import wx

import wx.xrc

logging.basicConfig(level=logging.DEBUG,

format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',

datefmt='%a, %d %b %Y %H:%M:%S')

class MainSerialUI(serialMainUI.serialFrame):

def __init__(self, master):

super(MainSerialUI, self).__init__()

self.ser = None

self.receive_count = 0

self.receive_data = ""

self.list_box_serial = None

def __del__(self):

if platform.system() == "Linux":

try:

self.ser.SetStopEvent()

except:

pass

def m_openserOnButtonClick( self, event ):

try:

self.port = self.m_comset.GetValue()

#print ("com is %s" % self.port)

self.baudrate = self.m_comboBox2.GetValue()

#print ("buadrate is %s" % self.baudrate)

self.parity = self.m_comboBox4.GetValue()

#print ("parity is %s" % self.parity)

self.databit = self.m_comboBox3.GetValue()

#print ("databit is %s" % self.databit)

self.stopbit = self.m_comboBox5.GetValue()

#print ("stopbit is %s" % self.stopbit)

self.ser = SerialDeal.serDeal(Port=self.port,

BaudRate=self.baudrate,

ByteSize=self.databit,

Parity=self.parity,

Stopbits=self.stopbit)

self.ser.start()

if self.ser.alive:

print 'succes'

self.thread_read = threading.Thread(target=self.SerRead)

self.thread_read.setDaemon(True)

self.thread_read.start()

else:

print '0'

except Exception as e:

#logging.error(e)

print u'打开串口失败'

def SerRead(self):

try:

n = self.ser.serSer.inWaiting()

if n:

self.receive_data += self.ser.read(n).replace(binascii.unhexlify("00"), "")

if self.ser.thresholdValue <= len(self.receive_data):

self.receive_count += 1

# 接收显示是否为Hex

if self.m_rcvBox.get() == 1:

self.receive_data = self.space_b2a_hex(self.receive_data)

self.m_rcvtext.insert("end", "[" + str(datetime.datetime.now()) + " - "

+ str(self.receive_count) + "]:\n", "green")

self.m_rcvtext.insert("end", self.receive_data + "\n")

self.m_rcvtext.see("end")

self.receive_data = ""

except Exception as e:

logging.error(e)

self.receive_data = ""

self.ser.stop()

self.ser = None

def m_clrRcvTextOnButtonClick( self, event ):

self.m_rcvtext.Clear()

event.Skip()

def space_b2a_hex(self, data):

'''

格式化接收到的数据字符串

示例:123 --> 31 32 33

'''

new_data_list = list()

new_data = ""

hex_data = binascii.b2a_hex(data)

temp_data = ""

for index,value in enumerate(hex_data):

temp_data += value

if len(temp_data) == 2:

new_data_list.append(temp_data)

temp_data = ""

for index,value in enumerate(new_data_list):

if index%25 == 0 and index != 0:

new_data += "\n"

new_data += value

new_data += " "

return new_data

def m_send1butOnButtonClick( self, event ):

if self.ser.alive:

send_data = self.m_textCtrl5.GetValue()

#try:

def m_clr1butOnButtonClick( self, event ):

self.m_textCtrl5.Clear()

def main():

app = wx.App()

MainSerialUI(app).Show(True)

app.MainLoop()

if __name__ == '__main__':

main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值