#串口
import serial
import serial.tools.list_ports
import time
plist = list(serial.tools.list_ports.comports())
if len(plist) <= 0:
print("没有发现端口!")
else:
#检测可用端口
for x in plist:
serialName = x[0] #获取端口名
ij = False
try:
#配置并打开端口
serialFd = serial.Serial(port=serialName, baudrate=9600, bytesize=8,
stopbits=1, timeout=10)
except:
print("com", serialName, "is used")
ij = True
if ij: #无可用端口
print("error")
while(1):
pass
else:
print("可用端口名>>>", serialFd.name)
adc = bytes("start\r\n", "ascii")
serialFd.write(adc) #按字节发送
#time.sleep(1)
while(1):
if serialFd.inWaiting(): #获取待读字节数量
data = serialFd.readline() #获取行字节数据,直到/n或超时,阻塞
print(data)
serialFd.write(data)
serialFd = serial.Serial(0) 是打开第一个串口 print serialFd.portstr 串口的标识,windows下是COMx serial.write(“hello") 按字节发送 serial.close() 就是关闭serial表示的串口 serial.open() 会打开这个串口 serial.Serial('COM1', 115200, timeout=10) 来设置波特率, 读取超时,还有专用函数 serial.read()可以读一个字符 serial.read(x) 是读x个字符 serial.readline() 是读一行,以/n结束,要是没有/n就一直读,阻塞。 serial.readlines()和ser.xreadlines()都需要设置超时时间 serial.baudrate = x 设置波特率 serial来查看当前串口的状态 serial.isOpen() 看看这个串口是否已经被打开
接受数据是按照bytes格式接受,如果与嵌入式系统匹配,可以用a.hex()方法转化成16进制
发送数据也是按照bytes格式发送,不支持unicode编码,在发送字符串时需要加上 str.encode('utf-8'),
数值如果要转化成bytes,用chr()方法或者格式化字符串 s = “%c” * n % (1,2,3,4,...n)
serial官网
https://pythonhosted.org/pyserial/pyserial_api.html#native-ports