Arduino Temp/Humidity with LCD and Web Interface

Picture of Arduino Temp/Humidity with LCD and Web Interface
I recently helped a client move their office which included setting up a new computer room.
I wanted them to be able to check the temperature and humidity of the room both by checking an LCD display in the room and also via a web page. I put together an Arduino with a DHT11 sensor, 16x2 LCD display and ENC28J60 Ethernet module. I did the project in stages first getting the DHT11 portion working using the DHT11 library and examples from Adafruit, then adding an LCD display and finally adding Ethernet using the EtherCard library and modifying their example code . This makes troubleshooting a lot easier and I could build/learn the code as I went along. I have taken code from the various examples provided with the necessary libraries.

This instructable will go through the steps to prototype this.

Note: the DHT11 sensor isn't very accurate - about plus and minus 2 degrees Celsius and 5% accuracy for humidity. I'll probably be changing to a DHT22 which is plus and minus .5 degrees Celsius and between 2% and 5% for humidity. The good news is it's an easy change in the code.
Remove these adsRemove these ads by Signing Up

Step 1:

Picture of
What you will need:

  • An Arduino
  • DHT11 or DHT22 sensor from Adafruit or various ebay vendors
  • 10K resistor for the DHT11 pullup
  • 16x2 LCD display HD44780
  • 10k trimpot for LCD contrast
  • 100 Ohm resistor for the LCD backlight
  • ENC26J60 Ethernet module or shield
  • Prototype shield if you use a regular Arduino and ENC28J60 Ethernet shield
  • hookup wire, breadboard etc for prototyping

Step 2: Wiring up the DHT11

Picture of Wiring up the DHT11
The DHT11 and DHT12 have 4 pins. Looking at it with the side with square cutouts in it the pins are from left to right:
  • +5v
  • Signal
  • not used
  • GND
It also requires a 10k pullup resistor between +5V and Signal
For this project the Signal lead goes to Digital Pin 2 on the Arduino

The images show the DHT11 soldered into a prototype shield with the signal lead going to the Arduino digital Pin2

1-40 of 44Next »
MortenR2 days ago

This is the only tutorial I have found to be compatible with my setup. Now if I can only change the code to display the temperature on the web page in Fahrenheit as well. That's what I'm working on now. Thanks SteveRoy.


Hi, further down in an earlier comment is a note on converting the temperature reading to Fahrenheit. To display both you could create another variable for Fahrenheit, convert C to F and add the extra info in the homePage part of the sketch.

akajester made it!2 months ago

This saved me so much time! I was working on the individual parts, but having a hard time putting it all together, until I came across this! Thank you so much! The next step is to upload the data to thingspeak!


Why send your data to Thingspeak?

SteveRoy (author)  akajester1 month ago

Nice, I must try uploading to thingspeak too!

saputroyulianto made it!1 month ago

[want to ask]

hi i from Indonesia, i still success until step 6 :)
buat i have problem with the ethernet shiled, i use ethernet shield from DFRobot

the library is different with the ENC28J60, anyone can help me?

SteveRoy (author)  saputroyulianto1 month ago

Have a look at this project - it's not mine, but similar and uses a W5100 chip

mnajjar made it!2 months ago

Thank " "

until Step 6 :) amazing *_&
i dont try step 7

SteveRoy (author)  mnajjar1 month ago


Gran Abuelo4 months ago

How hard would it be to modify the code to upload the data to thingspeak or a similar service?

SteveRoy (author)  Gran Abuelo4 months ago

Foe me? hard. For a programmer, probably fairly easy.

Start here:

hi.... I connected the enc28j60 module to arduino and to pc ethernet card directly using a patch cable. but, the indicator lights on the module or ethernet cable are not glowing. although the red light on module is working . can you help me out???
SteveRoy (author)  nitishdash20104 months ago

You may need a cross over cable if you go directly from a PC to the enc module

psycho.maggot6 months ago

sorry to much asking, what if using lcd shield like in this site:

did it will make more simple?.. and how the wiring, its completly different cuz its shield. and yours was just lcd and trimpot.

SteveRoy (author)  psycho.maggot6 months ago

No, not with my sample code - It uses digital pin 10 which is used by the Ethernet module in my example. You would have to change the code and pins that the Ethernet uses. What's wrong with the way I have it in my build? If it's too many wires to solder then get an LCD with the i2c "backpack" and change the code.

thanks man, yeah you right, too many wire to be soldered. thats why i ask. ok.

psycho.maggot6 months ago

aye bro. what if we don't using the trimpot, did need a change on the wiring diagram or not?

SteveRoy (author)  psycho.maggot6 months ago

no, you could use a resistor for the contrast or use pwm off an Arduino port, but you will need something for the contrast. More recently I have been using i2c/SPI "backpacks" for LCD displays - easier in some ways as they only need 4 wires to connect to the Arduino, come with back-light via an on-jumper and have the contrast trimpot built-in. The down side being there are multiple library's for them and finding the right one can be a chore. They tend to use analog ports off the Arduino as well, so it frees up digital ports for other things.

thank you. its better and easier to changing the contrast with trimpot rather using another way that you've explain.

rbayonet made it!8 months ago

Thanks for this great instructables, it took me some time but worth it. I will want to add a barometric sensor in the future.

arduino temp umid.jpg
SteveRoy (author)  rbayonet6 months ago

Hi rbayonet, good to hear you got it working. If you add a barometric sensor let us know the steps - maybe do an instructable on it.

SebastianD27 months ago

Dear Instructables!! Excellent!!!. I made it!!! The steps are very explicit. I'll try to put together all in board Pro Mini. Consumption will support the usb port? external power supply?. Thank you very much. Sebastián.

SteveRoy (author)  SebastianD26 months ago

thanks for the feedback and glad to hear you got everything working.

pjha47 months ago

enc28j60 works directly with Atmega32 microcontroller without using the arduino module ?

SteveRoy (author)  pjha47 months ago

Yes, take a look at what Tux Graphics are doing

lineuve11 months ago

Congratulations for our work.

I think I am coming to conclusion. Do you think its because I am using Arduino Ethernet shield Wiznet 811MJ module and it doesn't work . will it make any difference if I don't use "


because rbb server example complies and upload onto Wiznet 811 MJ. but when I try to use Web server example from Arduino Example it works fine?

Please Help

Thank you

Would you be able to make changes to the Final_sketch.ino as I m using Wiznet 811MJ module but not


SteveRoy (author)  ankitshyani1 year ago

Have a look at this project - Note it's not my project, but should help you with the sketch you need. It uses the WizNet module rather than the ENC28J60 I used in my Instructable

I am using exact same library as its provided over this Page. I have managed upload the Final sketch onto Uno connected to ethernet Sheild interface with LCD . it displays Temperature and humidity correctly onto LCD . But when I try to type in web the IP address which I am using onto network google chrome comes out with this error "

Oops! Google Chrome could not connect to

Try reloading: 129.­12.­50.­145"

Is it any possible reason its not working . is it because I am using arduino Ethernet sheild!

SteveRoy (author)  ankitshyani1 year ago

Did you test the Ethernet Shield as per Step 8?

SteveRoy (author)  ankitshyani1 year ago

Are the PC and Arduino on the same subnet? i.e. what is the IP address of your PC?

ColCar1 year ago

Hello Everyone !

I am also new to all of this and its been a lot to absorb, this instructable was very helpful and I wouldn't make any progress without this kind of information and I Thank You for posting it.. I followed the steps and got everything working until the Ethernet part. Im using the Arduino Ethernet shield and I am not sure what part of the webserver example sketch to cut and paste into the FinalSketch provided here.. All help would be extremely appreciated.

ColCar ColCar1 year ago

Also is it possible to go from Celsius to Fahrenheit ?

SteveRoy (author)  ColCar1 year ago

To convert from C to F the equation is:

C x 9/5 +32 = F

or C x 1.8 +32 = F

so after the line:

int t = dht.readTemperature();

you could try something like..

t = (t * 9)/5 +32;


t = (t * 1.8) + 32;

you may need to change:

int t = dht.readTemperature(); to

float t = dht.readTemperature();

so it can read and display the temp in decimal places.


Hi, every body!

I'm a new beginner.

Can you show me how to declaire byte ethernet?

I don't know that. Thanks you!

Hi,thanks for this well explained instructible.
I want to add another DHT11 and have most of the code sorted but I keep getting errors when compiling,I think the problem lies here where the extra DHT's temp and humidity must be displayed on web interface...
"Dave's Temperature & Humidity Server"
"Welcome To Dave's Online Temperature & Humidity Monitor"
"Office Sensor 1"
"Temp: $D  Degrees Celsius
Humidity: $D %"),
t, h);
// "Office Sensor 2"
// "Temp: $D  Degrees Celsius
Humidity: $D %"),
// t1, h1);
The commented out lines are the problem,please advise how to sort this,my html coding skills are zero :(
SteveRoy (author)  dsutherland1 year ago
try remove the ; after the t, h)
i.e. after the first sensor and leave it after the t1, h1)

Let me know if that works.
Hi,thanks for reply are now getting the following error when compiling - error: expected `;' before string constant with the centre h1 office sensor2 h1 line highlighted. Any further ideas welcome.
PS: Can upload sketch to a dropbox if easier for you.
1-40 of 44Next »