NI GPIB-USB-HS on Windows 11
1st version 10/07/2026
General
This guide describes how to install and use anNational Instruments GPIB-USB-HS (USB, IEEE-488 GPIB Instrument Control Device) on Windows 11 using NI-488.2.
The NI GPIB-USB-HS can be used simply by installing NI’s standard NI-488.2 software package.
The installation is straightforward and does not require any adapter-specific driver modifications.
Several standard graphical utility applications are installed together with NI-488.2, allowing you to easily check the operation of the GPIB adapter and connected GPIB devices.
Some simple examples of how to use these utilities are provided below for reference.
Test Configurations
HP EliteDesk 800
- i5-10600K – 16GB RAM – Intel UHD Graphics 630 (onboard)
- Windows 11-Pro 25H2, Clean-installation
- ni-488.2_26.5_online, Python 3.14.7
HP ENVY 17t-s100
- Intel Core i7-6700HQ – 16 GB RAM – Intel HD Graphics 530
- Windows 11-Home 25H2
- ni-488.2_26.5_online, Python 3.14.5
USB-GPIB adapter: NI GPIB-USB-HS
This adapter was purchased as a new item from an eBay seller named “NI Grocery Store” for $50 in May 2026.






NI-488.2 Drivers and Utilities Installation
1. Download NI-488.2
https://www.ni.com/en/support/downloads/drivers/download.ni-488-2.html > 607133

Downloaded file:

2. Installation
Disconnect the GPIB adapter’s USB cable from the PC before starting the installation.
Double click the application in Downloads folder.
All default and Next.
Check “Agree” and Next.
Check “Disable Windows Fast Startup” and Next.
✎ Note
During the installation, an option labeled “Disable Windows Fast Startup” is displayed.
Windows Fast Startup is normally enabled by default in Windows 11. However, disabling it is recommended for NI-488.2 to ensure that the GPIB hardware and its drivers are fully initialized when Windows starts.
This option is checked by default in the NI-488.2 installer, so leave it checked and continue with the installation.
Next and the installations begin.
They took 25 minutes on my PC to complete.
Agree to update.
Reboot Windows.
3. Check
Connect the GPIB-USB-HS to the GPIB instrument and turn on the instrument.
Connect the USB cable to a USB port on the PC.
3-1. Check Device Manager
The GPIB-USB-HS should appear in Device Manager as shown below:

3-2. Check LEDs on GPIB-USB-HS
The READY LED will light up. Some documentation describes the LED as green, but on my model, it is orange (dim orange).
The ACTIVE LED (dim green) blinks during communication.

The installation of NI-488.2 was completed
The drivers for the NI-GPIB-USB-HS, along with several utility programs, have now been installed. The NI-GPIB-USB-HS is now ready for use.
3-3. Precautions When Using Multiple GPIB Adapters
- If you subsequently install Keysight IO Libraries Suite, you can also use a Keysight/Agilent 82357B on the same Windows installation and switch between the two GPIB adapters as needed.
- When both NI-488.2 and Keysight IO Libraries Suite are installed, the Keysight 82357B may be assigned to
GPIB1instead ofGPIB0. Check the VISA resource string in “Keysight Connection Expert” before running the Python program. In my test, using the wrong GPIB interface number resulted in the following error:
pyvisa.errors.VisaIOError:VI_ERROR_ALLOC Insufficient system resources……
NI Utility Applications
1. View GPIB Devices and Test Communication with NI MAX

NI MAX detects and displays the USB-GPIB adapter and GPIB devices such as DMMs.
Check the GPIB interface number. If it is GPIB1 instead of GPIB0, change the interface number in the Python source code accordingly.
The VISA resource string, such as GPIB0::13::INSTR, is used in Python applications.
1-1. Display GPIB Interface Detail
The automatically detected USB-GPIB adapter appears in the Explorer.
Select a device to display its details in the pane on the right.

1-2. Display GPIB Device Detail
Select the USB-GPIB adapter and click the Scan for Instruments tab.
NI MAX will scan for GPIB instruments and display the detected instruments in the Explorer. If they are hidden, click “>” to expand the list and display them.
Select a GPIB device to display its details in the pane on the right.

If multiple GPIB devices are connected, they are displayed after the Scan and you can check each Instrument ID and GPIB address.
1-3. Test Communication with Communicator
Communicator is a GUI application that allows you to send commands and view the responses.

1-4. Useful HP 34401A Commands for Communicator
| Command | Description | Button |
|---|---|---|
*IDN? | Queries the instrument identification information HEWLETT-PACKARD,34401A,0,7-5-2 | Query |
MEAS:VOLT:DC? | Measures DC voltage and returns the measured value received string: ‘+5.25970000E-05’ | Query |
MEAS:VOLT:AC? | Measures AC voltage and returns the measured value received string: ‘+1.80423900E-03’ | Query |
MEAS:RES? | Measures resistance and returns the measured value received string: ‘+1.00052360E+06’ | Query |
CONF:VOLT:DC | Configures the DMM for DC voltage measurement | Write |
CONF:VOLT:AC | Configures the DMM for AC voltage measurement | Write |
CONF:RES | Configures the DMM for resistance measurement | Write |
READ? | Performs a measurement using the current configuration | Query |
*RST | Resets the instrument to its default settings | Write |
*CLS | Clears the instrument status registers | Write |
2. Test Communication with GPIB Interactive Control
GPIB Interactive Control is essentially the NI-488.2 equivalent of ibtest on Linux.
It provides a simple way to verify communication with a GPIB instrument without writing a program.
There are two ways to open Interactive Control.

- Double click the application icon
- Select the Interactive Control tab on the NI-MAX
GPIB Interactive Control runs on command mode screen.
The following example retrieves information from a DMM at GPIB0 and address 13:
Interactive Control
Copyright 2022 National Instruments Corporation
All rights reserved.
Type 'help' for help or 'q' to quit.
ud0: ibdev 0 13 0 10 1 0
ud1: ibwrt "*IDN?"
[0100] ( cmpl )
count: 5
ud1: ibrd 100
[2100] ( end cmpl )
count: 31
48 45 57 4c 45 54 54 2d H E W L E T T -
50 41 43 4b 41 52 44 2c P A C K A R D ,
33 34 34 30 31 41 2c 30 3 4 4 0 1 A , 0
2c 37 2d 35 2d 32 0a , 7 - 5 - 2 .

ibdev 0 13 0 10 1 0 Command details:
Board ID (Interface number GPIB: 0) = 0
Primary address (Device GPIB address: 13) = 13
Secondary address(None: 0) = 0
Timeout (0.3sec: 10) = 10
EOI (End Of Transmission Assert: 1) = 1
EOS (End Of String Not used : 0) = 0
3. Capture GPIB Communication with NI IO Trace

The communication sequence on a correctly working Windows 11 system was captured with NI IO Trace and used as a reference for debugging the Linux driver.
NI IO Trace captures GPIB communication at the software API level. It records calls to NI-488.2 and NI-VISA functions, including commands, responses, parameters, and return values. It does not capture raw USB packets or electrical signals on the GPIB bus.
Use the Start and Stop buttons to control the capture.

3-1. Capture Sample with GPIB Interactive Control
Sent these commands and received their responses:
- ibdev 0 13 0 10 1 0
- ibwrt “*IDN?”
- ibrd 100

3-2. Capture Sample with Communicator
Sent these commands and received their responses:
- MEAS:VOLT:DC? – Query (Query=Write + Read)
- MEAS:RES? – Query
- CONF:VOLT:DC – Write
- READ? – Query
- READ? – Query
- READ? – Query

Test with Python and PyVISA
1. Install Python and PyVISA
1-1. Download Python and Install
Download Python from here: https://www.python.org/downloads/

Install
- Choose version; in this example, I selected Python 3.13.
- Update setting now? [y/N] y
- Add commands directory to your PATH now? [y/N] y
- Install CPython now? [Y/n] y
Check the installed Python version:
python --version
Python 3.14.7 (Updated automatically to 3.14)
✎ Note
Although I initially selected Python 3.13, the installed version was Python 3.14.7. This appears to have occurred because I answered y to “Update setting now?” during installation.
1-2. Install PyVISA
PyVISA is a Python library that provides access to VISA-compatible instruments.
Install PyVISA after installing Python:
python -m pip install pyvisa
2. Test GPIB Interactively with Python
Start the Python interactive mode with the following command:
python
You can send a query directly to the GPIB device and receive the response without creating a Python script file.
✎ Note
Change the GPIB Interface Number and GPIB Address to match your instrument.
The interface number is usually GPIB0, but it may be GPIB1 on Windows depending on your environment.
The GPIB address is 13 in the next sample.
Paste the following code at the >>> prompt:
import pyvisa
rm=pyvisa.ResourceManager()
inst=rm.open_resource('GPIB0::13::INSTR')
print(inst.query('*IDN?'))
inst.close()
rm.close()
Press Enter to execute the code. The instrument ID will then be displayed:
HEWLETT-PACKARD,34401A,0,7-5-2
Enter quit() to exit Python.
3. Python CLI app for single 34401A
3-1. File
File name: dmm1-cli.py
Download here: https://github.com/moriyasum/GPIB
✎ Note
Change the GPIB address in the source to match your instrument.
The interface number is usually GPIB0, but it may be GPIB1 on Windows depending on your environment.
The GPIB address is 13 in the next sample.
3-2. Execution:
python .\dmm1-cli.py
3-3. Output
Interface: GPIB0 , GPIB address: 13
Instrument ID: HEWLETT-PACKARD,34401A,0,7-5-2
0 DC Voltage = +3.65830000E-05 V
1 DC Voltage = +5.06870000E-05 V
2 DC Voltage = +4.25880000E-05 V
3 DC Voltage = +5.31860000E-05 V
4 DC Voltage = +4.21300000E-05 V
3-4. Python Source Code
import pyvisa
import time
# GPIB address, Interface number
adr = "13"
interface = "GPIB0"
# Open VISA
rm = pyvisa.ResourceManager()
dmm = rm.open_resource(f"{interface}::{adr}::INSTR")
dmm.timeout = 5000
# Read instrument ID
print("Interface: ", interface, ", GPIB address: ", adr)
print("Instrument ID: ", dmm.query("*IDN?").strip())
for i in range(5): # set number of loop
# Configure the DMM for DC voltage measurement
dmm.write("CONF:VOLT:DC")
# Take a measurement
value = dmm.query("READ?")
print(i, "DC Voltage =", value.strip(), "V")
time.sleep(2)
# Close the instrument
dmm.close()
rm.close()
4. Python GUI Simple App for 1x 34401A
4-1. File
File name: dmm1-gui.py
Download here: https://github.com/moriyasum/GPIB
✎ Note
Change the GPIB address in the source to match your instrument.
The interface number is usually GPIB0, but it may be GPIB1 on Windows depending on your environment.
The GPIB address is 13 in the next sample.
4-2. Execution:
python .\dmm1-gui.py
4-3. Output

4-4. Python Source Code
import tkinter as tk
import pyvisa
# GPIB address, Interface number
adr = "13"
interface = "GPIB0"
# Open VISA
rm = pyvisa.ResourceManager()
dmm = rm.open_resource(f"{interface}::{adr}::INSTR")
dmm.timeout = 5000
# Read instrument ID
idn = dmm.query("*IDN?").strip()
# Set to Configure DC-V measurement mode
dmm.write("CONF:VOLT:DC")
# GUI
root = tk.Tk()
root.title("HP 34401A DC Voltage Monitor")
root.geometry("500x250")
running = False
voltage_text = tk.StringVar(value="-------- V")
status_text = tk.StringVar(value="STOPPED")
def measure():
if not running:
return
try:
voltage = float(dmm.query("READ?"))
voltage_text.set(f"{voltage:.8f} V")
status_text.set("RUNNING")
except Exception as e:
status_text.set("ERROR: " + str(e))
if running:
root.after(500, measure)
def start():
global running
if not running:
running = True
measure()
def stop():
global running
running = False
status_text.set("STOPPED")
def close():
dmm.close()
rm.close()
root.destroy()
tk.Label(
root,
text=idn,
font=("Arial", 11)
).pack(pady=15)
tk.Label(
root,
text=f"Interface:{interface} GPIB Address:{adr}",
font=("Arial", 12)
).pack()
tk.Label(
root,
textvariable=voltage_text,
font=("Courier", 28, "bold")
).pack(pady=15)
tk.Label(
root,
textvariable=status_text
).pack()
button_frame = tk.Frame(root)
button_frame.pack(pady=15)
tk.Button(
button_frame,
text="START",
command=start,
width=10
).pack(side="left", padx=5)
tk.Button(
button_frame,
text="STOP",
command=stop,
width=10
).pack(side="left", padx=5)
tk.Button(
button_frame,
text="EXIT",
command=close,
width=10
).pack(side="left", padx=5)
root.protocol("WM_DELETE_WINDOW", close)
root.mainloop()
5. Python CLI App for 3x 34401A
34401A x 3, GPIB address=11,12,13


5-1. File
File name: dmm3-cli.py
Download here: https://github.com/moriyasum/GPIB
✎ Note
Change the GPIB address in the source to match your instrument.
The interface number is usually GPIB0, but it may be GPIB1 on Windows depending on your environment.
The GPIB address is 13 in the next sample.
5-2. Execution:
python .\dmm3-cli.py
5-3. Output
Interface:GPIB0
Instrument 1: Addr=11 HEWLETT-PACKARD,34401A,0,4-1-1
Instrument 2: Addr=12 HEWLETT-PACKARD,34401A,0,5-1-1
Instrument 3: Addr=13 HEWLETT-PACKARD,34401A,0,7-5-2
0 DC Volt: 11= +1.87790000E-05 V, 12= +2.36160000E-05 V, 13= +5.30810000E-05 V
1 DC Volt: 11= +2.15320000E-05 V, 12= +2.77230000E-05 V, 13= +5.66400000E-05 V
2 DC Volt: 11= +2.97650000E-05 V, 12= +3.68070000E-05 V, 13= +4.06650000E-05 V
3 DC Volt: 11= +2.49260000E-05 V, 12= +3.44870000E-05 V, 13= +4.64610000E-05 V
4 DC Volt: 11= +1.94830000E-05 V, 12= +2.88770000E-05 V, 13= +5.49390000E-05 V
5 DC Volt: 11= +2.34430000E-05 V, 12= +2.89390000E-05 V, 13= +4.86330000E-05 V
6 DC Volt: 11= +2.75530000E-05 V, 12= +3.59260000E-05 V, 13= +4.76780000E-05 V
7 DC Volt: 11= +2.59310000E-05 V, 12= +3.61620000E-05 V, 13= +4.58460000E-05 V
8 DC Volt: 11= +1.89050000E-05 V, 12= +2.74250000E-05 V, 13= +5.62350000E-05 V
9 DC Volt: 11= +2.34680000E-05 V, 12= +2.69790000E-05 V, 13= +5.36700000E-05 V
5-4. Python Source Code
import pyvisa
import time
# GPIB addresses, Interface number
adr1 = "11"
adr2 = "12"
adr3 = "13"
interface = "GPIB0"
# Open VISA
rm = pyvisa.ResourceManager()
dmm1 = rm.open_resource(f"{interface}::{adr1}::INSTR")
dmm1.timeout = 5000
dmm2 = rm.open_resource(f"{interface}::{adr2}::INSTR")
dmm2.timeout = 5000
dmm3 = rm.open_resource(f"{interface}::{adr3}::INSTR")
dmm3.timeout = 5000
print(f"Interface:{interface}")
# Read instrument ID
print(f"Instrument 1: Addr={adr1} ", dmm1.query("*IDN?").strip())
print(f"Instrument 2: Addr={adr2} ", dmm2.query("*IDN?").strip())
print(f"Instrument 3: Addr={adr3} ", dmm3.query("*IDN?").strip())
# Set to Configure DC-V measurement mode
dmm1.write("CONF:VOLT:DC")
dmm2.write("CONF:VOLT:DC")
dmm3.write("CONF:VOLT:DC")
for i in range(10): # Set how many sampling times
# Send READ command and print out the value
value = dmm1.query("READ?")
print(i, "DC Volt:", adr1+ "=", value.strip(), "V, ", end="")
value = dmm2.query("READ?")
print(adr2+ "=", value.strip(), "V, ", end="")
value = dmm3.query("READ?")
print(adr3+ "=", value.strip(), "V")
time.sleep(0.5)
# Close the instrument
dmm1.close()
dmm2.close()
dmm3.close()
rm.close()
6. Python GUI app for 3x 34401A Data Logger
6-1. File
File name: dmm3-gui-graph-record.py
Download here: https://github.com/moriyasum/GPIB
✎ Note
Change the GPIB address in the source to match your instrument.
The interface number is usually GPIB0, but it may be GPIB1 on Windows depending on your environment.
The GPIB address is 13 in the next sample.
6-2. Execution:
python .\dmm3-gui-graph-record.py
6-3. Output

Recording file sample

6-4. Python Source Code
Please check the GitHub link below for the full source code.
https://github.com/moriyasum/GPIB/blob/main/dmm3-gui-graph-record.py
Conclusion
The NI GPIB-USB-HS used in this project was successfully operated on Windows 11 using NI’s official NI-488.2 software and driver package.
Communication was verified with the same PyVISA and Python programs used in the Ubuntu tests, including examples using one and three HP 34401A multimeters. The three-instrument GUI/data-logger also operated successfully without requiring changes to the measurement code.
Unlike the Ubuntu installation described in the companion guide, no driver modification or adapter-specific patch was required. With NI-488.2 installed, the adapter operated normally using the manufacturer’s standard Windows driver environment.