N7SD logo

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-GPIB-HS view
NI-GPIB-USB-HS
Top view NI-GPIB-USB-HS
NI-GPIB-USB-HS Top View
NI-GPIB-USB-HS GPIB Connector
GPIB Connector
NI-GPIB-USB-HS Label
NI-GPIB-USB-HS Label
34401A Front
34401A Multimeter (GPIB address = 13)
34401A-Back
Back with GPIB cable and Ground wire

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

NI-488.2 Download site

Downloaded file:

NI-488.2_26.5_online 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:

    Device Manager NI-HS is detected

    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.

    NI-GPIB-USB-HS-LED

    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

    1. 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.
    2. When both NI-488.2 and Keysight IO Libraries Suite are installed, the Keysight 82357B may be assigned to GPIB1 instead of GPIB0. 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 app icon

    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.

    NI-MAX Setup Screen

    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.

    NI-MAX-34401A-Setting flow

    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.

    NI488.2-Communicator Screen

    1-4. Useful HP 34401A Commands for Communicator

    CommandDescriptionButton
    *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:DCConfigures the DMM for DC voltage measurementWrite
    CONF:VOLT:ACConfigures the DMM for AC voltage measurementWrite
    CONF:RESConfigures the DMM for resistance measurementWrite
    READ?Performs a measurement using the current configurationQuery
    *RSTResets the instrument to its default settingsWrite
    *CLSClears the instrument status registersWrite

    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.

    GPIB Interactive Control icon
    • 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 .
    
    GPIB Interactive Control Terminal image

    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

    NI IO Trace app icon

    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.

    NI IO Trace Start/Stop button

    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
    NI IO Trace capturing screen

    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
    NI-IO-Trace with Communicator capturing screen

    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/

    Download Python install manager button

    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

    GUI single DMM app screen

    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

    3x34401A-Front
    3x34401A-NI-Back

    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

    dmm3-gui-logger-App-Screenshot

    Recording file sample

    logger 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.