PI-SPI-8AI-16B Analog Input I/O Module for Raspberry Pi

Pi-SPi-8AI-16B Raspberry Pi 8 Channel Analog Input 16 Bit (4 - 20 mA) I/O Module

Regular price $42.90 USD Sale

The Pi-SPi-8AI-16B Analog Input I/O Module is based on the MCP33131, a 16 Bit Analog to Digital Converter.

The 26 pin GPIO port is duplicated on either side of the module, so more modules can be "daisy chained" together.

With the latest libwidgetlords v2.0 release, up to 4 PI-SPI-8AI-16B modules can be connected together giving a total of 32 analog inputs to one Raspberry Pi.

All Accessories Including Ribbon Cables Sold Separately

 Node-Red support is available.

These are the standard versions of analog inputs available:

Inputs 1 thru 8 are 4-20 mA (Load Resistor 150 Ohms)

Inputs 1 thru 4 are 4-20 mA Input (load Resistor 150 Ohms)
Inputs 5 thru 8 are 0 to 6.6 VDC Input

Inputs 1 thru 8 are 10K Thermistor Inputs
for Temperature Sensor Applications

Inputs 1 thru 4 are 4-20 mA Input (load Resistor 150 Ohms)
Inputs 5 thru 8 are 10K Thermistor Inputs
for Temperature Sensor Applications

Inputs 1 thru 4 are 10K Thermistor Inputs
Inputs 5 thru 8 are 0 to 6.6 VDC Inputs
for Temperature Sensor and Voltage Input Applications

Each channel can be configured as either mA or Voltage. Another feature is all inputs can easily be configured for thermistor input making the Pi-SPi-8AI-16B an 8 channel temperature sensor module.

Changing an Input Type  is as easy as removing and adding a solder jumper on the back of the module - here is the A1 jumper selection:


mA = 0 to 20 mA
TH = 10K Thermistor Input for temperature applications
5 VDC = 0 to 6.6 VDC Input
10 VDC  = 0 to 12 VDC Input

GPIO Port Pins


  • Identical foot print to the RPi 3
  • Each module has its own 3.3VDC LDO regulator operating from the RPi 5VDC bus
  • No loading on the RPi 3.3VDC bus
  • Terminal Blocks for analog input signals
  • LED indicators for power
  • Dual 26 pin GPIO connectors (left and right)
  • MCP33131 A/D Converter with 16 bit resolution
  • Each analog signal buffered (1/4 Op Amp)
  • Inputs 1 thru 8 are configured for 4 to 20 mA Input (Standard)
  • All inputs can be configured for either mA, VDC, or Thermistor Input for temperature measurement

Other input configurations are available, please contact us before ordering!

Block Diagram

PI-SPI-8AI-16B 4-10 mA Input 16 Bit Raspberry Pi Interface

Pi-SPi-8AI Accessories :

  • Pi-SPi-PS-24VDC Field Power Supply
  • Pi-SPi-CABLE-40x26-2 (40 Pin to 26 Pin x 2") Required to connect to RPi
  • Pi-SPi-CABLE-40x40-2 (40 Pin to 40 Pin x 2")
  • Pi-SPi-CABLE-26x26-2 (26 Pin to 26 Pin x 2") Required to connect to PI-SPI Module
  • Pi-SPi-MTG-HDW Mounting hardware 4x1/2" Aluminum spaces c/w 8 x 4-40 Stainless Steel Screws

For 4-20mA transmitter descriptions and connections, please visit:

4-20 mA Current Loop

Typical Field Wiring

PI-SPI-8AI-16B 4-20mA 16 Bit ADC Typical Field Wiring

Sample Software (Python)

Please download the latest Widgetlords libwidgetlords library. The instructions can be found at

Getting Started with PI-SPI Libraries

All of the sample code examples are based on the latest library installation. Please note the code samples all use Python 3.

Basic Python "Read" 8 Channels 0 to 20 mA Program:

from time import sleep
import spidev
from widgetlords.pi_spi import *
from widgetlords import *


inputs_12b = Mod8AI(True)

spi = spidev.SpiDev()
spi.open(0, 1)
spi.max_speed_hz =100000

def read_channel(channel: int):
    channel %= 8
    data = spi.xfer([channel, channel])
    return data[1] + data[0] * 256

def read_channel_avg(channel: int):
    channel %= 8
    sum = 0
    for i in range(8):
        data = spi.xfer([channel, channel])
        sum += data[1] + data[0] * 256
    return sum >> 3

while True:
    for i in range(8):
        ADC = read_channel_avg(i)
        print(i, " %.4f" % ( ADC / ((2 ** 16) - 1) * 3300 / 150))


For DIN Rail applications, the PI-SPI-ENC series of DIN rail mount enclosures are available in the Accessories Collection