Fleur connectée
mars
2017 Mooc France Université Numérique FUN. |
/* Web Server A simple web server that shows the value of the analog input pins. using an Arduino Wiznet Ethernet shield. Circuit: Ethernet shield attached to pins 10, 11, 12, 13 Analog inputs attached to pins A0 through A5 (optional) created 18 Dec 2009 by David A. Mellis modified 9 Apr 2012 by Tom Igoe modified 02 Sept 2015 by Arturo Guadalupi */ #include <SPI.h> #include <Ethernet.h> // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,1,37);//IP fixe attribué à la carte // Initialize the Ethernet server library // with the IP address and port you want to use // (port 80 is default for HTTP): EthernetServer server(80); //port du serveur - par defaut (80) int mesureT = 0; //Variable pour le stockage mesure retournee par le capteur de temperature float T = 0; //Variable pour le stockage de la temperature int analogT = A5; //Numero du port analogique sur lequel la temperature est mesuree int mesureH = 0; //Variable pour le stockage mesure retournee par le capteur d'humidite float H = 0; //Variable pour le stockage de l'humidite int analogH = A0; //Numero du port analogique sur leq unsigned long previousMillis = 0; //Variable pour stocker l'heure de la dernière mesure const long interval = 2000; //1 mesure toutes les 2 secondes void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } // start the Ethernet connection and the server: Ethernet.begin(mac,ip); // connexion du serveur avec son adresse mac et son adresse ip //Ethernet.begin(mac, ip); // connexion du serveur avec son adresse mac et son adresse ip delay(1000); server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP()); // vérification de l'ip du serveur } void loop() { unsigned long currentMillis = millis(); // gestion de l'interval de temps de la demande des informations if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; T = mesureTemp(); //appel de la fonction mesureTemp() H = mesureHum(); // appel de la fonction mesureHum(); } // 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(); client.println("<!DOCTYPE HTML>"); client.println("<html><head><meta charset=\"UTF-8\"><meta http-equiv=\"refresh\" content=\"5\">"); client.println("<title>Température et humidité - Plante connectée</title>"); client.println("<meta name=\"viewport\" content=\"width=device-width\"/>"); client.println("</head><body>"); //Affichage Graphique client.println("<h1 style=\"margin-left:100px;\">Température et humidité</h1>"); client.println("<div id=\"fond\" style=\"position:relative;\">"); client.println("<img src=\"http://arduino.mooc.gobelins.fr/images/illustration.svg\" style=\"height:400px;\" />"); client.println("<div id=\"temperature\" style=\"width:41px;background: white;position: absolute; top:92px;left:127px;height:"); client.print(215-(T*215/40)); client.print("px;\"></div>"); client.println("<div id=\"humidite\" style=\"width:65px;background: white;position: absolute; top:49px;left:360px;height:"); client.print(335-(H*335/100)); //H*335/100 correspond à la hauteur du bloc div. client.print("px;\"></div>"); client.println("</div> <!--Fin de la div fond-->"); //Affichage en texte client.print("<p style=\"margin-left:90px;float:left\">Température : "); //client.print(mesureT); client.print(T); client.println("°C</p>"); client.print("<p style=\"margin-left:110px;float:left\">Humidité : "); client.print(H); // calcul pour convertir la taille du rectangle en % d'humidité client.print("%</p>"); client.println("</body></html>"); 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 disconnected"); Ethernet.maintain(); } }//Fin loop float mesureTemp() { mesureT = analogRead(analogT); //Lecture de la valeur fournie par le capteur de temperature- 0.10v/°c. Ce résultat est une tension float degre = mesureT * (1.1/1023.0)*100; //conversion de la tension en °C Serial.print("degre : ");Serial.println(degre); return degre; } float mesureHum() { mesureH = analogRead(analogH); // Mesure du capteur d'humidité mesureH = constrain(mesureH, 0,500); // Changement d'interval de la mesure en valeurs s'échelonnant de 100 à 0. // On a inversé les valeurs de min et max car une tension faible indique une grande résistance et donc une faible humidité. // Ainsi la valeur 16 correspondra à une humidité de 100%. // Et la valeur 670 correspondra à une forte résistance, donc une absence d'humidité. Serial.print("humidite : ");Serial.println(map(mesureH, 0,500,0,100)); return map(mesureH, 0,500,0,100); // retour du taux d'humidité } |