python串口编程实例

python是纯粹的自由软件, 源代码和解释器cpython遵循 gpl(gnu general public license)协议。
python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是c/c++)很轻松地联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3d游戏中的图形渲染模块,性能要求特别高,就可以用c/c++重写,而后封装为python可以调用的扩展类库。
1、字符串的发送接收 短接串口的2、3脚,创建一个文本,如:
或者你可以稍微添加几句,变成你任意输入后打印出你的键入信息。
其中,read(value)方法的参数value为需要读取的字符长度。如果想要全部读取,提供两个方法:
1)inwaiting::监测接收字符。inwaitting返回接收字符串的长度值,然后把这个值赋给read做参数。
2)readall()::读取全部字符。
2、十六进制显示 十六进制显示的实质是把接收到的字符诸葛转换成其对应的ascii码,然后将ascii码值再转换成十六进制数显示出来,这样就可以显示特殊字符了。
在这里定义了一个函数,如hexshow(argv),代码如下:
3、十六进制发送 十六进制发送实质是发送十六进制格式的字符串,如‘xaa’,‘x0b’。重点在于怎么样把一个字符串转换成十六进制的格式,有两个误区:
1)‘x’+‘aa’是不可以,涉及到转义符反斜杠
2)‘\x’+‘aa’和r‘x’+‘aa’也不可以,这样的打印结果虽然是xaa,但赋给变量的值却是‘\xaa’
这里用到decode函数,
需要注意一点,如果字符串list的长度为奇数,则decode会报错,可以按照实际情况,用字符串的切片操作,在字符串的开头或结尾加一个‘0’
假如在串口助手以十六进制发送字符串“abc”,那么你在python中则这样操作“self.l_serial.write(”x61x62x63“)”
当然,还有另外一个方法:
同样可以达到相同目的。
4、python简单程序读取串口信息的方法 具体分析如下:
这段代码需要调用serial模块,通过while循环不断读取串口数据
5、python简单串口收发gui界面 以下是一个具有基本功能的串口通信pc机的gui界面,简单地实现了下位机与pc的通信界面,下位机还是用的stm32f103。
#encoding=utf-8
__author__ = ‘freedom’
from tkinter import *
from serial import *
import ttk
class gui(frame):
def __init__(self,master):
frame = frame(master)
frame.pack()
#串口设置相关变量
self.port = 0
self.baudrate = 9600
#串口号提示
self.lab1 = label(frame,text = ‘serial number’)
self.lab1.grid(row = 0,column = 0,sticky = w)
#串口号选择下拉菜单
self.boxvalue = stringvar()
self.boxchoice = ttk.combobox(frame,textvariable = self.boxvalue,state = ‘readonly’)
self.boxchoice[‘value’] = (‘com1’,‘com2’,‘com3’,‘com4’)
self.boxchoice.current(0)
self.boxchoice.bind(‘《《comboboxselected》》’,self.choice)
self.boxchoice.grid(row = 1,column = 0,sticky = w)
#波特率选择提示
self.lab2 = label(frame,text = ‘baudrate set’)
self.lab2.grid(row = 2,column = 0,sticky = w)
#波特率选择下拉菜单
self.boxvaluebaudrate = intvar()
self.baudratechoice = ttk.combobox(frame,textvariable = self.boxvaluebaudrate,state = ‘readonly’)
self.baudratechoice[‘value’] = (9600,115200)
self.baudratechoice.current(0)
self.baudratechoice.bind(‘《《comboboxselected》》’,self.choicebaudrate)
self.baudratechoice.grid(row = 3,column = 0,sticky = w)
#输出框提示
self.lab3 = label(frame,text = ‘message show’)
self.lab3.grid(row = 0,column = 1,sticky = w)
#输出框
self.show = text(frame,width = 40,height = 5,wrap = word)
self.show.grid(row = 1,column = 1,rowspan = 4,sticky = w)
#输入框提示
self.lab4 = label(frame,text = ‘input here,please!’)
self.lab4.grid(row = 5,column = 1,sticky = w)
#输入框
self.input = entry(frame,width = 40)
self.input.grid(row = 6,column = 1,rowspan = 4,sticky = w)
#输入按钮
self.button1 = button(frame,text = “input”,command = self.submit)
self.button1.grid(row = 11,column = 1,sticky = e)
#串口开启按钮
self.button2 = button(frame,text = ‘open serial’,command = self.open)
self.button2.grid(row = 7,column = 0,sticky = w)
#串口关闭按钮
self.button3 = button(frame,text = ‘close serial’,command = self.close)
self.button3.grid(row = 10,column = 0,sticky = w)
#串口信息提示框
self.showserial = text(frame,width = 20,height = 2,wrap = word)
self.showserial.grid(row = 12,column = 0,sticky = w)
#串口初始化配置
self.ser = serial()
self.ser.setport(self.port)
#self.ser.setbaudrate(self.baudrate)
#self.ser.open()
#print self.ser.isopen()
#print self.ser
def choice(self,event):
context = self.boxvalue.get()
list = [“com1”,‘com2’,‘com3’,‘com4’]
if context in list:
self.port = list.index(context)
self.ser.setport(self.port)
print self.port
def choicebaudrate(self,event):
self.baudrate = self.boxvaluebaudrate.get()
self.ser.setbaudrate(self.baudrate)
print self.baudrate
def submit(self):
context1 = self.input.get()
n = self.ser.write(context1)
output = self.ser.read(n)
print output
self.show.delete(0.0,end)
self.show.insert(0.0,output)
def open(self):
self.ser.open()
if self.ser.isopen() == true:
self.showserial.delete(0.0,end)
self.showserial.insert(0.0,“serial has been opend!”)
def close(self):
self.ser.close()
if self.ser.isopen() == false:
self.showserial.delete(0.0,end)
self.showserial.insert(0.0,“serial has been closed!”)
root = tk()
root.title(“serial gui”)
#root.geometry(“3000x4000”)
app = gui(root)
root.mainloop()

NVIDIA公共cuNumeric将GPU加速超级计算引入NumPy生态系统中
农业气象站本身对于农业种植的作用都有哪些
自动驾驶进入城市“毛细血管”
雷柏MT500办公机械键盘评测 游戏办公两不误
PCB最佳开孔散热方案
python串口编程实例
国网冀北电力高效推进工程建设 实施“1+N”远程协同评标模式开展异地在线评审
MG名爵推出插电混动车 价格定位非常重要
川化股份向鼎盛锂业增资1.49亿_鼎盛锂盐投产加快
为实现孙正义5年内IPO大计 ARM全力投入物联网
DEKRA德凯实验室成为联想授权认可的第三方实验室
高通6000万到账,夏普确认两者将在MEMS技术上合作
鸿蒙系统生成二维码技术
光电通信:WDM-PON关键技术解析
未来三年AI投资规模都会超过千亿元,全国5G基站将约为653万座
简单介绍个人服务器的相关详细配置要求
三星推出多款Galaxy Book系列笔记本电脑
爱立信首席研究员:标准化让移动通信技术以惊人的速度发展
手机中的各种传感器你知道吗?
如何让语音芯片长久保持性能稳定呢?