Firmware Version: V1.3
GPIBee is a compact, multi-interface GPIB controller designed for laboratory, industrial, and automated test environments. It combines Ethernet 🌐, USB 🔌, and UART communication with full GPIB bus control, discovery mechanisms, a built-in web interface, and an internal SCPI command system. The device automatically selects the most suitable communication mode and provides consistent behavior across all interfaces.
GPIBee supports modern workflows while remaining compatible with legacy GPIB instruments. It offers flexible connectivity, robust protocol handling, and a powerful configuration interface accessible through Ethernet, USB, or SCPI.
GPIBee is intentionally designed to remain isolated from external network resources. It operates without a gateway, does not issue DNS queries, and never initiates connections to outside servers.
When connected to a network, GPIBee operates as a LAN-based GPIB controller. Two protocols are available:
The Ethernet interface supports DHCP with fallback to a static IP, static addressing without DHCP, mDNS, SSDP, and full GPIB subaddressing. Network parameters such as hostname, IP address, subnet mask, and timing are fully configurable.
Supported link modes:
GPIBee provides three selectable USB modes. Only one mode is active at a time.
USB supports both High-Speed (480 Mbps) and Full-Speed (12 Mbps) operation. A forcing to 12 Mbps operation is possible.
The device enumerates as a USB Ethernet adapter (using USB CDC NCM class). An IP address is automatically assigned to the host PC by the integrated DHCP server, and GPIBee becomes reachable via:
This mode works independently of whether GPIB instruments are connected or not.
A virtual serial port is exposed, providing the ++ protocol over UART. Baud rate and parity settings are ignored and not relevant for this virtual UART, simplifying integration with embedded systems.
GPIBee behaves like the classic USBGPIB V2 adapter:
| Interface | Protocol | Supports more than one GPIB device | Subaddressing | SRQ signalling |
Clearing | Triggering | Status byte reading | GoToLocal |
| Ethernet | VXI-11 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| ++ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| USB | Network (VXI-11) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| USBTMC | ⚠️ only with special internal SCPI command |
✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| UART ++ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
GPIBee implements a complete GPIB controller with:
The integrated web interface provides:
GPIBee can be powered via USB or Power over Ethernet. Power selection is independent of the communication interface.
| Scenario | Power Source |
|---|---|
| USB only | USB supplies power |
| Ethernet with PoE | PoE switch or injector |
| Ethernet without PoE | USB provides +5 V power |
USB current draw: max 150 mA, the typical idle current is approximately 80 mA.
A button on the bottom side of GPIBee provides:
After power-on, GPIBee checks for Ethernet connectivity. It waits for a configurable time (default 4 seconds). If no network is detected, it switches to USB mode.
When entering USB mode any of the 3 selected USB interface will enumerate on the PC:
Depending on the interface used, GPIBee appears under different default IP addresses:
192.168.178.3 (can be changed)192.168.2.1 (can
be changed)
GPIBee announces itself via:
This allows automatic visibility in environments such as the Windows Network Explorer. However, you can always connect directly using the IP address.
Simply enter the device IP into your browser:
http://192.168.178.3
or, depending on your setup:
http://192.168.2.1
http://<DHCP-assigned-address> GPIBee supports VXI‑11 over both USB network mode and Ethernet mode. It implements:
Most VISA implementations will automatically detect GPIBee.
Use the standard VXI‑11 VISA resource format:
TCPIP0::<IP>::instX::INSTR Example:
TCPIP0::192.168.3.2::inst0::INSTR The instance name (instX)
selects which GPIB device you want to access.
| Instance | Meaning |
|---|---|
inst0 |
Internal SCPI interface (GPIBee itself) |
inst1 |
GPIB device at primary address 1 |
inst22 |
GPIB device at primary address 22 |
The internal SCPI interface (inst0) allows reading firmware version, configuring settings, and controlling GPIBee (See chapter Interal SCPI interface).
GPIBee supports full IEEE‑488.2 subaddressing.
A subaddressed device is accessed using:
inst<primary>_<secondary>
or:
inst<primary>,<secondary>
Examples:
inst1_0 → Primary
1, Secondary 0 inst1,0 → Primary 1,
Secondary 0 inst5_97 → Primary
5, Secondary 1 (because 97 maps to 1) Supported secondary address ranges:
The prefix inst is conventional but not mandatory.
You may also use items like:
gpib22
gpib1_0
hpib22,1
examplename22 However, some VISA implementations only accept the inst prefix (e.g. R&S Visa), so using instX is recommended for maximum compatibility.
Instead of an underscore _ to seperate primary and secondary address also a comma ,can be used .
For reliable VXI‑11 operation, use a full VISA stack like:
Note: During GPIBee development, several issues were identified in pyvisa‑py, especially around lock handling, abort channel support, and SRQ handling. Most basic operations work, but advanced VXI‑11 features may not.
Most VISA packages include a diagnostic tool:
These tools:
GPIBee implements a USBTMC interface similar to UsbGPIB‑V2, providing a 1:1 connection between the PC and a single GPIB device.
USBTMC devices are automatically detected by:
The USBTMC resource name can be configured via:
GPIBee includes an optional AutoID mechanism:
*IDN?
This is extremely helpful when swapping instruments, but should only be used with instruments that support the *IDN? query. Older instruments will still be operation, but startup with an error being set and might create a beep sound.
USBTMC does not support multiple logical channels. Composite USB devices are not reliably supported by all VISA stacks (e.g., Keysight VISA).
To allow multi‑device access, GPIBee provides an internal SCPI command to switch the active GPIB address. This enables sequential access to multiple devices, but:
For full multi‑device capability with independent logical channels, use:
This provides:
This is the recommended primary connection method for most users.
GPIBee.GFW to the drive.The programmed Firmware version can anytime be checked via:
.TXT
when in bootloader mode*IDN? replyThe firmware version consists out of 3 parts: V1.2.2604151622
| 1 | Major firmware version |
| 2 | Minor firmware version |
| 2604151622 | Build version (auto incremented every time the firmware is newly compiled) |
The Internal SCPI command is used when accessing GPIB address 0. This is the GPIB controllers address and allows changing settings, reading the ID information and triggering e.g. a reset to factory defaults and rebooting.
In case of USBTMC, a special command has to be executed to talk to this internal SCPI device. While the USBTMC Vendor defined messages are implemented, most VISA implementations don't enable those. The normal device dependent message pipe can be used instead, after executing a control in transfer with:
A PyVisa command equivalent is:
dev.control_in(0xa1, 180, 0, 0, 1);
The vendor mode can be left by either calling
SCPI function SYST:COMM:USBTMC:EXITV
or by executing a control in transfer with:
PyVisa example:
dev.control_in(0xa1, 180, 1, 0, 1);
All other protocol modes can access this when addressing primary GPIB address 0, without any custom commands required.
SYST:REB
instead of SYSTEM:REBOOT. Most settings modify non-volatile memory. A reboot or power cycle is recommended after changes to make them active.
GPIB address 0 is reserved for the controller and is used to access this internal SCPI interface.
Returns the manufacturer name, instrument name, serial number, and firmware version separated by commas.
*IDN?
XYPHROLABS,GPIBee,LJN9K,V1.2.2604151253
Reboots GPIBee (similar to a power-cycle).
Rebooting is very quick, but due to network identification or as function
of delaytime settings it can take several seconds to be responsive again.
You will need to terminate the connection and set up a new connection to
be able to talk to GPIBee again.
Example call: SYST:REB
Resets all non-volatile settings to factory
defaults (same as pressing the button 5 times quickly).
A reboot or power cycle afterwards is strongly recommended to activate the
settings.
SYST:PRES
Sets the Ethernet interface IP address. Only private network IP addresses are allowed. Invalid addresses are rejected (e.g. network address or broadcast address).
A private address if from any of those ranges:
SYST:COMM:LAN:IPAD
"192.168.1.150" Returns the currently set IP address.
"192.168.1.2"
Sets the subnet mask. The smallest allowed mask is /29 (255.255.255.248). Invalid masks are rejected.
SYST:COMM:LAN:SUBNET
"255.255.255.0" Returns the currently set subnet mask.
"255.255.255.0"
Enables or disables the DHCP client. Accepts
ON/OFF or 1/0.
SYST:COMM:LAN:DHCP
OFF Returns ON or OFF.
ON
(The DHCP client is active) Sets the DHCP timeout (1–15 seconds). After timeout, static IP settings are used.
SYST:COMM:LAN:DHCP:TIME
5 (selects 5 seconds fallback time to the set static IP) Returns the timeout value.
4
(4 seconds fallback time is selected) Enables or disables mDNS. Affects both Ethernet and USB Network mode.
SYST:COMM:LAN:MDNS
OFF (Turns MDNS off) Returns ON or OFF.
ON
(MDNS is turned on) Enables or disables SSDP discovery. Affects both Ethernet and USB Network mode.
SYST:COMM:LAN:SSDP
OFF Returns ON or OFF.
ON
(SSDP is on) Sets the hostname. Supports {UID}
substitution. Automatically sanitized.
SYST:COMM:LAN:HOST
GPIBee-{UID} Returns the hostname template.
"GPIBee-{UID}"
Enables or disables the ++ protocol on TCP port 1234.
SYST:COMM:LAN:PP
ON Returns ON or OFF.
ON
(++ protocol server on TCP/IP port 1234 is enabled) Selects the USB protocol mode: USBTMC,
NET, or UART.
SYST:COMM:USB:PROT
NET select USB network mode
SYST:COMM:USB:PROT
USBTMC select USBTMC mode
SYST:COMM:USB:PROT
UART select UART ++ protocol mode
Returns the selected mode.
NET
(USB Network mode is selected) Sets the fallback timeout before switching from Ethernet to USB.
SYST:COMM:USB:FALL
5 (selects 5 seconds USB fallback time) Returns the fallback timeout.
4
(4 seconds USBfallbacktime is active) Forces USB Full-Speed mode (12 Mbps).
SYST:COMM:USB:FORCE
OFF (No forcing to 12MBps active) Returns ON or OFF.
OFF
(Full speed forcing is inactive) Set the IP address for USB network mode. The USB network mode subnet mask is fixed to /31 subnet, i.e. 255.255.255.248.
The IP address is automatically corrected,
such that no network address (.0, .8, ...) or broadcast address (.7,
.15, ...) is specified and that a private network address is used.
A private network address is from any of those ranges:
SYST:COMM:USBNET:IPAD
"192.168.5.2" Returns the currently set IP address for USB network mode.
"192.168.3.2"Sets the USBTMC serial number template. The USBTMC serial number is used by VISA implementations in parts of the VISA ressource string.
GPIBee will substitute automatically the following items:
{UID} The 5 character unique serial number of the
GPIBee device{ADDR} The GPIB Address. This will either be
substituted with a single number (primary address) or 2 numbers
(primary and secondary address) as function of the detected
instrument address.
{PADDR} The primary GPIB address. Similar to
{ADDR}, but only a single number will be used, which is the
primary address.
{IDN} This will get replace with the instruments
*IDN? response. When the instrument does not send a reply to a
*IDN? query, it will get replaced with an empty string.{IDN0}, {IDN1}, {IDN2},
{IDN3} return respective string parts of the
instruments *IDN? response.{IDN0} is typically the manufacturer name (e.g.
"Rohde & Schwarz"){IDN1} the instrument name (e.g. "CMU 200"){IDN2} the instruments serial number (e.g.
"102342"){IDN3} the instruments firmware version (e.g.
"V5.22")SYST:COMM:USBTMC:NAME
"GPIBee-{ADDR}-{UID}" Returns the USBTMC serial number template.
GPIBee-{ADDR}-{UID}
Sets the USBTMC startup delay in seconds.
SYST:COMM:USBTMC:DELAY
2 Returns the USBTMC startup delay.
4
(A delay of 4 seconds is active) Exits USBTMC vendor mode and returns to normal GPIB device communication.
SYST:COMM:USBTMC:EXITV
Selects the current GPIB target address (primary or primary+secondary). Pass one or 2 number. The first number is the primary address, the optional second is the secondary address.
SYST:COMM:USBTMC:ADDR 5
SYST:COMM:USBTMC:ADDR 1,0
Returns the selected GPIB address.
5
(primary address 5 is active)1,0
(primary address 5, secondary address 0 (=96) is active) Defines how often a *IDN? query should be
tried in case AUTOid feature is active. Defaults to 0.
After every try GPIBee waits 1 second to ensure the instrument is
responsive. So when setting this parameter to e.g. 5, the whole
procedure can take up to 5 seconds in case the instrument is not
immediately responsive after power-up.
The maximum allowed value is 0, the minimum (and default) value is 0.
Example to define 5 retries.
SYST:COMM:USBTMC:AUTORET 5
Reads back the currently set AUTOid retry count setting
5
(max 5 retries are defined)SYST:COMM:USBTMC:SCANSTARTaddr 5
Reads back the currently set start address for scanning.
5
(Starts scanning with primary address 5) Selects if GPIBee should check during VXI--11
link creation for presence of the requested GPIB device.
If disabled, GPIBee will not check during link creation (=connection) if
the requested GPIB device is present. This will result in faster
connections if a connection is created during situations where a lot of
GPIB traffic is ongoing from other VXI-11 connections.
SYST:COMM:VXI11:PRESENCE
ON to turn the presence check on
SYST:COMM:VXI11:PRESENCE
OFF to turn the presence check off
Returns if the presence check during link creation is turned on or off.
ON
(GPIB presence check is enabled) Some existing VISA libraries (e.g. PyVisa-py
VXI-11) or Software might set too low IO timeout limits. This setting
gives the ability to set a minimum IO timeout, which is applied if the IO
timeout of VXI-11 functions is lower than this value.
The parameter sets the minimum IO timeout in units of milliseconds.
It is not recommended to set this number too high, because VISA
implementations apply also timeouts on the socket communication with a
small margin - even though this would only be noticed when a timeout
actually occurs.
SYST:COMM:VXI11:MINIOTO
10 Sets the minimum IO timeout limit to 10ms.
Returns The currently set minimum timeout in units of milliseconds.
10
(A minimum timeout of 10 ms is active)The VXI-11 specification reserves a generous
amount of 32 bit IO timeout value in units of milliseconds. This means
theoretically an IO timeout could be set to even > 71000 minutes.
To limit the risk of setting accidentally too high IO timeouts this
setting will limit any IO timeout setting to the one specified here.
SYST:COMM:VXI11:MAXIOTO
60000 Sets the maximum IO timeout limit to 60000ms = 60s.
Returns The currently set maximum IO timeout
in units of milliseconds.
Checks whether a GPIB device is present at a given address.
SYST:COMM:GPIB:PRESENT?
5 (checks if a primary address 5 device is present)SYST:COMM:GPIB:PRESENT?
5,3 (checks if a primary address 5, secondary address 3 (=99)
device is present) Example-reply: 1
Device is present
Example-reply: 0
Device is not present
Scan for all available GPIB devices. It can scan for primary address only, but also for devices exposing secondary addresses.
Optional parameter: scan_secondary:
Provide either 1 or ON to scan also for
secondary addresses, provide 0 or OFF to
scan for primary addresses only.
A comma separated list will be returned with
the GPIB addresses. Secondary address are shown in format "1:0"
with the first number being
the primary address and the second being
the secondary address.
The scan duration of a full primary+secondary
scan is about 2.5 seconds. Ensure that you set the timeout accordingly as
the reply is only sent after scan finalization.
The scan duration of a primary address only scan is about only 120ms.
SYST:COMM:GPIB:SCAN?
Scans for primary GPIB addresses only.SYST:COMM:GPIB:SCAN?
0 Scans for primary GPIB addresses only.SYST:COMM:GPIB:SCAN?
1 Scans for primary + secondary GPIB addresses - This scans the
full set of possible GPIB addresses.Example-reply: 4,22,28GPIB
devices with primary addresses 4, 22 and 28 are connected.
Example-reply: "1:0","1:1",22
GPIB devices with 1:0, 1:1 and primary only addresses 22 are
connected.
Set the T1 talker delay in units of nanoseconds. T1 delay is the time between Applying a data word on DIO1..8 lines to signalling with DAV taken low that the data is available and is majorly defined by the settling time of your GPIB infrastructure.
The supported numeric range is 350ns to 2000ns. Numbers outside of that range will be saturated to those limits.
Tuning the T1 delay helps in cases where the instruments are very old or the cable infrastructure is big, but increasing the delay decreases the maximum data rate.
The setting is stored in non volatile configuration memory, but also applied immediately after it is set, without a need to reboot.
Example calls:
SYST:COMM:GPIB:T1TIME
350 Sets the T1 time to 350ns (quickest possible setting).
SYST:COMM:GPIB:T1TIME
1100 Sets the T1 time to 1100ns.
Readout the current T1 time setting. The returned number is the T1 time in units of nanoseconds.
Example call: SYST:COMM:GPIB:T1TIME?
Example reply: 500
The current active T1 time is 500ns.
The ++ protocol is a simple, text-based
control protocol that allows access to multiple GPIB instruments through a
single interface.
GPIBee exposes the ++ protocol in two ways:
You can connect using any terminal program,
either to the virtual COM port or to the TCP/IP port.
Any commands sent to GPIBee must be terminated with CR, LF, or CRLF.
You can send commands to the GPIB controller.
All commands start with ++ ASCII characters.
Any data starting without ++ will be transmitted to the selected GPIB
device address.
Any data transmitted to the GPIB device have to be escaped, i.e.:
43) has to be replaced with the byte sequence 27
43 (ESC +)13) has to be replaced with the byte
sequence 27 13 (ESC CR)10) has to be replaced with the byte
sequence 27 10 (ESC CR)++addr 5
++auto 1
++read
Explanation:
++addr
5++auto
1++readeoi parameter if the instrument is asserting EOI or to read
with termination parameter ASCII code (e.g. 10 or 13) to ensure a quick
response without timeout delays.Turn on automatic read after write or query auto state.
Parameters: [<automode>]. 1 for autoread with eoi, 0 for disabled (default).
Assert interface clear line (IFC) for a short time.
Parameters: None
Enable or disable EOI generation on writes or query state.
Parameters: [<eoi_enabled>]. 1 for enabled (default), 0 for disabled.
Select appending of termination characters on writes or query state.
Parameters: [<eos_mode>]
Enable addition of an ASCII character when reads terminated with EOI - or query enabling state.
Parameters [<eot_enable>]
Set the ASCII character used for eot function (see eot_enable) or query current character.
Parameters: [<char decimal value>]. Allowed range: 0..255
Execute a selective device clear (SDC) to the current selected target GPIB address.
Parameters: None
Execute a goto local (GTL) to the current selected target GPIB address.
Parameters: None.
This enables frontpanel control again as the instrument goes back to local mode (same effect as pressing the Local button on the instrument).
Select device mode (controller or device) or query mode.
Parameters: [<mode>]
Read from the current GPIB device.
Parameters: [termination]
Set or query the timeout in units of ms for
GPIB reads.
The timeout relates not to the overall transfer duration, but to the time
between consecutive data bytes received.
Parameters: [timeout_ms]. Valid range: 1..3000. Default: 500
Select or query if the configuration is automatically saved on changes.
Parameters: [<save_enabled>]. 1=enabled, 0=disabled (default).
Execute a serial poll to either the current device or a selected one.
Parameters: [<primary> [<secondary>]]
If no parameter is specified the current device will be polled.
Read srq line state.
Create a trigger to the current device or a group of devices.
Parameters: [address1 [address2, ...]].
Up to 15 GPIB addresses can be specified. If none is given only the current device will be triggered.
Read the firmware version.
Reset the device. This leads to a reboot.
The connection has to be build up again afterwards.
Return help information about all commands.
GPIBee builds on a small number of excellent
open-source software components.
Their contributions are gratefully acknowledged:
| Software |
Description and usage |
| scpi-parser | A lightweight SCPI command parsing library made by Jan Breuer.
GPIBee uses it to interpret all internal SCPI
commands. scpi-parser license information: BSD 2-Clause License |
| mongoose | A robust and easy-to-integrate networking stack that provides all
network functionality, including the embedded web interface. License information: Mongoose is used under an official commercial license from Cesanta. |
All other SW modules - including the complete GPIB implementation, the USB stack and class drivers, and the VXI-11 server - are fully custom developments created from scratch for GPIBee.
The Information Column shows fixes and feature additions in order of implementation.
| Version |
Information |
||||||||||
| V1.3 |
|
||||||||||
| V1.2 |
Conditions: CMU200 file read using
MMEM:DATA? with a 1m long GPIB cable, reading a 1.3
MBytes big file.Ethernet was measured on a real congested network, not a direct connection
Future version will increase the
speed in VXI-11 modes (means to do so are known) - for now the
focus is functional correct operation.
|
||||||||||
| V1.1 |
|
||||||||||
| V1.0 |
|