Analogue Sensors On The Raspberry Pi Using An MCP3008

inputs which means it is a bit of a pain to use many of the available sensors. I wanted to update my garage security system with the ability to use more sensors so I decided to investigate an easy and cheap way to do it. The MCP3008 was the answer.

The MCP3008 is a 10bit 8-channel Analogue-to-digital converter (ADC). It is cheap, easy to connect and doesn’t require any additional components. It uses the SPI bus protocol which is supported by the Pi’s GPIO header.

Analogue Sensors On The Raspberry Pi Using An MCP3008

This article explains how to use an MCP3008 device to provide 8 analogue inputs which you can use with a range of sensors. In the example circuit below I use my MCP3008 to read a temperature and light sensor.

Here are the bits I used :

  • Raspberry Pi
  • MCP3008 8 channel ADC
  • Light dependent resistor (LDR)
  • TMP36 temperature sensor
  • 10 Kohm resistor

The first step is enabling the SPI interface on the Pi which is usually disabled by default.

Please follow my Enabling The SPI Interface On The Raspberry Pi article to setup SPI and install the SPI Python wrapper.


The following list shows how the MCP3008 can be connected. It requires 4 GPIO pins on the Pi P1 Header.

VDD   3.3V
VREF  3.3V
CLK   GPIO11 (P1-23)
DOUT  GPIO9  (P1-21)
DIN   GPIO10 (P1-19
CS    GPIO8  (P1-24)

The CH0-CH7 pins are the 8 analogue inputs.

Here is my breadboard circuit :

It uses CH0 for the light sensor and CH1 for the TMP36 temperature sensor. The other 6 inputs are spare.

Light Dependent Resistor

I chose a nice chunky LDR  (NORPS-12, datasheet). Under normal lighting its resistance is approximately 10Kohm while in the dark this increases to over 2Mohm.

When there is lots of light the LDR has a low resistance resulting in the output voltage dropping towards 0V.

When it is dark the LDR resistance increases resulting in the output voltage increasing towards 3.3V.

Analogue Sensors On The Raspberry Pi Using An MCP3008 Circuit

TMP36 Temperature Sensor

The TMP36 temperature sensor is a 3 pin device (datasheet). You can power it with 3.3V and the middle Vout pin will provide a voltage proportional to the temperature.

A temperature of 25 degrees C will result in an output of 0.750V. Each degree results in 10mV of output voltage.

So 0 degrees will give 0.5V and 100 degrees will give 1.5V.

Reading The Data Using a Python Script

The ADC is 10bit so it can report a range of numbers from 0 to 1023 (2 to the power of 10). A reading of 0 means the input is 0V and a reading of 1023 means the input is 3.3V. Our 0-3.3V range would equate to a temperature range of -50 to 280 degrees C using the TMP36.


For more detail: Analogue Sensors On The Raspberry Pi Using An MCP3008

About The Author

Ibrar Ayyub

I am an experienced technical writer holding a Master's degree in computer science from BZU Multan, Pakistan University. With a background spanning various industries, particularly in home automation and engineering, I have honed my skills in crafting clear and concise content. Proficient in leveraging infographics and diagrams, I strive to simplify complex concepts for readers. My strength lies in thorough research and presenting information in a structured and logical format.

Follow Us:

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top