I needed a way of remotely monitoring the temperature and relative humidity in a greenhouse used by my local garden club. We grow and graft tomato plants for our annual plant sale. Careful control of the T and RH is helpful to insuring the success of the grafting process. Given the large T and RH changes that a greenhouse can experience we wanted to measure the conditions 24 hours a day, seven days a week. After exploring commercial recording hygro-thermographs and determining the cost to be prohibitive I decided to build my own.

The basic design specs for this device were:

Have the ability to:

1. Measure T and RH with two separate sensors

2. Record the date, time, T and RH on an on-board memory card

3. Dump the contents of the memory card via web connection to the device

4. Upload real-time measurements to an IoT website

5. View the data graphically as a function of time

When I started the project a year ago I was an Arduino/IoT/C++ NOOB. The closest I had come to building something like this was replicating MightyOhm’s WiFi Radio based on a hacked ASUS WL-520GU router. As this project evolved the WiFi radio experience turned out to be very helpful. As you might imagine the project described in this Instructable is the result of countless iterations along a very interesting learning journey. This most recent iteration uses BME280 temperature, relative humidity and barometric pressure sensors. My previous version used DHT22 sensors. My thanks to everyone who has shared their learning, wisdom and code on the internet. I would not have been able to write the code for this without all of the functions and code snippets that I borrowed from everyone who shared. I have tried to note and thank these authors at the top of my sketch and throughout this Instructable.

Step 1: Tools, Hardware, Software


Soldering Iron and solder

Needle nose pliers

Diagonal cutters

Wire strippers

Small screwdriver

Thin kerf saw to cut the proto-board (bandsaw, hacksaw, coping saw)


1- Arduino Mega 2560

1- Case for Arduino Mega 2560

1- LCD Keypad Shield

2- I2C/SPI Breakout Temperature Humidity Barometric Pressure BME280 Digital Sensor (ME-BME280) Ebay

1- Ethernet-SD Shield

1- Micro SD Card

1- DS3231 AT24C32 IIC Real Time Clock Module for Arduino

1- Prototype Shield

1- Prototyping Breadboard

1 pkg – male header pins

1 pkg – female header pins

1 pkg – right angle male header pins

1 pkg.- Jumper Wires (you will need male-male and male-female)

1- Sparkfun Logic Level Converter, Bi-directional BOB-12009

1 roll, four conductor (phone) wire or equivalent (to connect sensors to Arduino)

1- Hackable router- DD-WRT capable (I use Asus WL-520GU and TP-Link N300)

24 or 26 gauge solid insulated wire (phone wire or Ethernet-SD cable wire works fine)

1 pkg. 2P 5mm Pitch PCB Mount Screw Terminal Block 8A 250V

1 2x8 cm Double Side Prototype PCB Universal Printed Circuit Board

1 foot of 1” PVC Pipe

4- 1” PVC Pipe Caps

3- 8-24 x 1” nylon screws and nuts

1 pkg- Polishing filter pad 50 Micron-Aquarium pre-filter media

Note that the BME280 sensor is available in many slightly different packages from Adafruit, Sparkfun, Amazon, etc. The Adafruit version has the logic level convertor onboard eliminating the need for the Sparkfun device on the list above.


-Arduino IDE

-Arduino sketch- BME280_Recorder_C_Ethernet-GitHub.inoand make sure all of the libraries found on each #include line in the sketch are in your local Arduino IDE library.

-Clock Setting sketchsuch as this one. This sketch will enable you to set the time on your Real-Time Clock Module using the Arduino Mega and the LCD Keypad Shield.

-Cactus IO BME280 I2C Library- https://goo.gl/yWBL5G(This library is required for dual BME280 sensor setups!)

-Simon Monk’s timer.h library- http://goo.gl/G 1XpT(for a description) and https://goo.gl/HPNM38(Library)

Step 2: Set the Date/Time on the Real-Time Clock Module

-Attach the pushbutton LCD shield to the Arduino Mega. With jumper wires connect the 5V and GND on the RTC module to 5V and...

Read more »