python串口助手
<p> 最近项目中要使用模拟数据源通过向外发送数据,以前都是用C#编写,最近在研究python,所以就用python写了一个串口助手,方便以后的测试。</p><p> 在电脑上通过虚拟串口助手产生两个虚拟串口,运行编写的串口助手</p>
<p><img src="https://img2018.cnblogs.com/blog/1496105/201910/1496105-20191010221628489-1700760936.png"></p>
<p>另外,打开一个串口调试助手,辅助测试</p>
<p> <img src="https://img2018.cnblogs.com/blog/1496105/201910/1496105-20191010221725005-478498550.png"></p>
<p> 两者互发数据,可以看到编写的串口助手能够正常接收发送,并且在后台我们也把接收到的数据打印了出来</p>
<p><img src="https://img2018.cnblogs.com/blog/1496105/201910/1496105-20191010221748696-878846312.png"></p>
<p> </p>
<p> </p>
<p> <img src="https://img2018.cnblogs.com/blog/1496105/201910/1496105-20191010221757555-388720932.png"></p>
<p>下面先讲解关于界面的代码,这里只是简单的使用tkinter做界面,如果想要更好的界面效果,可以尝试一下QT。</p>
<p>首先是界面中串口设置区域的代码,界面布局统一用grid来布局,当然也有其他的布局方法</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">-------------------------------------------------------------------------</span>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">面板布局区</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> root =<span style="color: rgba(0, 0, 0, 1)"> Tk()
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> root.title(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">xutopia 公众号:洛水梅家</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">-------------------------------------------------------------------------</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">串口设置区</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> label_com = Label(root, text=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">串口号</span><span style="color: rgba(128, 0, 0, 1)">"</span>, height=2).grid(row=0, column=<span style="color: rgba(0, 0, 0, 1)">0)
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> label_bps = Label(root, text=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">波特率</span><span style="color: rgba(128, 0, 0, 1)">"</span>, height=2).grid(column=0, row=1<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">10</span> label_datBit = Label(root, text=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">数据位</span><span style="color: rgba(128, 0, 0, 1)">"</span>, height=2).grid(column=0, row=2<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">11</span> label_parity = Label(root, text=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">校验位</span><span style="color: rgba(128, 0, 0, 1)">"</span>, height=2).grid(column=0, row=3<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">12</span> label_stop_bit = Label(root, text=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">停止位</span><span style="color: rgba(128, 0, 0, 1)">"</span>, height=2).grid(column=0, row=4)</pre>
</div>
<p>接下来是串口号的combobox的设置,其中serialPortFile.GetCom()是获取所有串口号的函数,接下来会讲解</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">串口号</span>
varPort =<span style="color: rgba(0, 0, 0, 1)"> StringVar()
combo_com </span>= ttk.Combobox(root, textvariable=varPort, width=8, height=2, justify=<span style="color: rgba(0, 0, 0, 1)">CENTER)
serial_com </span>=<span style="color: rgba(0, 0, 0, 1)"> serialPortFile.GetCom()
combo_com[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">values</span><span style="color: rgba(128, 0, 0, 1)">'</span>] =<span style="color: rgba(0, 0, 0, 1)"> serial_com
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">combo_com.bind("<<ComboboxSelected>>", lambda event: combo1_handler(var=varPort.get()))</span>
<span style="color: rgba(0, 0, 0, 1)">combo_com.current(0)
combo_com.grid(column</span>=1, row=0)<br><br></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">波特率</span>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> varBitrate =<span style="color: rgba(0, 0, 0, 1)"> StringVar()
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> combo_bps = ttk.Combobox(root, textvariable=varBitrate, width=8, height=2, justify=<span style="color: rgba(0, 0, 0, 1)">CENTER)
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> combo_bps[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">values</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = (<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">9600</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">19200</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">38400</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">115200</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">combo_bps.bind("<<ComboboxSelected>>", lambda event: combo2_handler(var=varBitrate.get()))</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">combo_bps.current(0)
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> combo_bps.grid(column=1, row=1<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">数据位</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> combo_byteBit = ttk.Combobox(root, width=8, height=2, justify=<span style="color: rgba(0, 0, 0, 1)">CENTER)
</span><span style="color: rgba(0, 128, 128, 1)">10</span> combo_byteBit[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">values</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = (<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">5</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">6</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">7</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">8</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">11</span> combo_byteBit.current(3<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">12</span> combo_byteBit.grid(column=1, row=2<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">奇偶校验</span>
<span style="color: rgba(0, 128, 128, 1)">14</span> combo_parity = ttk.Combobox(root, width=8, height=2, justify=<span style="color: rgba(0, 0, 0, 1)">CENTER)
</span><span style="color: rgba(0, 128, 128, 1)">15</span> combo_parity[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">values</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = (<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">N</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">O</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">E</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 0, 1)">combo_parity.current(0)
</span><span style="color: rgba(0, 128, 128, 1)">17</span> combo_parity.grid(column=1, row=3<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">停止位</span>
<span style="color: rgba(0, 128, 128, 1)">19</span> combo_stopBit = ttk.Combobox(root, width=8, height=2, justify=<span style="color: rgba(0, 0, 0, 1)">CENTER)
</span><span style="color: rgba(0, 128, 128, 1)">20</span> combo_stopBit[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">values</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = (<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">1</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">1.5</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 0, 1)">combo_stopBit.current(0)
</span><span style="color: rgba(0, 128, 128, 1)">22</span> combo_stopBit.grid(column=1, row=4<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">23</span> serialPortFile.text_rx = Text(root,width=70,height=20<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">24</span> serialPortFile.text_rx.grid(row=0,column=3,rowspan=5<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">25</span> serialPortFile.text_rx.insert(END,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">这是一个xutopia用python编写的串口助手,公众号:xutopia77\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">26</span> text_tx = Text(root,width=70,height=10<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">27</span> text_tx.grid(row=5,column=3,rowspan=2<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">28</span> text_tx.insert(END,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">xutopia 公众号:xutopia77,发送数据12345,上山打老虎</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">29</span> button_send = Button(root, text=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">send</span><span style="color: rgba(128, 0, 0, 1)">'</span>, width=18, height=1<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">30</span> button_send.bind(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)"><Button-1></span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 0, 255, 1)">lambda</span> event: serialPortFile.usart_sent(var=text_tx.get(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">0.0</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">end</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)))
</span><span style="color: rgba(0, 128, 128, 1)">31</span> button_send.grid(column=1, row=6<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">串口开关按钮</span>
<span style="color: rgba(0, 128, 128, 1)">33</span> serialPortFile.button_var =<span style="color: rgba(0, 0, 0, 1)"> StringVar()
</span><span style="color: rgba(0, 128, 128, 1)">34</span> serialPortFile.button_var.set(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">打开串口</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">35</span> buttonOpenCom = Button(root, textvariable=serialPortFile.button_var, width=18, height=1<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">36</span> buttonOpenCom.bind(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)"><Button-1></span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 0, 255, 1)">lambda</span><span style="color: rgba(0, 0, 0, 1)"> event: serialPortFile.usart_ctrl(combo_com.get(), combo_bps.get(),combo_parity.get(),combo_stopBit.get(),combo_byteBit.get()))
</span><span style="color: rgba(0, 128, 128, 1)">37</span> buttonOpenCom.grid(column=1, row=5)</pre>
</div>
<p>以上就是界面相关的代码,最终效果也就是上图显示的效果,很简单。接下来介绍python串口的逻辑代码部分。在另外一个模块中serialPortFile.py</p>
<p>获取电脑中所有的串口号的函数,注意这里通过serial.tools.list_ports.comports()获取所有的串口号之后进行了一步转换,存在一个数组中,这样,传入serial中才能被识别。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 获取并存储串口号到数组</span>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> GetCom():
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> port_list =<span style="color: rgba(0, 0, 0, 1)"> list(serial.tools.list_ports.comports())
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(len(port_list))
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> portcnt =<span style="color: rgba(0, 0, 0, 1)"> len(port_list)
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> serial_com =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 255, 1)">for</span> m <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> range(portcnt):
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> port_list_1 =<span style="color: rgba(0, 0, 0, 1)"> list(port_list)
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 0, 1)"> serial_com.append(port_list_1)
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 255, 1)">return</span> serial_com</pre>
</div>
<p>串口打开关闭函数,串口打开之后创建了一个线程threading,线程中一直监视串口的状态,一旦接受到数据,就把数据显示到接受数据显示框中。有关python线程threading的内容可以在我的公众号,洛水梅家中查看。</p>
<p>注意在代码中加了一个if ser.is_open:的条件判断,不加入这个条件的话,很有可能重复打开串口而报错误。</p>
<p>同时在按键Button的状态也随着串口的开关状态而变化。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> usart_ctrl(com, bps,parity_,stopbits_,bytesize_):
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">print(__file__, sys._getframe().f_lineno, port_, bitrate_, var.get())</span>
<span style="color: rgba(0, 0, 255, 1)">global</span><span style="color: rgba(0, 0, 0, 1)"> ser, button_var
</span><span style="color: rgba(0, 0, 255, 1)">if</span> button_var.get() == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">打开串口</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
button_var.set(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">关闭串口</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
ser </span>=<span style="color: rgba(0, 0, 0, 1)"> serial.Serial(
port</span>=<span style="color: rgba(0, 0, 0, 1)">com,
baudrate</span>=<span style="color: rgba(0, 0, 0, 1)">int(bps),
parity</span>=<span style="color: rgba(0, 0, 0, 1)">parity_,
timeout</span>=0.2<span style="color: rgba(0, 0, 0, 1)">,
stopbits</span>=<span style="color: rgba(0, 0, 0, 1)">float(stopbits_),
bytesize</span>=<span style="color: rgba(0, 0, 0, 1)">int(bytesize_))
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> ser.is_open:
</span><span style="color: rgba(0, 0, 255, 1)">pass</span>
<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
ser.open()
recv_data </span>= threading.Thread(target=<span style="color: rgba(0, 0, 0, 1)">thread_recv)
recv_data.start()
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
button_var.set(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">打开串口</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> ser.is_open:
ser.close()
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">pass</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> usart_sent(var):
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">print(__file__, sys._getframe().f_lineno, "-->", var)</span>
<span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(var)
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> ser.is_open:
ser.write(var.encode(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">gb2312</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">))
</span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> thread_recv():
</span><span style="color: rgba(0, 0, 255, 1)">global</span><span style="color: rgba(0, 0, 0, 1)"> text_rx
</span><span style="color: rgba(0, 0, 255, 1)">while</span><span style="color: rgba(0, 0, 0, 1)"> True:
</span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">:
read </span>=<span style="color: rgba(0, 0, 0, 1)"> ser.readall()
</span><span style="color: rgba(0, 0, 255, 1)">if</span> len(read) ><span style="color: rgba(0, 0, 0, 1)"> 0:
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(bytes(read).decode(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">gb2312</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(__file__, sys._getframe().f_lineno, "<--", bytes(read).decode('ascii'))</span>
text_rx.insert(END,bytes(read).decode(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">gb2312</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
</span><span style="color: rgba(0, 0, 255, 1)">except</span><span style="color: rgba(0, 0, 0, 1)"> Exception as e:
</span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(e)
time.sleep(</span>1<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">pass</span></pre>
</div>
<p>上面就是关于串口助手的所有代码介绍,更多详细内容,关注公众号 xutopia77 免费获取源码</p>
<p>后台回复python_com,免费获取源码</p>
<p><img src="https://img2020.cnblogs.com/blog/1496105/202201/1496105-20220112152647014-1213316563.jpg"></p>
<p> </p><br><br>
来源:https://www.cnblogs.com/xutopia/p/11651045.html
頁:
[1]