SmartUSBHub python 库¶
本文档适用型号:SmartUSBHub 产品系列
本文档更新日期:2026年6月4日
简介¶
使用前请先从 SmartUSBHub 文档 中选择对应产品的使用指南。
如果想直接用软件控制,请使用随 SmartUSBHub 发行包提供的配套控制软件。
这是一个用于在脚本、测试系统和自动化流程中控制 SmartUSBHub 设备的 Python 库。
产品概述¶
SmartUSBHub 是一系列可编程 USB 集线器,支持按通道控制电源;部分型号支持数据线控制,部分型号支持电压/电流检测。该系列产品适用于开发、自动化测试和设备管理。
独立电源/数据控制,模拟热插拔: SmartUSBHub 每个下游端口支持 电源(VBUS) 和 数据(D+ / D-) 的独立控制,可通过指令模拟物理插拔USB设备 。工程师无需手动插拔即可远程控制USB设备的连接/断开,实现自动化测试或远程重启设备,极大提升调试和测试效率。
电压/电流监测: 支持电流电压检测的型号提供每通道实时电压、电流采集功能。这意味着用户可以随时监控各被测设备的供电电压及电流,辅助进行设备功耗分析与状态监测。在测试中若出现异常电压跌落或电流过载,工程师能够及时发现并定位问题。
开源软件生态,易于集成: SmartUSBHub 提供了开源的协议、控制软件和 Python 控制库,兼容 Windows/macOS/Linux 等主流操作系统 。得益于标准串口指令接口和开放的API,用户可将其无缝集成到现有的自动化测试平台或脚本中(通过Python、CLI等),轻松将USB端口控制纳入自动化流程,加速开发测试周期。
多模式端口管理
支持 普通模式(多通道同时控制)与 互锁模式(仅允许操作一个通道)
每端口可设置 上电默认状态 与 断电状态记忆
扩展性强
支持集中控制多个SmartUSBHub的拓扑结构
每个设备支持地址配置,适用于级联系统
被行业验证的选择¶
从消费电子到自动驾驶,从全球领先的消费电子品牌到高性能芯片设计公司,SmartUSBHub 已广泛应用于多个行业头部企业的研发流程、自动化测试系统与产线测试场景中。
SmartUSBHub 目前已被全球 20+ 家行业头部企业广泛采用,其客户涵盖以下代表性领域:
汽车行业
智能手机
半导体与芯片设计
人工智能
通信与物联网
部署¶
任选一种使用方式。
方法1:直接安装发布包¶
pip install smartusbhub
方法2:引用当前源码库¶
cd smartusbhub_ng
python -m venv venv
source ./venv/bin/activate
pip install -r requirements.txt
库目录结构如下:
.
├── README.md # 文档
├── document # 产品使用指南
├── examples # 例程
├── requirements.txt # 安装依赖
└── smartusbhub.py # 功能源码
GUI 示例需要额外依赖:
pip install pyqtgraph PyQt5 numpy
运行例程¶
smartusbhub库包含多个例程,其存放在examples目录下,目前有以下例子:
power_control_example.py:控制通道电源,包括互锁模式setting_example.py:读取设备信息,配置默认状态、地址、工作模式和按钮cycle_all_channels.py:依次对每个可控通道进行上下电循环set_default_power_dataline_on.py:配置上电默认状态advanced/dataline_control_example.py:保持供电的同时断开/恢复某通道 USB2.0 数据线advanced/power_measurement_oneshot.py:使用请求/响应模式持续测量电压/电流advanced/power_measurement_stream.py:使用流式模式持续测量电压/电流advanced/oscilloscope.py:使用请求/响应测量的 GUI 示波器advanced/oscilloscope_stream.py:使用流式测量模式的 GUI 示波器advanced/oc_monitor_usb2_7p.py:USB2 7P 型号过流监控advanced/user_callback_example.py:注册用户回调advanced/multi_device_channel_control.py:发现并控制多台设备

在包根目录下运行 demo,例如:
python examples/power_control_example.py
python examples/advanced/oscilloscope.py
集成到项目¶
通过导入 smartusbhub 库即可集成到你的项目之中。
导入
smartusbhub库到你的工程:from smartusbhub import SmartUSBHub
初始化
SmartUSBHub实例:通过自动扫描连接设备:
hub = SmartUSBHub.scan_and_connect()
通过指定串口号连接设备:
hub = SmartUSBHub("串口路径") # 例子: hub = SmartUSBHub("/dev/cu.usbmodem132301")
用户接口¶
设备连接¶
scan_and_connect()¶
描述: 扫描可用的 Smart USB Hub 设备,并连接到第一个有效设备。
返回值:
SmartUSBHub 实例(如果找到设备),否则返回
None。
示例:
hub = SmartUSBHub.scan_and_connect()
connect(port)¶
描述: 连接到指定的Smart USB Hub 设备。
参数:
port: 要连接的串口名称。
示例:
hub.connect("/dev/cu.usbmodem132301")
设备断开链接¶
disconnect()¶
描述:断开当前的Smart USB Hub 设备。
示例:
hub.disconnect()
获取通道列表¶
get_channels()¶
描述: 返回当前连接产品的所有有效通道编号,通道编号从 1 开始。
返回值:
tuple: 当前设备可用通道,例如
(1, 2, 3, 4)或(1, 2, 3, 4, 5, 6, 7)。
示例:
channels = hub.get_channels() hub.set_channel_power(*channels, state=1)
控制通道电源开关¶
set_channel_power(*channels, state)¶
描述: 设置指定通道的电源状态。
参数:
*channels(int): 要控制的通道。state(int):1开启电源,0关闭电源。
返回值:
bool: 如果命令设置成功返回
True,否则返回False。
示例:
hub.set_channel_power(1, 2, state=1)
获取通道电源状态¶
get_channel_power_status(*channels)¶
描述: 查询指定通道的电源状态。
参数:
*channels(int): 要查询的通道,可变参数形式,可用通道可通过 hub.get_channels() 获取。
返回值:
dict或int或None: 如果查询多个通道,返回包含通道状态的字典;如果查询单个通道,返回该通道的状态;若超时则返回None。
示例:
status = hub.get_channel_power_status(1, 2)
控制通道电源互锁¶
set_channel_power_interlock(channel)¶
描述: 设置指定通道或所有通道的互锁模式。
参数:
channel(int或None): 要设置的通道。如果为None,则关闭所有通道。
返回值:
bool: 如果命令设置成功返回True,否则返回False。
示例:
hub.set_channel_power_interlock(1)
控制通道USB数据开关¶
set_channel_usb2_dataline(*channels, state)¶
描述: 设置指定通道的USB数据开关状态。
参数:
*channels(int): 要更新的通道,可变参数形式,可用通道可通过 hub.get_channels() 获取。state(int):1连通 D+ D-的物理连接,0断开D+ D-的物理连接。
返回值:
bool: 如果命令设置成功返回True,否则返回False。
示例:
连通 通道1 的数据信号
hub.set_channel_usb2_dataline(1,state=1)
获取通道USB数据开关状态¶
get_channel_usb2_dataline_status(*channels)¶
描述: 查询指定通道的USB数据开关状态。
参数:
*channels(int): 要查询的通道,可变参数形式,可用通道可通过 hub.get_channels() 获取。
返回值:
dict或None: 包含通道状态的字典,若超时则返回None。
示例:
获取 通道2 的数据信号连接状态
status = hub.get_channel_usb2_dataline_status(1, 2)
获取通道电压¶
注意: 此API仅适用于 带有电压、电流检测的 型号。
get_channel_voltage(channel)¶
描述: 查询单个通道的电压。
参数:
channel(int): 要查询的通道。
返回值:
int或None: 通道的电压值(mV),若超时则返回None。
示例:
获取 通道1 的 电压值
voltage = hub.get_channel_voltage(1)
获取通道电流¶
注意: 此API仅适用于 带有电压、电流检测的 型号。
get_channel_current(channel)¶
描述: 查询单个通道的电流。
参数:
channel(int): 要查询的通道。
返回值:
int或None: 通道的电流值(mA),若超时则返回None。
示例:
获取 通道1 的 电流值
current = hub.get_channel_current(1)
批量获取通道电压/电流¶
注意: 此 API 仅适用于 带有电压、电流检测的 型号。
get_channel_measurements(*channels)¶
描述: 一次请求读取一个或多个通道的电压、电流测量值。未指定通道时,读取当前产品的所有有效通道。
参数:
*channels(int): 要查询的通道,可变参数形式,可用通道可通过hub.get_channels()获取。
返回值:
dict或None: 返回{通道号: {"voltage": mV, "current": mA, "fresh": bool, "stale": bool, "valid": bool}},若超时或无有效数据则返回None。
示例:
measurements = hub.get_channel_measurements(1, 2) all_measurements = hub.get_channel_measurements(*hub.get_channels())
连续测量数据输出¶
注意: 此 API 仅适用于支持连续测量数据输出的型号。
set_channel_measurement_stream(*channels, enabled=True, wait_ack=True)¶
描述: 开启或关闭指定通道的连续测量数据输出。未指定通道时,默认作用于当前产品的所有有效通道。
参数:
*channels(int): 要输出测量数据的通道。enabled(bool):True开启,False关闭。wait_ack(bool): 是否等待设备应答。
返回值:
bool: 成功返回True,超时返回False。
示例:
hub.set_channel_measurement_stream(*hub.get_channels(), enabled=True)
get_stream_channel_measurements(*channels, timeout=None, wait_new_sample=True)¶
描述: 等待下一帧连续测量数据并返回指定通道的测量值。调用前需要先开启连续测量数据输出。
参数:
*channels(int): 要读取的通道。timeout(float): 等待超时时间,单位为秒;不传则使用默认通信超时。wait_new_sample(bool):True时等待新的采样点,False时接受下一帧数据。
返回值:
dict或None: 返回包含voltage、current、sample_tick、sample_period_ms等字段的字典,超时返回None。
示例:
data = hub.get_stream_channel_measurements(1, 2, timeout=1.0)
get_latest_measurements(*channels)¶
描述: 直接读取后台接收线程缓存的最新测量值,不阻塞等待新数据。通常与连续测量数据输出配合使用。
参数:
*channels(int): 要读取的通道。
返回值:
dict或None: 返回最新缓存测量值;如果还没有收到测量数据,则返回None。
示例:
latest = hub.get_latest_measurements(*hub.get_channels())
获取过流状态¶
注意: 此 API 仅适用于支持过流状态监控的型号,例如 SmartUSBHub Pro 7CH USB2.0 ADV。
get_channel_oc_status()¶
描述: 查询每个通道的过流实时状态和锁存状态。
返回值:
dict或None: 返回{通道号: {"active": bool, "latch": bool}}。active表示当前过流状态,latch表示锁存过流事件。若超时则返回None。
示例:
oc_status = hub.get_channel_oc_status()
clear_channel_oc_latch(*channels)¶
描述: 清除指定通道的过流锁存状态。未指定通道时,清除所有通道的锁存状态。
参数:
*channels(int): 要清除锁存状态的通道。
返回值:
bool: 成功返回True,超时返回False。
示例:
hub.clear_channel_oc_latch(1, 2) hub.clear_channel_oc_latch()
设置通道电源的上电默认状态¶
set_default_power_status(*channels,enable,status)¶
描述: 设置指定通道的上电默认电源状态。
参数:
*channels(int): 要设置的通道,可变参数形式,可用通道可通过 hub.get_channels() 获取。enable(int):1启用默认状态,0禁用默认状态。status(int): 1 默认打开电源,0 默认关闭电源
示例:
通道1、2、3、4上电默认打开
hub.set_default_dataline_status(1,2,3,4,enable=1,status=0)
通道1、2、3、4上电不使用默认值
hub.set_default_dataline_status(1,2,3,4,enable=0)
获取通道电源的上电默认状态¶
get_default_power_status(self,*channels)¶
描述: 查询一个或多个通道电源的默认上电状态
参数:
*channels(int): 要查询的通道,可变参数形式,可用通道可通过 hub.get_channels() 获取。
返回值:
dict或None: {通道号: {“enabled”: 是否启用, “value”: 状态}},其中 enabled 为 0(禁用)或 1(启用),value 为 0(默认关闭)或 1(默认开启)。若超时则返回
None。
示例:
获取通道1、2、3、4的电源上电默认状态
hub.get_default_power_status(1,2,3,4)
返回:
{1: {'enabled': 0, 'value': 0}, 2: {'enabled': 0, 'value': 0}, 3: {'enabled': 0, 'value': 0}, 4: {'enabled': 0, 'value': 0}}
设置通道数据连接的上电默认状态¶
set_default_dataline_status(*channels,enable,status)¶
描述: 设置指定通道的上电默认数据连接状态。
参数:
*channels(int): 要设置的通道,可变参数形式,可用通道可通过 hub.get_channels() 获取。enable(int):1启用默认状态,0禁用默认状态。status(int): 1 默认连接数据,0 默认断开数据
返回值:
bool: 如果命令设置成功返回True,否则返回False。
示例:
通道1、2、3、4上电默认数据连接
hub.set_default_dataline_status(1,2,3,4,enable=1,status=1)
获取通道数据连接的上电默认状态¶
get_default_dataline_status(self,*channels)¶
描述: 查询一个或多个通道的上电默认数据连接状态。
参数:
*channels(int): 要查询的通道,可变参数形式,可用通道可通过 hub.get_channels() 获取。
返回值:
dict或None: {通道号: {“enabled”: 是否启用, “value”: 状态}},其中 enabled 为 0(禁用)或 1(启用),value 为 0(默认断开)或 1(默认连接)。若超时则返回
None。
示例:
获取通道1、2、3、4的数据连接的上电默认状态
hub.get_default_dataline_status(1,2,3,4)
返回:
{1: {'enabled': 0, 'value': 1}, 2: {'enabled': 0, 'value': 1}, 3: {'enabled': 0, 'value': 1}, 4: {'enabled': 0, 'value': 1}}
设置断电状态记忆¶
set_auto_restore(enable)¶
描述: 启用或禁用断电状态恢复。
参数:
enable(bool):True启用,False禁用。
返回值:
bool: 如果命令设置成功返回True,否则返回False。
示例:
启用断电状态恢复
hub.set_auto_restore(True)
设置断电状态记忆¶
get_auto_restore_status()¶
描述: 查询是否启用断电状态恢复
返回值:
int 或 None: 1 表示启用, 0 表示禁用, None 表示设备无响应.
示例:
启用断电状态恢复
status = hub.get_auto_restore()
设置按钮控制¶
获取按钮控制状态¶
设置设备地址¶
set_device_address(address)¶
描述: 设备地址用于在多台集线器连接的场景中,标识和区分各个集线器。
参数:
int:地址的编号由用户自定义,其取值范围为:0x0000 - 0xFFFF
返回值:
int或None:1表示启用,0表示禁用,若无响应则返回None。
提示:
创建SmartUSBHub实例时会自动获取连接设备的地址,不同SmartUSBHub实例可以通过地址区分。
示例:
设置设备地址为
0x0001hub.set_device_address(0x0001)
获取设备地址¶
get_device_address()¶
描述: 获取设备的地址。
返回值:
int或None: 设备地址,若无响应则返回None。
示例:
查询设备地址
device_address = hub.get_device_address()
设置设备的操作模式¶
set_operate_mode(mode)¶
描述: 设置设备的操作模式。
参数:
mode (int): 操作模式(
0为普通模式,1为互锁模式)。
返回值:
bool: 如果命令设置成功返回
True,否则返回False。
注意:
互锁模式下,控制只能用互锁指令。
示例:
设置设备为普通模式
hub.set_operate_mode(0)
获取设备的操作模式¶
get_operate_mode()¶
描述: 查询设备的当前操作模式。
返回值:
int或None: 当前操作模式,若无响应则返回None。
示例:
查询设备操作模式
mode = hub.get_operate_mode()
获取设备信息¶
get_device_info()¶
描述: 获取集线器的 ID、硬件版本、固件版本、操作模式和按钮控制状态。
返回值:
dict: 包含设备信息的字典。
示例:
info = hub.get_device_info() print(info)
获取产品类型¶
get_product_type()¶
描述: 查询当前连接设备的产品类型 ID。
返回值:
int或None: 产品类型 ID,若无响应则返回None。
示例:
product_type = hub.get_product_type()
获取产品名称¶
get_product_name()¶
描述: 查询当前连接设备的产品名称,例如
HBP_USB2_4CH或HBP_USB2_7CH_ADV。返回值:
str或None: 产品名称,若无响应则返回None。
示例:
product_name = hub.get_product_name()
获取最大通道数¶
get_max_channels()¶
描述: 查询当前设备的最大通道数量。新代码通常应优先使用
get_channels()获取实际可用通道列表。返回值:
int或None: 最大通道数量;旧固件可能不支持该命令,此时返回None。
示例:
max_channels = hub.get_max_channels() channels = hub.get_channels()
获取设备序列号¶
get_serial_no()¶
描述: 查询设备序列号。
返回值:
str或None: 设备序列号;如果设备未提供序列号,可能返回"N/A"。
示例:
serial_no = hub.get_serial_no()
恢复出厂设置¶
factory_reset()¶
描述: 将设备重置为出厂设置。
返回值:
bool: 如果命令设置成功返回True,否则返回False。
示例:
hub.factory_reset()
获取固件版本¶
get_firmware_version()¶
描述: 查询设备的固件版本。
返回值:
int或None: 固件版本,若无响应则返回None。
示例:
firmware_version = hub.get_firmware_version()
获取硬件版本¶
get_hardware_version()¶
描述: 查询设备的硬件版本。
返回值:
int或None: 硬件版本,若无响应则返回None。
示例:
hardware_version = hub.get_hardware_version()
注册用户回调¶
register_callback(cmd, callback)¶
描述: 为指定的命令注册一个用户回调函数。当设备返回该命令的应答时,回调函数会被触发。
参数:
cmd (int): 要注册回调的命令。
callback (function): 当命令的 ACK 被接收到时执行的回调函数。回调函数应接受两个参数:
channel (int): 触发回调的通道编号。
status (int): 通道的状态值。
返回值:
无返回值。
注意事项:
如果 cmd 不在支持的命令列表中,将记录警告日志,并不会注册回调。
回调函数的签名应与设备返回的数据结构匹配。
CMD宏
含义
CMD_GET_CHANNEL_POWER_STATUS
获取通道电源开关值
CMD_SET_CHANNEL_POWER
控制通道电源
CMD_SET_CHANNEL_POWER_INTERLOCK
控制通道电源互锁
CMD_SET_CHANNEL_DATALINE
控制通道USB数据开关
CMD_GET_CHANNEL_DATALINE_STATUS
获取通道USB数据开关状态
CMD_GET_CHANNEL_VOLTAGE
获取通道电压
CMD_GET_CHANNEL_CURRENT
获取通道电流
CMD_SET_BUTTON_CONTROL
启用/禁用 按键控制
CMD_GET_BUTTON_CONTROL_STATUS
获取按键控制状态
CMD_SET_DEFAULT_POWER_STATUS
设置通道默认电源状态
CMD_GET_DEFAULT_POWER_STATUS
获取通道默认电源状态
CMD_SET_DEFAULT_DATALINE_STATUS
设置通道默认数据连接状态
CMD_GET_DEFAULT_DATALINE_STATUS
获取通道默认数据连接状态
CMD_SET_AUTO_RESTORE
启用/禁用 断电保存
CMD_GET_AUTO_RESTORE_STATUS
获取断电保存是否启用
CMD_SET_DEVICE_ADDRESS
设置设备的地址,用于在多台集线器连接的场景中,标识和区分各个集线器
CMD_GET_DEVICE_ADDRESS
获取设备的地址,用于在多台集线器连接的场景中,标识和区分各个集线器
CMD_SET_OPERATE_MODE
设置设备工作模式 普通/互锁
CMD_GET_OPERATE_MODE
获取设备工作模式
CMD_FACTORY_RESET
恢复出厂设置
CMD_GET_FIRMWARE_VERSION
获取固件版本号
CMD_GET_HARDWARE_VERSION
获取硬件版本号
示例:
设置按键回调,当按键按下时,产生回调
def button_press_callback(channel, status): print("Button press detected on channel", channel, "with power status", status) hub.register_callback(CMD_GET_CHANNEL_POWER_STATUS, button_press_callback)