Arduino Soil Moisture & Temperature IOT Monitor using ThingSpeak
Can handle multiple combinations of sensors soil moisture, temperature and humidity
Setup for 2x Soil Moisture and 2 x Temperature sensors
Uploads to ThingSpeak to allow online monitoring via the web or the ThingSpeak app.
ThingSpeak will send alerts to you mobile if sensors reach preset levels.
Display of sensor readings on a TFT display along with highs and lows for the day.
The TFT also shows ThingSpeak connection Stats.
PIR controlled display blanking to save power.
Uses an Arduino Nano for processing and an ESP3266 v01 to send data to ThingSpeak.
ThingSpeak is an IoT analytics platform service that allows you to aggregate, visualize, and analyze live data streams in the cloud.
You can send data to ThingSpeak from your devices, create instant visualization of live data, and send alerts.
The ThingSpeak Android app/widget also lets you view your data on the go and will allow preset alerts to be set.
App Showing Graphs
ThingSpeak Android Widget Showing Live Data from my various sensors.
Called by clicking on a sensor reading on the widget - there are many graph options.
Soil Sensor Layout
I have 3 sensors positioned in a Dahlia bed in my front garden. Dahlias are frost and drought sensitive and are left in the ground over the winter with a mound of soil covering the tubers.
Most of my garden water comes from water butts so I need to keep watering to a minimum in the growing season. The temperature sensors allow me to keep an eye on ground level/deep level frosts.
I never water my lawn but I have 1 moisture sensor set down at root level will help me predict when my lawn will be under stress.
This contains 2 temperature and 1 soil moisture sensor- air temperature at ground level
soil temperature at Dahia Tuber level (in winter dahlia Tubers are mounded over with an extra 150mm soil)
and a soil moisture sensor at Dahlia Tuber level.
This contains a soil moisture sensor at around 150mm deep.
below live ThingSpeak graphs embedded in this page
2.2" LCD IL19341 240 x 320 resolution
Capacitive Soil Moisture Detector
Waterproof junction box IP68
Soil Moisture and Temperature Sensor Construction
ESP8266 Module Holder
The holder spaces the pins from the ESP8266 to allow easy mounting on Vero Boards.
ESP8266 01s Mounted in holder
The DS18B20 digital thermometer provides 9-bit to 12-bit Celsius temperature measurements and
has an alarm function with nonvolatile userprogrammable upper and lower trigger points.
The DS18B20 communicates over a 1-Wire bus that by definition requires only one data line (and
ground) for communication with a central microprocessor. It has an operating temperature
range of -55°C to +125°C and is accurate to ±0.5°C over the range of -10°C to +85°C. In
addition, the DS18B20 can derive power directly from the data line (“parasite power”), eliminating
the need for an external power supply. Each DS18B20 has a unique 64-bit serial code,
which allows multiple DS18B20s to function on the same 1-Wire bus. Thus, it is simple to use one
microprocessor to control many DS18B20s distributed over a large area.
Unique 1-Wire® Interface Requires Only One Port Pin for Communication
Each Device has a Unique 64-Bit Serial Code Stored in an On-Board ROM
Multidrop Capability Simplifies Distributed Temperature-Sensing Applications
Requires No External Components Can Be Powered from Data Line;
Range is 3.0V to 5.5V
Measures Temperatures from -55°C to +125°C
(-67°F to +257°F)
±0.5°C Accuracy from -10°C to +85°C
Thermometer Resolution is User Selectable
from 9 to 12 Bits
Converts Temperature to 12-Bit Digital Word in
DS18B20 Temperature Compensation
The two DS18B20 were taped together and allowed to equalize to the same temperature.
Readings were compared and compensation added in code to ensure the probes read the same temperatures.
Temperature compensation applied at 100mins to equalize the two DS18B20
Perspex Dust Cover
Top TFT Display Vero Board
Top TFT Display Vero Board with Current Cost Analogue Development Boards & DAC Boards Fitted
These boards are not used in this project but I have wired connectors and pins in case I use them in the future.
Top TFT Display Vero Board
Top TFT Display Vero Board Rear View
Lower Vero Board Showing Nano and Voltage Regulator Boards Fitted
Lower Vero Board Showing without Nano and Voltage Regulator Boards Fitted
Warnings & Alerts
The display will show warnings if the soil is too dry or too cold.
The soil temperature sensors are in my Dahlia Bed at ground level and Dahlia Tuber level.
The words "FROST WARNING" is displayed if the temperature falls below 1°C.
Soil Dry Warning
Soil Moisture Sensors are in the Lawn and the Dahlia Bed at Tuber level.
The words " SOIL DRY" are displayed if the soil moisture goes below 60%.
Animation showing failed send to Thingspeak
Line 5 shows the commands sent and if OK or Fail.
Line 4 shows the results OK or Fail.
If any commands fail the word FAIL remains on to show the last send failed.
Current Cost Analogue Development Boards
These are included for future use.
These boards have analogue inputs and talk to my Meteohub Weather Station over a wireless link to a Current Cost Display see below.
The Current Cost Display is connected by USB to my Meteohub Server.
Current Cost Analogue Development Board Side
Current Cost Analogue Development Board Top
Current Cost Analogue Development Board Rear
Pairing Current Cost Analogue Development Board to a Current Cost display
Power up the Current Cost Analogue Development Board
Press the red button and hold approx 9 seconds.
LED1 on the rear of the board will flash while the board is in pairing mode.
Go to your monitor and press the UP button () until the device number on the screen shows the device Chanel you want to pair.
Press and hold the DOWN button () until the LED on
the monitor flashes.
Release the button and you will see the tuning process begin. After a few seconds you should then see energy now showing “0 Watts”
Connect an analogue output from your Arduino to the pad marked OUTPUT on the pictures above. This must not exceed 3.3v.
To add other Current Cost Analogue Development Board please repeat the process.
When you get to the screen with the appliance 1 data you just need to press the UP () button once to take you to appliance 2.
You now need to pair this second appliance by pressing and holding the DOWN () button until the LED flashes.
Note the display will show a value in Watts but the data sent to my Weather Station is just a number. This means any device can be connected to one of these boards and the date will show in my weather station.
Conversion formulas can be applied via the Meteohub interface to change the data to suit your needs.
I have included sockets for a couple of these boards in case I need to send readings from a digital sensor via my Analogue Current Cost Board.