python--禁用、启用串口设备

python–禁用、启用串口设备

最近的项目,由于通讯数据量较大,将会尝试高速的传输(1MBps),决定采用单片机的USB虚拟串口。并不是用的CH340之类的转换芯片,而是用的MCU的USB接口与电脑相连。

在调试的过程中,由于要不断的复位和上电,电脑上的串口就总是处于不可用的状态,必须将端口禁用,再启用,才能正常工作。而MCU一旦复位,电脑上又得重来一遍。所以就想着将这个动作集成到我的上位机软件中。

获得设备ID

手动获取可以通过设备管理器,在相应设备上右击,设备属性–详细信息–设备实例路径,USB\VID开头的一整串字符就是ID了。
自动获取的代码如下:

def get_dev_id(dev="COM1"):
    wmi = win32com.client.GetObject("winmgmts:")
    for usb in wmi.InstancesOf("Win32_SerialPort"):
        if True:
            if usb.DeviceID == dev:
                print("\r\n设备信息:", usb.DeviceID, usb.Name, usb.PNPDeviceID)
                return usb.PNPDeviceID
    return None

禁用和启用设备

这个简单,调用pnputil即可,以管理员方式运行CMD,并运行
pnputil /disable-device “USB\VID_0483&PID_5740\3251386A3038”
pnputil /enable-device “USB\VID_0483&PID_5740\3251386A3038”

os.system("pnputil /disable-device \"USB\\VID_0483&PID_5740\\3251386A3038\"")
os.system("pnputil /enable-device \"USB\VID_0483&PID_5740\\3251386A3038\"")

获取管理员权限

集成到python中时,就需要先获取管理员权限,
ctypes.windll.shell32.IsUserAnAdmin()

完整代码如下

import ctypes
import os
import win32com.client


# 获取串口的ID
def get_dev_id(dev="COM1"):
    wmi = win32com.client.GetObject("winmgmts:")
    for usb in wmi.InstancesOf("Win32_SerialPort"):
        if True:
            if usb.DeviceID == dev:
                print("\r\n设备信息:", usb.DeviceID, usb.Name, usb.PNPDeviceID)
                return usb.PNPDeviceID
    return None


def is_admin(id=""):
    if ctypes.windll.shell32.IsUserAnAdmin():   # 获取管理员权限
        print("以管理员权限运行")

        # USB\VIDxxxxxxxxxxxxx,设备管理器中--设备属性--详细信息--设备实例路径
        # 需要注意特殊字符要用\标注
        str = "pnputil /disable-device \"" + id + "\""
        os.system(str)  # 禁用设备

        str = "pnputil /enable-device \"" + id + "\""
        os.system(str)  # 使能设备

    else:
        print("无管理员权限")


if __name__ == "__main__":
    # run1 = os.system("pnputil /disable-device \"USB\\VID_0483&PID_5740\\3251386A3038\"")
    # run1 = os.system("pnputil /enable-device \"USB\VID_0483&PID_5740\\3251386A3038\"")

    com_id = get_dev_id("COM98")    # 串口号,见设备管理器
    is_admin(com_id)

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值