Pyserial 在被调用时没有打开串口
Pyserial is not opening a serial port when it is called to do so
当我打开一个串行端口时,它不会随后保持打开状态来发送数据。当我在 运行 gui 之前调用它时,该代码有效,但是当我在可调用函数中重做命令时,我无法发送数据。
def connect(self):
try:
port_loc = self.builder.get_variable('port_location')
port = port_loc.get()
print(port)
#baud = self.builder.get_variable('baudrate_entry')
#baurdate = baudrate_entry.get()
#baudrate = int(baudrate)
#time = timeout_entry.get()
ser = serial.Serial(port, baudrate = 9600)
if ser.isOpen()==True:
time.sleep(0.5)
print('The Arduino is Connected')
except:
print("Error: Could not connect to Arduino. Try changing device location or baudrate")
当我使用这个命令时,我得到了
的输出
/dev/ttyACM0
The Arduino is Connected
当我尝试发送文件时,我得到以下信息。
Error: Data not sent
因此,串行端口已连接,但我无法通过同一端口发送数据
def send_data1(self):
# import data from entry widgets
dist1val = self.builder.get_variable('motor1_dist_entry')
dist1 = dist1val.get()
dist1 = int(dist1)
accel1val = self.builder.get_variable('motor1_accel_entry')
accel1 = accel1val.get()
accel1 = int(accel1)
speed1val = self.builder.get_variable('motor1_speed_entry')
speed1 = dist1val.get()
speed1 = int(speed1)
dist2 = 0
data = struct.pack("!llhhhh", dist1, dist2, speed1, dist2, accel1, dist2)
try:
ser.write(data)
except:
print("Error: Data not sent")
我正在使用 Pygubu 作为图形用户界面。
我的错误只是在函数内部调用串口。函数结束后,串口不再打开发送数据。为了补救这种情况,我将 ser 设为全局变量。
在 connect(self) 函数中调用 ser 变量作为全局变量:
def connect(self):
try:
port_loc = self.builder.get_variable('port_location')
port = port_loc.get()
print(port)
#baud = self.builder.get_variable('baudrate_entry')
#baurdate = baudrate_entry.get()
#baudrate = int(baudrate)
#time = timeout_entry.get()
global ser
ser = serial.Serial(port, baudrate = 9600)
if ser.isOpen()==True:
time.sleep(1)
print('The Arduino is Connected')
except:
print("Error: Could not connect to Arduino. Try changing device location or baudrate")
全局 ser 使代码工作。
当我打开一个串行端口时,它不会随后保持打开状态来发送数据。当我在 运行 gui 之前调用它时,该代码有效,但是当我在可调用函数中重做命令时,我无法发送数据。
def connect(self):
try:
port_loc = self.builder.get_variable('port_location')
port = port_loc.get()
print(port)
#baud = self.builder.get_variable('baudrate_entry')
#baurdate = baudrate_entry.get()
#baudrate = int(baudrate)
#time = timeout_entry.get()
ser = serial.Serial(port, baudrate = 9600)
if ser.isOpen()==True:
time.sleep(0.5)
print('The Arduino is Connected')
except:
print("Error: Could not connect to Arduino. Try changing device location or baudrate")
当我使用这个命令时,我得到了
的输出/dev/ttyACM0
The Arduino is Connected
当我尝试发送文件时,我得到以下信息。
Error: Data not sent
因此,串行端口已连接,但我无法通过同一端口发送数据
def send_data1(self):
# import data from entry widgets
dist1val = self.builder.get_variable('motor1_dist_entry')
dist1 = dist1val.get()
dist1 = int(dist1)
accel1val = self.builder.get_variable('motor1_accel_entry')
accel1 = accel1val.get()
accel1 = int(accel1)
speed1val = self.builder.get_variable('motor1_speed_entry')
speed1 = dist1val.get()
speed1 = int(speed1)
dist2 = 0
data = struct.pack("!llhhhh", dist1, dist2, speed1, dist2, accel1, dist2)
try:
ser.write(data)
except:
print("Error: Data not sent")
我正在使用 Pygubu 作为图形用户界面。
我的错误只是在函数内部调用串口。函数结束后,串口不再打开发送数据。为了补救这种情况,我将 ser 设为全局变量。
在 connect(self) 函数中调用 ser 变量作为全局变量:
def connect(self):
try:
port_loc = self.builder.get_variable('port_location')
port = port_loc.get()
print(port)
#baud = self.builder.get_variable('baudrate_entry')
#baurdate = baudrate_entry.get()
#baudrate = int(baudrate)
#time = timeout_entry.get()
global ser
ser = serial.Serial(port, baudrate = 9600)
if ser.isOpen()==True:
time.sleep(1)
print('The Arduino is Connected')
except:
print("Error: Could not connect to Arduino. Try changing device location or baudrate")
全局 ser 使代码工作。