Connecting GPIO Devices to Impinj R700 RAIN RFID Readers 


This article covers connecting devices to the General Purpose Input/Output (or GPIO) port on the Impinj  R700 RAIN RFID reader. 
The Impinj R700 reader includes a multipurpose I/O port that provides two general purpose inputs, three opto-isolated outputs and a +5V supply. Access to these features is offered through a 9-pin connector mounts on the backside of the reader. In order to use this 9-pin connector, you will need a GPIO terminal block. The GPIO connector on the reader is a Phoenix Contact MC 1,5/ 9-G-3,81 modular connector, which also goes by the part number 1803345. Use this part name/number when looking for a compatible terminal block. In the examples, we used a Phoenix Contact MCVR 1,5/ 9-ST-3,81, which also goes by part number 1827198.

Impinj R700 GPIO Information and Specifications

In order to protect the reader’s CPU, both the input and output signals are optically isolated from direct connection to the CPU. The following chart shows the electric specifications of the Impinj R700 reader's GPIO: 


Logic 0 (LOW)        0.0-0.8 Volts 

Logic 1 (HIGH)       3.0-30.0 Volts 



  • Up to 1.5A, source or sink

Supply Voltage     

  • 5 to 30 Volts (Reference to  V MINUS)
  • Voltages > 5 Volts require an external power source connected to V PLUS and V MINUS 

Logic 0 (LOW)      

  • 0 to 0.5 Volts (Reference to V MINUS) 

Logic 1 (HIGH)     

  • VPLUS - .5 Volts 


For the GPIO outputs to function, a power supply must be connected between V+ and V-. This power supply could be the reader's 5V supply line and Reader GND, or an external power supply that is greater than 5V. The maximum voltage, as shown in the table above, is 30V. When the user configures a selected GPIO output via LLRP to output logic 0, an isolated FET switch within the reader effectively shorts that output to V- with a current sink capability of up to 1500 mA. The Impinj R700 GPO has a half-bridge transistor configuration which allows it to present a short to VPLUS or a Short to VMINUS, this is what allows it to source or sink the 1500 mA. Please see the circuit diagram below for more details:




Additionally, please find the full schematic for the R700 GPIO from the following link:

When the user configures a selected GPIO output to logic 1, the selected output is pulled to V+ through a 10K resistor. If GPIO isolation is not required, the reader provides a 5V supply and a ground pin on the connector that can be connected to V+ and V-. 
Please note that attaching a light stack or other output device that requires the reader output to sink more than 1500mA will result in unrecoverable damage to the reader and is not covered by warranty, as it's outside the specified operating parameters.

In a typical usage scenario, the user would supply both VPLUS and VMINUS and would use some inputs or outputs.  Note that pins 1 and 2 are NOT electrically isolated from the reader, whereas pins 3-9 are electrically isolated from the reader via opto-isolator.

The pin orientation is shown in the image below, where PIN 1 is the left-most pin: 


The Pin-Out is described in the table below (also included in the Installations and Operations Guide):



A more detailed table describing each pin is shown below:

Pin I/O Name I/O Function Isolated? Operating Voltage Ranges
1 Reader +5V Reader's supplied power, 500mA max No 5V
2 Reader GND Reader's return No 0V
3 IN 0 Input 0 Yes VMINUS to VPLUS
4 IN 1 Input 1 Yes VMINUS to VPLUS
5 OUT 0 Output 0, 1.5A source/sink max Yes VMINUS to VPLUS
6 OUT 1 Output 1, 1.5A source/sink max Yes VMINUS to VPLUS
7 OUT 2 Output 2, 1.5A source/sink max Yes VMINUS to VPLUS
8 VMINUS Return for isolated inputs and outputs.

User Supplied!
Yes 0V (user's return/ground)

Supply for isolated inputs and outputs.

User Supplied!

Yes 5V-30V, referenced to VMINUS


Example - Testing Basic Functionality with Impinj ItemTest Software 

One easy way to test out the GPIO functionality of the Impinj R700 is by connecting one of the reader's GPOs to a GPI. This way, you can configure the reader to start and stop the inventory based on a GPI trigger, and manually trigger the GPO through Impinj ItemTest software. 
To wire this, you can connect the following: 
Reader's 5V Supply (PIN1) to VPLUS (PIN9) 
Reader's GND (PIN2) to VMINUS (PIN8) 
Readers GPI1 (PIN3) to GPO1 (PIN5). 
This works, as when using the reader's 5V Supply, the GPO's Logic 1 will be 4.5V (VPLUS minus .5V), which will trigger the GPI1 to HIGH (GPI Logic shows anything greater than 3.0 V is registered as Logic 1 (HIGH)). 
In Impinj ItemTest software, you will want to configure the GPI Configuration for Port 1 to Start when the level is HIGH, and to STOP when the level is LOW, as shown in below screenshot: 

After saving these settings, we can use the Impinj ItemTest software’s Diagnostics tab to turn GPO1 to HIGH, which will start the reader inventory: 


You can confirm the inventory has started by checking the antenna LED's on the reader, and ensuring they are turning on, as well as the inventory LED on the front of the reader. 

Example - Connecting a 24V Stack Light with External Supply 

A common example is using the Impinj R700 to control a stack light. Often times, these stack lights require a 24V input, meaning an external power supply is needed as the reader is only able to provide 5V maximum. 
The diagram below shows an example of wiring a stack light with an external power supply: 

An example showing the physical wiring and implementation is shown below: 


The wiring is as follows: 
Green: GPO connected to light stack's green LED. 
Orange: GPO connected to light stack's orange LED 
Red: GPO connected to light stack's red LED 
Yellow: Ground cable coming from the light stack 
Black cable: External power supply, ground connection 
White: External Power supply, positive connection 


In this example, I am using a 24 V external power supply with a barrel adapter to separate the positive and negative terminals. 

I am controlling the Impinj R700 GPOs and setting them all to HIGH through Impinj ItemTest software, as shown here: 


Example - Connecting an IR Sensor with External Supply 

Another common use case is connecting an input switch to the reader's GPI. In this example case, we will connect a Photoelectric Sensor (any sensor that uses more than 5V should work fine).

The sensor we are using is shown below: 

The wires from the sensor are described below: 
Pink Wire - Control wire over Dark Mode or Light Mode 
Brown Wire - Sensor's V+ 
Black Wire- IN1 
Blue Wire- Sensor's V- 

There are two modes that the light sensor can work in, Dark-On and Light-On mode. In Dark-On mode, when the sensor sees light, it will go to high and vice-versa for Light-On mode. In my testing case, I used the Light-On mode. I have included circuit wiring diagrams below: 




Since we are using an NPN based sensor model, as shown in the datasheet, we will need to make sure there is a load resistor in place between the IN and VCC port, as to limit the current. This protection implementation is shown in the figure below: 

For wiring this input sensor to the Impinj R700, I used the following wiring: 

PIN3 (USERIN_0) - Connected to black wire from input sensor 
PIN8 (VMINUS) - Connected to external supply's V- and the sensor's V- 
PIN9 (VPLUS) - Connected to external supply's V+ and the sensor's V+ 

For this specific sensor, we also needed to connect a current limiting resistor between the USERIN_0 and the V-. 
To test this scenario using Impinj ItemTest software, I configured the reader's GPI to trigger when the device goes HIGH, and to stop when going LOW: 


Example - Connecting Sensor using Reader's 5V Supply 

Some input sensors will require only 5V or less to operate, so that you can use the reader's 5V supply to power. For this use case, you can use the following configuration: 

The reader's 5V (PIN1) will be connected to both VPLUS (PIN9) and the User Input(s) (PIN3/4). The reader's ground connection (PIN2) will be connected to VMINUS (PIN8). 

You can test this functionality as mentioned in the section above, by using ItemTest and configuring the GPI triggers appropriately: 

Please note, that if using multiple GPI's, the ROSpec will only be able to assign to a single GPI. Additional GPI logic will need to be added programmatically to your code, though it is still useful to use Impinj ItemTest software to ensure both GPI connections are working properly. We provide an example showing how to use event handlers to process GPI events in the Impinj Octane SDK Example, 'ReaderEvents'. There is also an example of using a GPI trigger with the Impinj Octane SDK in the example called 'ReadTagsGpiTrigger'. 

Example - Using LLRP Example with R700 GPIO 

Another way to control the reader's GPIO is through using Low Level Reader Protocol (LLRP) programming, as shown in the code sample below.


private void GPO1_ON()
    // this routine turns on 3.3v power in LLRP GPO1

    msg = new MSG_SET_READER_CONFIG();

    msg.GPOWriteData = new PARAM_GPOWriteData[1];
    msg.GPOWriteData[0] = new PARAM_GPOWriteData();
    msg.GPOWriteData[0].GPOData = true;
    msg.GPOWriteData[0].GPOPortNumber = 1;
    MSG_SET_READER_CONFIG_RESPONSE rsp = reader.SET_READER_CONFIG(msg, out msg_err, 12000);
    if (rsp != null)
        textBox2.Text = rsp.ToString();
    else if (msg_err != null)
        textBox2.Text = rsp.ToString();
       textBox2.Text = "Commmand time out!";
private void GPO1_OFF() { // this routine turns off power in LLRP GPO1 // LLRP GPO1 = Hardware PIN 14 / GPOUT0MSG_SET_READER_CONFIG msg = new MSG_SET_READER_CONFIG(); msg.GPOWriteData = new PARAM_GPOWriteData[1]; msg.GPOWriteData[0] = new PARAM_GPOWriteData(); msg.GPOWriteData[0].GPOData = false; msg.GPOWriteData[0].GPOPortNumber = 1; MSG_SET_READER_CONFIG_RESPONSE rsp = reader.SET_READER_CONFIG(msg, out msg_err, 12000); if (rsp != null) { textBox2.Text = rsp.ToString(); } else if (msg_err != null) { textBox2.Text = rsp.ToString(); } else
textBox2.Text = "Commmand time out!"; }

With the reader set to use the LLRP interface, you can also use the Impinj LTK and SDK libraries to configure the GPIO. This can be easily tested with the AdvancedGpo example, though it's important to make sure that you are only working with GPOs 1 through 3. In the example, it will include a configuration for GPO4, which is not offered on the R700, and will need to be commented out. This GPO4 configuration is included, as the Speedway Revolution Reader supports four GPOs, instead of the three supported with R700.

You  can also make use of the QueryFeatureSet() API call in the Octane SDK to determine how many GPOs are available for a specific reader. This way the code can be written to run safely on both a Speedway Revolution and an R700, if your use-case required this. An example of using this API call is shown in the 'QueryReaderSettings' example shipped with the Octane SDK.

It is also worth noting that GPO configuration is currently not supported with the Impinj IoT Device Interface, and can only be configured when using the Impinj LLRP Interface


Example - Testing GPO Functionality via Impinj R700 Web UI

As of Octane Firmware 8.0, it is now possible to test and configure the Impinj R700 Reader's GPOs via the reader's Web Interface. It's important to note that it is necessary to have the reader configured to use the Impinj IoT Device Interface for this functionality.


From the reader's web interface, there is now a section titled "GPO" that will allow you to configure each GPO's state via radio buttons, as shown below:



This functionality can be useful for testing and verifying the connections/wiring of your GPO devices. For information on configuring the GPOs through the Impinj IoT Device Interface, please see the next example.



Example - Configuring Impinj R700 GPO via Impinj IOT Device Interface Endpoint

As of Octane Firmware 8.0, it is now possible to configure the Impinj R700's GPOs through the Impinj IoT Device Interface.

The new endpoint for controlling the GPOs is at: /device/gpos. To check the GPO state, you would issue a GET request to that endpoint. An example of issuing this GET call with CURL is shown below:


curl -f --insecure --header 'Content-Type: application/json' --location --request GET http://root:impinj@impinj-AA-BB-CC/api/v1/device/gpos


This will return output in the format of:

Body: "gpoConfigurations": [array of..]

  • "gpo":1
  • "state": "low" (default) / "high"


It is also possible to configure the GPOs through this same endpoint by issuing a PUT request. An example of issuing a PUT command with CURL that sets all three GPOs high is shown below:


curl -f --insecure --header 'Content-Type: application/json' --location --request PUT http://root:impinj@impinj-AA-BB-CC/api/v1/device/gpos -d '{"gpoConfigurations": [{"gpo":1, "state":"high"}, {"gpo":2,"state":"high"},{"gpo":3,"state":"high"}]}'


Please note, that when using Curl on Windows through the command line, it will be necessary to use the escape characters for the " character. An example of setting all GPOs high through CuRL on Windows Command line is shown below:

curl -f ---insecure --header "Content-Type:application/json" --location --request PUT -d "{\"gpoConfigurations\":[{\"gpo\":1,\"state\":\"high\"}, {\"gpo\":2,\"state\":\"high\"}, {\"gpo\":3, \"state\":\"high\"}]}" https://root:impinj@impinj-AA-BB-CC/api/v1/device/gpos


The results should appear as:



Was this article helpful?
5 out of 5 found this helpful



Article is closed for comments.