文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python编写的串口程序

2023-01-31 04:29

关注

最近导师给了个GSM模块,需要通过RS232串口发送AT指令来对模块进行控制,于是看了看python的GUI设计和串口部分的资料,自己编写了一个串口发送的小程序,虽然有不少的bug,但是总体上还是能用的,先把程序留在这,以便后续修改。

感觉python确实是一个很容易上手的语言,因为我事先都没看过pythonGUI设计和串口的资料,也就只用了一天就完成了这个小程序,感觉主要是python的语句确实很简洁,比方说在串口上,几句话就能实现串口发送和接收了。不过在做GUI设计方面,还是希望能像MFC那样可以拖拉控件,这样就方便了许多。

下面先发一张界面的截图:


好了,下面贴程序:


import wx
import serial
import time
import threading


class MyFrame(wx.Frame):

    def __init__(self,parent):
        print "MyFrame __init__"
        wx.Frame.__init__(self,parent,-1,'My COM',size=(500,500))#窗口标题栏和大小

        panel=wx.Panel(self)
        sizer=wx.BoxSizer(wx.VERTICAL)
        panel.SetSizer(sizer)

        self.sendtxt=wx.StaticText(panel,-1,u'发送',(20,50),(50,15))#发送静态文本框 
        self.rectxt=wx.StaticText(panel,-1,u'接收',(20,200),(50,15))#接收静态文本框
        self.baudratetxt=wx.StaticText(panel,-1,u'波特率',(20,320),(50,15))#波特率静态文本框
        self.comtxt=wx.StaticText(panel,-1,'com',(20,350),(50,15))#com口静态文本框
        baudratelist=['300','600','1200','2400','4800','9600','19200','38400'
                     ,'43000','56000','57600','115200']
        comlist=['com1','com2','com3','com4','com5','com6','com7','com8','com9']

        self.baudratelistctr=wx.Choice(panel, -1, (70, 320), choices=baudratelist)
        self.Bind(wx.EVT_CHOICE,self.OnbaudrateCH,self.baudratelistctr)#波特率下拉列表响应函数
        self.comlistctr=wx.Choice(panel, -1, (70, 350), choices=comlist)
        self.Bind(wx.EVT_CHOICE,self.OncomlistCH,self.comlistctr)#com下拉列表响应函数
        self.baudratelistctr.SetSelection(5)
        self.comlistctr.SetSelection(3)
        self.sendctr = wx.TextCtrl(panel, -1,              
                    pos = (100, 50), size = (200, 100),
                    style=wx.TE_MULTILINE|wx.TE_CENTER)
        self.recctr = wx.TextCtrl(panel, -1,              
                    pos = (100, 200), size = (200, 100),
                    style=wx.TE_MULTILINE|wx.TE_CENTER)
        
        self.sendbutton=wx.Button(panel,-1,u'发送',pos=(350,50))#发送按钮
        self.Bind(wx.EVT_BUTTON,self.OnSend,self.sendbutton)
        self.ClearRecbutton=wx.Button(panel,-1,u'清空接收列表',pos=(350,200))
        self.Bind(wx.EVT_BUTTON,self.OnClearRec,self.ClearRecbutton)
       
        index=self.baudratelistctr.GetSelection()
        BaudRate=self.baudratelistctr.GetString(index)#获取波特率
        index=self.comlistctr.GetSelection()
        ComNum=self.comlistctr.GetString(index)#获取com口
        t = threading.Timer(0.1,self.myreceive)
        t.start()
        self.Centre()
        global mycom
        
        try:  
            mycom= serial.Serial(ComNum,BaudRate,timeout=1)
                
        except:
            wx.MessageBox('open com fail','error')
            return None
        
        
    def myreceive(self):
        try:
            n=mycom.inWaiting()
        except:
            return None
        if n!=0:
            str1=mycom.read(n)
            self.recctr.Value=str1   
        t = threading.Timer(0.1,self.myreceive)
        t.start()
    def OnClearRec(self,event):
        self.recctr.Value=''
    
    def OnbaudrateCH(self,event):
        global mycom
        index=self.baudratelistctr.GetSelection()
        BaudRate=self.baudratelistctr.GetString(index)#获取波特率
        mycom.setBaudrate(BaudRate)
        print mycom.inWaiting               
    def OncomlistCH(self,event):
        global mycom
        index=self.comlistctr.GetSelection()
        ComNum=self.comlistctr.GetString(index)#获取com口
        
        try:
            mycom.setPort(ComNum)
        except:
            wx.MessageBox('change port fail','error')
            return None
        print mycom.inWaiting
    def OnSend(self,event):                    #发送处理程序
        value=self.sendctr.GetValue()
        n=mycom.write(value)       
'''    def OnRec(self,event):                     #接收处理程序
        n=mycom.inWaiting()
        str1=mycom.read(n)
        self.recctr.Value=str1'''
class MyApp(wx.App): #自定义应用程序对象

    def OnInit(self):
        print "MyApp OnInit"
        self.frame = MyFrame(None)
        id=self.frame.GetId()
        print "Frame ID:",id
        self.frame.Show(True)
        return True
    def OnExit(self):
        print "MyApp OnExit"
        
        mycom.close()
        
        time.sleep(2)        



if __name__ == '__main__': 
    print "Main start"
    
    app = MyApp() #使用从wx.App继承的子类
    print "Before MainLoop"
    app.MainLoop()
    print "After MainLoop"


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯