gpt4 book ai didi

python - 由于串口打开情况,无法从 Arduino 和无线调制解调器读取串行数据

转载 作者:行者123 更新时间:2023-12-01 08:27:26 31 4
gpt4 key购买 nike

我之前已经发布了一些与此类似的复杂问题,但方式更简单。主要问题是每当我从下拉菜单中选择端口并尝试打开它以从 Arduino 或无线调制解调器读取数据时。

每次都要面对串口未打开的错误。

我修复 COM 端口的硬代码工作得很好

下面提到的是我已经简化并尝试使用的代码

import serial
import serial.tools.list_ports
from tkinter import *

ard = serial.Serial();
ard.baudrate = 9600

master = Tk()

variable = StringVar(master)

a=serial.tools.list_ports.comports()
for w in a:
print(w.device)
dev = [w.device]
print(dev)
variable.set(dev[0]) # default value
w = OptionMenu(master, variable, *dev)
w.pack()
ard.port = str(w)
ard.open
ard.is_open
#print(k)

def ok():
print (variable.get())
k = ard.readline()

button = Button(master, text="OK", command=ok)
button.pack()

mainloop()

但每次我都会遇到错误

COM4
['COM4']
COM4
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Misha\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1702, in __call__
return self.func(*args)
File "C:\Users\Misha\Desktop\test\autoserial.py", line 27, in ok
k = ard.readline()
File "C:\Users\Misha\AppData\Local\Programs\Python\Python36\lib\site-packages\serial\serialwin32.py", line 267, in read
raise portNotOpenError
serial.serialutil.SerialException: Attempting to use a port that is not open

请提出建议,以帮助我完成这项工作,您的线索将对我有很大帮助。

最佳答案

您的代码中有 ard.open,但您实际上并未调用该方法来打开串行连接。这就是为什么您收到错误消息:尝试使用未打开的端口。尝试 ard.open() 看看这是否有效。这应该会打开您的端口并使其可用。

但是,根据您的设置,您可能希望将其包装在一个回调中,您可以将其绑定(bind)到另一个按钮或OptionMenu。看来您希望能够灵活地选择端口,并且只在选择一个端口后才打开该端口。

下面是一个小例子:

import tkinter as tk
import serial
import serial.tools.list_ports

ard = serial.Serial();
ard.baudrate = 9600

a = serial.tools.list_ports.comports()
ports = [port.device for port in a]

def open_serial():
ard.port = variable.get()
ard.open()
print(f'Port {variable.get()} opened')

def close_serial():
p = ard.port
ard.close()
print(f'Port {p} closed')

master = tk.Tk()
variable = tk.StringVar()
variable.set(ports[0])
options = tk.OptionMenu(master, variable, *ports)
options.pack()
button_open = tk.Button(master, text='Open', command=open_serial)
button_open.pack()
button_close = tk.Button(master, text='Close', command=close_serial)
button_close.pack()

tk.mainloop()

关于python - 由于串口打开情况,无法从 Arduino 和无线调制解调器读取串行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54152519/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com