Étape 4: Un Bonus
Dans le cas où vous ne souhaitez pas utiliser Thingspeak mais veulent juste votre propre serveur Web : utilisez ce programme :
/ * * Capteur DHT11 connecté à la broche 2 < a href = « http://arduino-info.wikispaces.com/ethernet-temp-humidity » rel = « nofollow » > http://arduino-info.wikispaces.com/ethernet-temp-...> basé sur le code de David A. Mellis & Tom Igoe adapté par diy_bloke * bmp180sensor sur a4/a5 * / / *---(importation préalable bibliothèques)---* / #include < SPI.h > #include < Ethernet.h > < dht11.h > de #include #include < Wire.h > //#include < Adafruit_Sensor.h > //#include < Adafruit_BMP085_U.h > #include < Adafruit_BMP085.h > / *---(déclarer les constantes et NIP)---* / #define DHT11PIN 2 / / Le capteur de température/humidité / / saisie d’une adresse MAC et l’adresse IP de votre contrôleur ci-dessous. L’adresse IP sera tributaire de votre réseau local : mac Byte = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED} ; / *---(Déclarer des objets)---* / ip IPAddress (192,168,1, 177) ; Initialiser la bibliothèque de serveur Ethernet / / avec l’adresse IP et le port que vous souhaitez utiliser / (valeur par défaut pour HTTP est le port 80): EthernetServer server(80) ; Bmp Adafruit_BMP085_Unified = Adafruit_BMP085_Unified(10085) ; Adafruit_BMP085 bmp ; dht11 DHT11 ; L’objet de capteur / *---(déclarer les Variables)---* / void setup() / *** SETUP : s’exécute une fois *** / {/ / ouvrir la communication série et attendez de port à ouvrir : Serial.begin(9600) ; while (! Série) {; / / attente pour port série pour se connecter. Besoin pour Leonardo seulement} / / démarrer la connexion Ethernet et le serveur : Ethernet.begin (mac, ip) ; Server.Begin() ; Serial.Print (F ("le serveur est à")) ; Serial.println(Ethernet.localIP()) ; } //--(end setup)---void loop() / *---(boucle : RUNS OVER AND OVER AGAIN)---* / {/ / Ecoute client de EthernetClient les clients entrants = server.available() ; if (client) {Serial.println (F ("nouveau client")); / / une requête http se termine par un currentLineIsBlank booléenne ligne vide = true ; while (client.connected()) {si (client.available()) {char c = client.read() ; Serial.Write(c) ; Si vous avez obtenu à la fin de la ligne (a reçu un saut de ligne / / character) et la ligne est vide, la requête http est terminée, / / donc vous pouvez envoyer une réponse si (c == « \n » & & currentLineIsBlank) {/ / Envoyer un client.println d’en-tête de réponse http standard ("HTTP/1.1 200 OK"); client.println ("Content-Type : text/html"); client.println ("connexion : fermer"); client.println() ; client.println("<! DOCTYPE HTML > ") ; client.println ("< html >") ; Ajouter une balise refresh meta, afin que le navigateur tire encore une fois toutes les 5 secondes : client.println ("< meta http-equiv = \ « refresh\ » content = \ « 5\ » >") ; client.println ("< head >") ; client.println ("< title >") ; client.println (F ("My Home Environment")) ; client.println ("< /title >") ; client.println ("</head >") ; client.println ("< body >") ; client.Print (F ("My Home Environment < h3 > </h3 >")) ; client.println ("< br/>") ; / *---(Obtenir la lecture de la sonde, calculer et imprimer les résultats)---* / int chk = DHT11.read(DHT11PIN) ; Serial.Print (F (« capteur de lecture: ")) ; commutateur (chk) {case 0: Serial.println(F("OK")) ; break ; case -1 : Serial.println (F (« Checksum error")); break ; case -2 : Serial.println (F ("erreur de délai d’expiration")); break ; default : Serial.println (F ("erreur inconnue")); break;} / * obtenir un nouvel événement de capteur (BMP085) * / / / sensors_event_t événement ; bmp.getEvent(&event) ; ---client.print (F ("< table style =" border : 1px solid black ; background-color : white; » > ")) ; client.Print (F ("< tr >< td >")) ; client.Print ("< couleur de police = « red » > température </police > (° C):") ; client.Print (F ("< /td >< td align = « right » >")) ; client.println ((float) DHT11.temperature, 1) ; client.println (F ("< br/>")) ; client.Print (F ("< /td >< /tr >")) ; client.Print (F ("< tr >< td >")) ; client.Print ("< b > température < /b > (° F):") ; client.Print (F ("< /td >< td align = « right » >")) ; client.println(Fahrenheit(DHT11.Temperature), 1) ; client.println ("< br/>") ; client.Print (F ("< /td >< /tr >")) ; client.Print (F ("< tr >< td >")) ; client.Print ("< couleur de police = « blue » > humidité </police > (%):") ; client.Print (F ("< /td >< td align = « right » >")) ; client.println ((float) DHT11.humidity, 0) ; client.println ("< br/>") ; client.Print (F ("< /td >< /tr >")) ; client.Print (F ("< tr >< td >")) ; / * client.print ("< b > température < /b > (° K):") ; client.println(Kelvin(DHT11.Temperature), 1) ; client.println ("< br/>") ; * / client.print ("< i > < /i > (° C) du Point de rosée:") ; client.Print (F ("< /td >< td align = « right » >")) ; client.println (point de rosée (DHT11.temperature, DHT11.humidity)) ; client.println ("< br/>") ; client.Print (F ("< /td >< /tr >")) ; client.Print (F ("< tr >< td >")) ; client.Print ("< i > PointFast < /i > (° C) de la rosée:") ; client.Print (F ("< /td >< td align = « right » >")) ; client.println (dewPointFast (DHT11.temperature, DHT11.humidity)) ; client.println ("< br/>") ; client.Print (F ("< /td >< /tr >")) ; client.Print (F ("< tr >< td >")) ; Si (! bmp.begin()) {client.print ("geen sensor");} else {client.print ("pression (hPa):") ; client.Print (F ("< /td >< td align = « right » >")) ; client.println(BMP.readPressure()/100.0) ; client.Print (F ("< /td >< /tr >")) ; client.Print (F ("< tr >< td >")) ; client.Print ("pression (mmHg):") ; client.Print (F ("< /td >< td align = « right » >")) ; client.println(BMP.readPressure()/133.3) ; client.Print (F ("< /td >< /tr >")) ; client.Print (F ("< tr >< td >")) ; client.println ("température (° C):") ; client.Print (F ("< /td >< td align = « right » >")) ; client.Print(BMP.readTemperature()) ; client.println ("< br/>") ; } client.print (F ("< /td >< /tr >")) ; client.Print (F ("< /table >")) ; / * Afficher les résultats (la pression barométrique est mesure en hPa) * / / * afficher la pression atmosphérique en hPa * / / * client.print (« pression: ") ; client.println(Event.Pressure) ; client.println (« HP ») ; client.println ("< br/>") ; * / / *---(Fin capteur lire)---* / client.println ("</corps >") ; client.println ("</html >") ; rupture ; } Si (c == « \n ») {/ / vous commencez une nouvelle currentLineIsBlank de ligne = true;} ElseIf (c ! = '\r') {/ / vous avez obtenu un personnage sur le currentLineIsBlank de ligne actuel = false;}} } / / donner le temps de navigateur web pour recevoir les delay(1) de données ; fermer la connexion : client.stop() ; Serial.println (F ("client disonnected")) ; }} / / FIN de boucle / *---(fonctions écrites par l’utilisateur Declare)---* / / / //Celsius à Fahrenheit conversion double (double celsius Fahrenheit) {retour 1,8 * celsius + 32;} //Celsius à la conversion de Kelvin double Kelvin (double celsius) {return celsius + 273.15;} / / point de rosée fonction NOAA / / référence : < a href = "http://wahiduddin.net/calc/density_algorithms.htm" rel = "nofollow" > http://arduino-info.wikispaces.com/ethernet-temp-...> double point de rosée (double celsius, double humidité) {double A0 = 373,15 / (273,15 + celsius); double somme =-7.90298 * (A0-1) ; SUM += 5.02808 * log10(A0) ; SOMME +=-1.3816e-7 * (pow (10, (11.344*(1-1/A0)))-1) ; SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ; SUM += log10(1013.246) ; double VP = pow (10, SUM-3) * humidité ; double T = log(VP/0.61078) ; retour de temp var (241.88 * T) / (17,558-T) ; } / / delta max = 0.6544 wrt dewPoint() / / 5 x plus rapide que dewPoint() / / Référence : < a href = « http://en.wikipedia.org/wiki/Dew_point » rel = « nofollow » > http://arduino-info.wikispaces.com/ethernet-temp-...> double dewPointFast (double celsius, double humidité) {double un = 17.271 ; double b = 237.7 ; double temp = (une * celsius) / (b + c) + log(humidity/100) ; double Td = (b * temp) / (a - temp); retour Td;} / * (THE END) * /