我是Python的新手,也是我用来编写这段代码的raspberry Pi。我需要将串行命令发送到连接到树莓派的设备,然后根据我的命令生成频率。要将其连接到串行设备,我使用下面显示的代码。
import serial
port = serial.Serial("/dev/ttyACM0", baudrate = 115200, timeout=3.0)
如果我要向串行设备写一个直接命令,它可以正常工作。
port.write(b"f1000.0W0.0")
上面显示的命令将允许生成1000MHz的信号。但是,我需要能够使用一个输入系统,它可以输入我输入的任何数字,而不仅仅是硬编码的输入系统。为此,我尝试使用输入小部件。
from tkinter import *
import serial
port = serial.Serial("/dev/ttyACM0", baudrate = 115200, timeout=3.0)
def show_entry_fields():
print("Frequency in MHz: %s\nPower in dB: %s" % (e1.get(), e2.get()))
def close_window():
master.destroy()
def send_to_sig_gen():
print(b"f.0W0.0")
port.write(b"f%s.0W0.0" % (e1.get()))
master = Tk()
master.title("FYP1 GUI")
Label(master, text="Frequency (MHz)").grid(row=0, column=0)
Label(master, text="Power (dB)").grid(row=1, column=0)
master.minsize(width=250, height=75)
e1 = Entry(master)
e2 = Entry(master)
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
Button(master, text='Exit', command=close_window).grid(row=2, column=0, sticky=W, pady=4)
Button(master, text='Display', command=show_entry_fields).grid(row=2, column=1, sticky=W, pady=4)
Button(master, text='Send', command=send_to_sig_gen).grid(row=3, column=1, sticky=W, pady=4)
mainloop( )
def send_to_sig_gen(): 应该采用"频率"来自条目小部件的值并将命令写入串行设备,但我得到以下错误。
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.5/tkinter/__init__.py", line 1562, in __call__
return self.func(*args)
File "/home/pi/Desktop/Python_codes/fyp_gui_I.py", line 16, in send_to_sig_gen
port.write(b"f%s.0W0.0" % (e1.get()))
NameError: name 'port' is not defined
我不确定我接下来需要做什么,因为“端口”这个词是'用于显示串行目标的内容,显示在代码顶部。
非常感谢任何帮助。