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.

Step 1:

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
<p>Thanks a lot!</p>
I am using same library and connection here temp. and humidity is displaying on LCD and the connection of Ethernet module is showing on LCD but temp and humidity not showing on web page and the Ethernet test is also not working Is there any change in setting of IP in computer
<p>Are you using a enc28j60 or a W5100 (WizNet) ethernet adapter?</p><p>If your network isn't on a 192.168.1.x subnet made sure to change the IP address in the sketch to match your subnet and make sure it's a free IP address</p>
<p>Have the ethernet drivers for the wiznet w5100 or the enc28j60 been pulled into the main arduino core yet? I couldn't find it in the github repo but perhaps I'm not looking in the right place. (Kinda confusing with hardware 'sam' vs 'avr')</p><p>For example, is there hardware that works out of the (ide) box for this:</p><p><a href="http://playground.arduino.cc/Code/WebServer" rel="nofollow">http://playground.arduino.cc/Code/WebServer</a></p>
<p>The W5100 is in the Arduino core and is the:</p><p>#include &lt;Ethernet.h&gt;</p><p>The ENC28J60 needs the library added to your library folder<br></p>
<p>How do we change the temperature to read Fahrenheit instead of Celcius? </p>
<p>To convert from C to F the equation is:</p><p>C x 9/5 +32 = F</p><p>or C x 1.8 +32 = F</p><p>so after the line:</p><p>int t = dht.readTemperature();</p><p>you could try something like..</p><p>t = (t * 9)/5 +32;</p><p>or</p><p>t = (t * 1.8) + 32;</p><p>you may need to change:</p><p>int t = dht.readTemperature(); to</p><p>float t = dht.readTemperature();</p><p>so it can read and display the temp in decimal places.</p>
<p>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.</p>
<p>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.</p>
<p>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!</p>
<p>Why send your data to Thingspeak? </p>
<p>Nice, I must try uploading to thingspeak too!</p>
<p>[want to ask]</p><p>hi i from Indonesia, i still success until step 6 :)<br>buat i have problem with the ethernet shiled, i use ethernet shield from DFRobot </p><p><a href="http://www.dfrobot.com/index.php?route=product/product&product_id=455" rel="nofollow">http://www.dfrobot.com/index.php?route=product/pro...</a> </p><p>the library is different with the ENC28J60, anyone can help me?</p>
<p>Have a look at this project - it's not mine, but similar and uses a W5100 chip</p><p>https://arduino-info.wikispaces.com/ethernet-temp-humidity</p>
<p>Thank &quot; instructables.com &quot;</p><p>until Step 6 :) amazing *_&amp;<br> i dont try step 7</p>
<p>How hard would it be to modify the code to upload the data to thingspeak or a similar service?</p>
<p>Foe me? hard. For a programmer, probably fairly easy. </p><p>Start here:</p><p>http://community.thingspeak.com/tutorials/arduino/using-an-arduino-ethernet-shield-to-update-a-thingspeak-channel/</p>
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???
<p>You may need a cross over cable if you go directly from a PC to the enc module</p>
<p>sorry to much asking, what if using lcd shield like in this site: <a href="http://www.famosastudio.com/lcd-shield" rel="nofollow"> http://www.famosastudio.com/lcd-shield</a></p><p>did it will make more simple?.. and how the wiring, its completly different cuz its shield. and yours was just lcd and trimpot. </p>
<p>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 &quot;backpack&quot; and change the code.</p>
<p>thanks man, yeah you right, too many wire to be soldered. thats why i ask. ok. </p>
<p>aye bro. what if we don't using the trimpot, did need a change on the wiring diagram or not?</p>
<p>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 &quot;backpacks&quot; 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.</p>
<p>thank you. its better and easier to changing the contrast with trimpot rather using another way that you've explain. </p>
<p>Thanks for this great instructables, it took me some time but worth it. I will want to add a barometric sensor in the future.</p>
<p>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.</p>
<p>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&aacute;n.</p>
<p>thanks for the feedback and glad to hear you got everything working.</p>
<p>enc28j60 works directly with Atmega32 microcontroller without using the arduino module ?</p>
<p>Yes, take a look at what Tux Graphics are doing</p><p>http://tuxgraphics.org/electronics/</p>
<p>Congratulations for our work. </p>
<p>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 &quot;</p><p>ENC28J60&quot;</p><p>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?</p><p>Please Help</p><p>Thank you</p>
<p>Would you be able to make changes to the Final_sketch.ino as I m using Wiznet 811MJ module but not </p><p>ENC28J60? </p>
<p>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</p><p>https://arduino-info.wikispaces.com/ethernet-temp-humidity</p>
<p>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 &quot; </p>Oops! Google Chrome could not connect to<p>Try reloading: <a href="" rel="nofollow">129.&shy;12.&shy;50.&shy;145</a>&quot;</p><p>Is it any possible reason its not working . is it because I am using arduino Ethernet sheild! </p>
<p>Did you test the Ethernet Shield as per Step 8?</p>
<p>Are the PC and Arduino on the same subnet? i.e. what is the IP address of your PC?</p>
<p>Hello Everyone !</p><p>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.</p>
<p>Also is it possible to go from Celsius to Fahrenheit ? </p>
<p>To convert from C to F the equation is:</p><p>C x 9/5 +32 = F</p><p>or C x 1.8 +32 = F</p><p>so after the line:</p><p>int t = dht.readTemperature();</p><p>you could try something like..</p><p>t = (t * 9)/5 +32;</p><p>or</p><p>t = (t * 1.8) + 32;</p><p>you may need to change:</p><p>int t = dht.readTemperature(); to</p><p>float t = dht.readTemperature();</p><p>so it can read and display the temp in decimal places.</p><p>Steve</p>
<p>Hi, every body!</p><p>I'm a new beginner.</p><p>Can you show me how to declaire byte ethernet?</p><p>I don't know that. Thanks you!</p>
Hi,thanks for this well explained instructible. <br>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... <br> &quot;&quot; <br> &quot;Dave's Temperature &amp; Humidity Server&quot; <br> &quot;Welcome To Dave's Online Temperature &amp; Humidity Monitor&quot; <br> &quot;Office Sensor 1&quot; <br> &quot;Temp: $D&nbsp; Degrees Celsius <br>Humidity: $D %&quot;), <br> t, h); <br> // &quot;Office Sensor 2&quot; <br> // &quot;Temp: $D&nbsp; Degrees Celsius <br>Humidity: $D %&quot;), <br> // t1, h1); <br>The commented out lines are the problem,please advise how to sort this,my html coding skills are zero :(
try remove the ; after the t, h) <br>i.e. after the first sensor and leave it after the t1, h1) <br> <br>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. <br>PS: Can upload sketch to a dropbox if easier for you.
You need to do something like this: <br>Put the 4 $D first and then the t, h, t1, h1 on the last line <br> <br>// Here we build a web page and pass the t and h values into it <br>static word homePage() { <br> //ReadDHT11(); <br> <br> bfill = ether.tcpOffset(); <br> bfill.emit_p(PSTR( <br> &quot;HTTP/1.0 200 OK\r\n&quot; <br> &quot;Content-Type: text/html\r\n&quot; <br> &quot;Pragma: no-cache\r\n&quot; <br> &quot;\r\n&quot; <br> &quot;&quot; <br> &quot;Temp server&quot; <br> &quot;<h1>Temp1: $D C <br>Humidity1: $D % <br>Temp2: $D C <br>Humidity2: $D %</h1>&quot;), <br> t, h, t1, h1); <br> return bfill.position(); <br>}
OK it took my code literally... :) <br> <br>Do a temp1: $D and follow with humidity1: $D then temp2: $D etc <br>last like becomes <br>t, h, t1, h1); <br> <br>hope that makes sense <br> <br>Steve

About This Instructable


138 favorites


More by SteveRoy: Building a  Prusa i3 3D Printer Add your own trails to OpenStreetMaps Save a track from your Garmin Oregon GPS
Add instructable to: