python3串口
『壹』 python获取串口设备的描述
importwinreg
key=winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r"{36FC9E60-C465-11CF-8056-444553540000}")
foriinrange(winreg.QueryInfoKey(key)[0]):
subkey=winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,"SYSTEM\ControlSet001\Control\Class\{36FC9E60-C465-11CF-8056-444553540000}\"+winreg.EnumKey(key,i))
print(winreg.QueryValueEx(subkey,'DriverDesc'))
winreg.CloseKey(subkey)
winreg.CloseKey(key)
importwinreg
key=winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r"")
try:
i=0
while1:
name,value,type=winreg.EnumValue(key,i)
print(repr(name),value)
i+=1
value,type=winreg.QueryValueEx(key,"EnableAutoTray")
exceptFileNotFoundError:
exceptOSError:
以前回答过一个,好像跟你说的意思差不多,都是读取注册表,一个读USB,一个是串口
『贰』 python 用实参向串口写入数据无法成功
在a = 。。。那行下边加一个print a 看看输出的a是什么来判断问题。
『叁』 Python如何进行多串口通信一个串口控制电机 一个串口采集数据
下载 pyserial包
def OpenCom(self,*args): #设置端口和波特率 selComPort =‘com2’ #波特率 selBaudRate =9600 #奇偶校验 selParity = 'N' try: if(not self.mySerial): self.mySerial = serial.Serial(port=selComPort, baudrate=selBaudRate,bytesize=8,parity=selParity,stopbits=1,timeout=5) else: if(self.mySerial.isOpen()): self.mySerial.close() self.mySerial = serial.Serial(port=selComPort, baudrate=selBaudRate, bytesize=8, parity=selParity, stopbits=1, timeout=5) self.lblInfo['text'] = '打开成功!' except Exception as ex: self.lblInfo['text'] = '打开失败!'
#使用com口发送modbus协议给终端设备。
def btnEmId_Click(self):
barray = bytearray([0x05, 0x03, 0xA#, 0x54, 0x00, 0x08])
vOldEmId = self.txbOldEmId.get()
vNewEmId = self.txbNewEmId.get()
barray[0] = int(vOldEmId)
barray[5] = int(vNewEmId)
#crc校验
strInput = utils.crc16_append(barray)
print(barray)
n = self.mySerial.write(barray)
if(n > 0):
str = self.mySerial.readall()
self.lblInfo['text'] = 'success!'
# for s in str:
# print (hex(s))
else:
self.lblInfo['text'] = 'error!'
『肆』 python 串口传输问题
首先用USB线连上串口设备,然后确认是哪个COM口,下面用COM3为例。
import serial
t=serial.Serial('COM3',115200)
command = "aabbccddee" //十六进制字符串
t.write(command.decode("hex")) //转换成十六进制发送,否则设备不认识
print t.read(16)
『伍』 串口发送16进制1234,用python接收的是'\x01\x01\x03\x04'但用python再怎么转换成原来的数据1234呢
假设你接收到的'x01x02x03x04'储存在a变量中,
你想要转换为1234储存在b变量中,那么可以参考进行如下操作:
>>> a='x01x02x03x04'
>>> b=''
>>> for i in s:
b=b + str(ord(i))
>>> b
'1234'
>>> b = int(b) #如果要将b转为数值变量,则使用int()
>>> b。
(5)python3串口扩展阅读:
十六进制的转换
数学的计算方法
主条目:进制转换
十进制转十六进制
采余数定理分解,例如将487710转成十六进制:
4877÷16=304....13(D)
304÷16=19....0
19÷16=1....3
1÷16=0....1
这样就计到487710=130D16
编程中的函式
Visual Basic
十六进制转换为十进制:十进制(Long型)=CLng("&H" & 十六进制数(String型))
十进制转换为十六进制:十六进制数(String型)=Hex$(十进制)
Javascript
Javascript 能以 toString() 函数来将十进制数字转为其他任意进制格式(String类型)
Python
调用Python内置int()函数把该字串转为数字。
『陆』 如何用python实现串口通信
Python非常适合写一些测试的脚本,如快速的串口通信测试等。如果使用VC++ QT开发,可能用时较多,使用python,如果掌握使用方法,可以直接读写测试,配合设备或是串口助手,很快验证与实现。
Python有没有现成的串口API直接调用呢?经过实践验证,需要安装一个叫 Pyserial的组件即可。这个可以在github上下载。
在windows 7 64bit 上可以使用吗?当然可以使用,我安装的python3.5为64位的。把下载后的文件,其中有一个serial的文件夹,拷贝到python35安装路径, C:\Python35\Lib\site-packages\serial
网上可以搜一下windows的安装包,安装完也是:C:\Python35\Lib\site-packages\serial ,可以用最新的版本,替换即可。
测试的方法:在python IDE里测试:
>>> import serial
这里如果报错,是python版本与pyserial版本没有配合好。如果正常,不返回,即可以导入serial模块。
>>> ser=serial.Serial("COM5",115200)
这里为COM5,115200的波特率。如果打不开,请检查安装环境。
>>> ser.write('hello,serial test'.encode())
17
发送测试(如果返回字节数,说明返回成功),这里需要转换一个编码为字节。
以上测试,可以使用现在的设备或是串口助手,如安装Virtual Serial Port Driver 7.2 虚拟串口软件,设置一对串口,进行自发自收的测试。
>>> print(ser.readline())
b'abcdefg\r\n'
这里是串口接收,有接收的超时。设备或是串口助手发送一个字符串,以回车换行结束,这里就可以收到打印出来。
也可以用ser.read(),这里只接收一个字符来实现。
上面已经实现了基本的串口操作。
关闭串口为:
>>> ser.close()
如果使用python,一般写个py文件,就像windows bat 批处理一样,这是python强大的地方。如果写一个py脚本呢?其实只要把上面的命令,一条条写下来,就是一个脚本,测试如下:
import serialser=serial.Serial("COM5",115200,timeout=0.5)for i in range(0,100-1):ser.write('hello\r\n'.encode())print(ser.readline());ser.close()
『柒』 linux中python怎么打开串口
一个Python实现的串口Echo
import serial
import sys
try:
ser = serial.Serial('/dev/ttyUSB0', 9600)
except Exception, e:
print 'open serial failed.'
exit(1)
print 'A Serial Echo Is Running...'
while True:
# echo
s = ser.read()
ser.write(s)
# write to stdout and flush it
sys.stdout.write(s)
sys.stdout.flush()
『捌』 如何用python写个串口通信的程序
使用pyserial库,是最简单的!!!
import serial
ser = serial.Serial() # open 'COM1', baudrate=9600, etc
ser.write('string out')
ser.read(1) # read 1 byte from COM port
# ...
ser.close()<img id="selectsearch-icon" src="https://gss0.bdstatic.com/70cFsjip0QIZ8tyhnq/img/iknow/qb/select-search.png" alt="搜索">
『玖』 python如何获取串口前面的名称
楼上的方法太复杂,用serial库就可以,亲测可用:
importserial.tools.list_ports
port_list=list(serial.tools.list_ports.comports())
iflen(port_list)==0:
print('找不到串口')
else:
foriinrange(0,len(port_list)):
print(port_list[i])
参考:网页链接