用pycharm实现串口通信,代码出现未知报错,希望大家可以帮帮忙
以下为代码:
mport serial
from pickle import TRUE
import csv
import serial.tools.list_ports
import threading
import time
import numpy as np
import matplotlib.pyplot as plt
def find_serial():
port_list=list(serial.tools.list_ports.comports())
if len(port_list)==0:
print('找不到串口')
else:
for i in range(0,len(port_list)):
print(port_list[i])
POWER_DATA=[]
def recieve_data(a):
NO=['']
n=0
s=True
while s:
portx="COM1"
bps=115200
timex=1
ser = serial.Serial(portx, int(bps), timeout=timex)
data1=ser.readline().decode("gbk")
if data1 !='':
n=n+1
print(n,type(n))
text="数据"+str(n)+"已经收到\r\n"
result=ser.write(text.encode("gbk"))
print("写总字节数:",result)
data1=data1.rstrip('\r\n')
data=data1.split(",")
print((data))
POWER_DATA.append(data)
print(POWER_DATA)
if n==10:
s=0
ser.close()
time.sleep(0.1)
def draw(a):
y=[]
for i in a:
print(i[0])
y.append(i[0])
x=np.linspace(1,10,10,endpoint=True)
plt.plot(np.array(x),np.array(y))
plt.show()
if __name__=='__main__':
t1=threading.Thread(target=recieve_data, args=("t1",))
t1.start()
t1.join()
draw(POWER_DATA)
以下是报错类型:
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\threading.py", line 932, in _bootstrap_inner
self.run()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\Administrator\PycharmProjects\pythonProject1\3.py", line 25, in recieve_data
ser = serial.Serial(portx, int(bps), timeout=timex)
File "C:\Users\Administrator\venv\lib\site-packages\serial\serialwin32.py", line 33, in __init__
super(Serial, self).__init__(*args, **kwargs)
File "C:\Users\Administrator\venv\lib\site-packages\serial\serialutil.py", line 244, in __init__
self.open()
File "C:\Users\Administrator\venv\lib\site-packages\serial\serialwin32.py", line 64, in open
raise SerialException("could not open port {!r}: {!r}".format(self.portstr, ctypes.WinError()))
serial.serialutil.SerialException: could not open port 'COM1': FileNotFoundError(2, '系统找不到指定的文件。', None, 2)
Traceback (most recent call last):
File "C:\Users\Administrator\PycharmProjects\pythonProject1\3.py", line 55, in <module>
draw(POWER_DATA)
File "C:\Users\Administrator\PycharmProjects\pythonProject1\3.py", line 48, in draw
plt.plot(np.array(x),np.array(y))
File "C:\Users\Administrator\venv\lib\site-packages\matplotlib\pyplot.py", line 2812, in plot
return gca().plot(
File "C:\Users\Administrator\venv\lib\site-packages\matplotlib\axes\_axes.py", line 1688, in plot
lines = [*self._get_lines(*args, data=data, **kwargs)]
File "C:\Users\Administrator\venv\lib\site-packages\matplotlib\axes\_base.py", line 311, in __call__
yield from self._plot_args(
File "C:\Users\Administrator\venv\lib\site-packages\matplotlib\axes\_base.py", line 504, in _plot_args
raise ValueError(f"x and y must have same first dimension, but "
ValueError: x and y must have same first dimension, but have shapes (10,) and (0,)
【相关推荐】
>>> import turtle #导入turtle 模块
>>> turtle.showturtle() #显示箭头
>>> turtle.write("高淇") #写字符串
>>> turtle.forward(300) #前进 300 像素
>>> turtle.color("red") #画笔颜色改为red
>>> turtle.left(90) #箭头左转 90 度
>>> turtle.forward(300)
>>> turtle.goto(0,50) #去坐标(0,50)
>>> turtle.goto(0,0)
>>> turtle.penup() #抬笔。这样,路径就不会画出来
>>> turtle.goto(0,300)
>>> turtle.pendown() #下笔。这样,路径就会画出来
>>> turtle.circle(100) #画圆
引用 皆我百晓生 小程序回复内容作答:
根据报错信息,可以看出存在两个问题:
串口无法打开,报错信息为:SerialException: could not open port 'COM1': FileNotFoundError(2, '系统找不到指定的文件。', None, 2)
,可能是由于COM1串口不存在或者被其他程序占用了。你可以尝试修改portx
的值为可用的串口。
在调用draw函数时,报错信息为:ValueError: x and y must have same first dimension, but have shapes (10,) and (0,)
,这是由于POWER_DATA为空导致的。在draw函数之前,你已经将t1线程完成,但是可能还没有收到数据就进行了绘图操作。你可以在draw函数之前添加一个time.sleep()的延时,确保数据已经收到后再进行绘图操作。例如:
time.sleep(1) # 延时1秒,时间可以根据实际情况调整
draw(POWER_DATA)