How to build IoT sensors using Python and the Onion ADC Expansion

To go along with the launch of the new Onion ADC Expansion board we've got a great blog post made by Onion on how they've used it in a project.

Follow along to learn how to build an IoT sensor using Python and the Omega2 ADC Expansion! We built our sensor to be able to track the baby tea tree we have in our office, but this IoT sensor setup is a great template for building your own IoT sensor and tracking data that’s important to you.

Parts List:

The IoT Computer components:

For our project we used the following sensors, but the ADC Expansion is flexible and supports many analog sensors:

  • Temperature Sensor
    • TMP36
  • Soil Moisture Sensor
  • Light Intensity Sensor
    • Photoresistor
    • 1kΩ resistor, a small breadboard, and some jumper wires


Physical Setup

The wiring with the ADC Expansion is very straight-forward: connect each sensor’s signal, power, and ground to the ADC Expansion. Each sensor should be connected to a different input channel on the ADC Expansion.

Since our light sensor is based on a photoresistor, we’ll need to make a voltage divider to sample the light intensity. See our guide on using a photoresistor for details.

Position your IoT sensors so you can track the data you’re interested in. We wanted to be able to keep an eye on our office tea tree:


Install Python

Access your Omega’s command line, make sure you’re connected to the internet, and run the following:

opkg update

opkg install python-light python-adc-exp

The program will first instantiate an object to interact with the ADC Expansion, and then it will run an infinite loop that will read the voltage from each sensor, convert it to meaningful measurements for each sensor, and display the measurements.

Create a file on your Omega and populate it with this code:

import time
import os
# Import the ADC Expansion module.
from OmegaExpansion import AdcExp
# create ADC Expansion object
adc = AdcExp.AdcExp()
#infinite loop to read sensors and display data
while 1:
# read ADC channels
a0 = adc.read_voltage(0)
a1 = adc.read_voltage(1)
# a2 = adc.read_voltage(2)
a3 = adc.read_voltage(3)
# convert temperature sensor voltage to temperature
temp = (a0 - 0.5) * 100
# convert soil sensor voltage to percentage
soil = (a1 / 5) * 100
# convert light sensor voltage to lux
rPhoto = 5.0 / a3 * 1000 - 1000
lux = 500/(rPhoto/1000)
# clear screen
os.system('cls' if == 'nt' else 'clear')
# write sensor readings to screen
Temperature\t| %.02f C
Soil Moisture\t| %.02f %%
Light Intensity\t| %d lux
'''%(temp, soil, lux))
#wait half a second
time.sleep (0.5)


Running the program

Let’s run the Python program by entering python into the command line. You will see something like this:

The sensor readings will update twice a second, providing sensor real-time data!


Next article Getting started with the Onion Servo (PWM) Expansion

Check out our latest products...

Seeed Electronic DSO Quad - Pocket Size 4 Channel Digital Oscilloscope - Aluminium Alloy Silver
Seeed Other RF Explorer model WSUB1G

RF Explorer - WSUB1G

£140.99 inc VAT
£117.49 ex VAT
Seeed GPS Raspberry Pi LoRa/GPS HAT - supports 868M frequency
Seeed LCD Displays 10.1" Inch LCD Display - 1366x768 HDMI & VGA & NTSC & PAL
Seeed Antenna SARK-110 Antenna Analyzer

SARK-110 Antenna Analyzer

£383.99 inc VAT
£319.99 ex VAT
Seeed Kits KiwiSDR Kit - software-defined radio

KiwiSDR Kit - Software-Defined Radio

£319.00 inc VAT
£265.83 ex VAT
Seeed Dev Boards nRF52832-MDK V2 IoT Micro Development Kit

nRF52832-MDK V2 IoT Micro Development Kit

£31.99 inc VAT
£26.66 ex VAT
Seeed Grove GrovePi+ - add-on board with 15 Grove 4-pin interfaces for Raspberry Pi