THE SUPER SIMPLE ARDUINO WEATHER WEB SERVER
This shield from Arduino (the company) gives your Arduino (the board) the ability to communicate
over the network, and internet. Write down the MAC address on the back, then plug the shield in,
on top of your arduino, and connect a Ethernet cable to your router.
See the new BME280 combination Temperature, Humidity, AND Barometric Pressure Sensor all in one!
6/2/2015 See the new WiFi Version! - http://arduinotronics.blogspot.com/2015/06/wifi-we...
I wanted to set up a home web server that could monitor indoor and outdoor temperature, humidity
levels, and even monitor for indoor freezing or flooding conditions (and other security, appliance or
environmental alerts). The approach I took consists of a Arduino and a Ethernet shield, running a tiny
web server sketch, and for this example, I'm using the popular DHT-11 Temperature / Humidity module.
You can interface this to smoke / heat sensors, CO and other gas sensors, and a whole lot more.
levels, and even monitor for indoor freezing or flooding conditions (and other security, appliance or
environmental alerts). The approach I took consists of a Arduino and a Ethernet shield, running a tiny
web server sketch, and for this example, I'm using the popular DHT-11 Temperature / Humidity module.
You can interface this to smoke / heat sensors, CO and other gas sensors, and a whole lot more.
Temperature / Humidity Sensor
This little 4 pin sensor (only 3 are used) is an inexpensive and common sensor. It's easy to use and
connect. Pin 1 connects to +5v, Pin 2 to an Arduino Input (we are using D2 on the Arduino), and pin 4
to Arduino Gnd. Since the Ethernet shield will stack on top of the Arduino, plug the DHT-11
into the same pins on the Ethernet shield.
The ethernet shield uses pins A0, A1, D4, and D10-D13
The DHT-11 is using D2, but can be changed.
The BMP180 uses A4 & A5.
to Arduino Gnd. Since the Ethernet shield will stack on top of the Arduino, plug the DHT-11
into the same pins on the Ethernet shield.
The ethernet shield uses pins A0, A1, D4, and D10-D13
The DHT-11 is using D2, but can be changed.
The BMP180 uses A4 & A5.
Step 2: The Ethernet Shield
This shield from Arduino (the company) gives your Arduino (the board) the ability to communicate
over the network, and internet. Write down the MAC address on the back, then plug the shield in,
on top of your arduino, and connect a Ethernet cable to your router.
Step 3: The Code
I've adapted the sample Web Server app included with the Arduino, by merging the DHTxx code
and library from Lady Ada. This basically changes Serial.print statements to client.print, and I've
massaged the html a bit to make it display nicer. You can download the code at
and library from Lady Ada. This basically changes Serial.print statements to client.print, and I've
massaged the html a bit to make it display nicer. You can download the code at
#include
#define DHTPIN 2 // what pin we're connected to
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
DHT dht(DHTPIN, DHTTYPE);
#include
#include
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0x90, 0xA2, 0xDA, 0x00, 0x23, 0x36 }; //MAC address found on the back of your ethernet shield.
IPAddress ip(192,168,254,177); // IP address dependent upon your network addresses.
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
dht.begin();
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
float t = dht.readTemperature();
// check if returns are valid, if they are NaN (not a number) then something went wrong!
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT");
} else {
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
}
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
// the connection will be closed after completion of the response
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("");
client.println("");
// output the value of the DHT-11
client.println("
");
");
client.println("");
client.println("
");
");
client.println("");
client.println("
");
");
client.println("
");
");
client.println("");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disonnected");
}
}
#define DHTPIN 2 // what pin we're connected to
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
DHT dht(DHTPIN, DHTTYPE);
#include
#include
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0x90, 0xA2, 0xDA, 0x00, 0x23, 0x36 }; //MAC address found on the back of your ethernet shield.
IPAddress ip(192,168,254,177); // IP address dependent upon your network addresses.
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
dht.begin();
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
float t = dht.readTemperature();
// check if returns are valid, if they are NaN (not a number) then something went wrong!
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT");
} else {
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
}
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("");
client.println("");
// output the value of the DHT-11
client.println("
");
client.print("Humidity: ");
client.println("
");client.println("");
client.println("
");
client.print(h);
client.print(" %\t");
client.println("
");client.println("");
client.println("
");
client.print("Temperature: ");
client.println("
");client.println("
");
client.print(t*1.8+32);
client.println(" °");
client.println("F");
client.println("
");client.println("");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disonnected");
}
}
No comments:
Post a Comment