/* DHT22-4.ino : Lecture des donnees a partir du capteur DHT22, Affichage des donnees lues Transcodage pour la transmission Decodage apres la reception Affichage des donnees reconstituees Sketchs de base issus de https://github.com/panStamp/panstamp/wiki et de panstamp - Daniel Berenger : BasicRadio, BasicBeacon, DHT22... Modifications - adaptations pour les tests : Philippe Redoutey, janvier 2015 Raccordement du DHT22 : Connectez la pin 1 du capteur (gauche vu de face) au +5V. NOTE: si vous utilisez une carte qui fonctionne en 3,3v panstamp, arduino Due... pour les niveaux logiques, connectez la pin 1 au 3,3v au lieu du 5v. Connectez pin 2 du capteur a la DHTPIN definie. Connectez la pin 4 (droite vu de face) a la masse (GND). Connectez une resistance de 10 a 27Kohms entre les pin 2 (data) et l (alimentation du capteur). Essai de transcodage a partir de http://www.varesano.net/blog/fabio/sending-float-variables-over-serial-without-loss-precision-arduino-and-processing */ // permet d'envoyer les informations vers le moniteur s�rie #include "HardwareSerial.h" // Bibliotheque pour le DHT #include "DHT.h" // Definition des Numeros de pin utilisees // NB : il s'agit du raccordement existant sur la carte Battery Board int Sensor_ENA = 15; // alimentation du capteur #define DHTPIN 16 // connexion pour les datas #define LED 4 // pour les test, pour verifier le passage dans les boucles float hum2; float temp2; // Lignes a activer ou desactiver en fonction du capteur utilise //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) // Initialisation du capteur; attention, valable pour un Arduino "normal" a 16MHz DHT dht(DHTPIN, DHTTYPE); // NOTE: For working with a faster chip, like an Arduino Due or Teensy, you // might need to increase the threshold for cycle counts considered a 1 or 0. // You can do this by passing a 3rd parameter for this threshold. It's a bit // of fiddling to find the right value, but in general the faster the CPU the // higher the value. The default for a 16mhz AVR is a value of 6. For an // Arduino Due that runs at 84mhz a value of 30 works. // Example to initialize DHT sensor for Arduino Due: //DHT dht(DHTPIN, DHTTYPE, 30); void setup() { Serial.begin(9600); Serial.println("DHTxx test!"); pinMode(Sensor_ENA, OUTPUT); digitalWrite(Sensor_ENA, HIGH); pinMode(LED, OUTPUT); dht.begin(); } void loop() { // Attention, il faut attendre quelques secondes entre 2 mesures. // ! Il s'agit d'un capteur tras lent // La lecture des donnaes prend envion 250 millisecondes delay(2000); digitalWrite(LED, HIGH); // pour les tests // Lecture hygrometrie en % float hum1 = dht.readHumidity(); // Lecture temperature en degres Celsius float temp1 = dht.readTemperature(); // Lecture temperature en degres Fahrenheit // float f = dht.readTemperature(true); digitalWrite(LED, LOW); // pour les tests // Verification de la bonne lecture des donnees // sinon, sortie directe pour relecture immediate if (isnan(hum1) || isnan(temp1)) { Serial.println("Failed to read from DHT sensor!"); return; } // Affichagege sur le moniteur serie pour les tests Serial.println("Mesures directes et envoyees"); Serial.print("Humidite: "); Serial.print(hum1,1); Serial.print(" %\t"); // \t = tabulation Serial.print("Temperature: "); Serial.print(temp1,1); Serial.print(" °C\t"); Serial.println(); // Faute de savoir transcoder le float, je me limite à 1 decimale et je transforme en Int pour la transmission int IntHum1 = (hum1 * 10); int IntTemp1 = (temp1 * 10); // Serial.print(IntHum1); // Serial.print(" "); // Serial.println(IntTemp1); // Essai de codage - decodage // On convertit la valeur de l'int en un tableau de 2 octets byte * BufOutHum = (byte *) &IntHum1; byte * BufOutTemp = (byte *) &IntTemp1; // on prépare la transmission de la première valeur byte OctetOut1 = BufOutHum[0]; byte OctetOut2 = BufOutHum[1]; // On prépare la transmission de la seconde valeur byte OctetOut3 = BufOutTemp[0]; byte OctetOut4 = BufOutTemp[1]; // ----------------------------------------- // --- Transmission a cet endroit --- // ----------------------------------------- byte OctetIn1 = OctetOut1; byte OctetIn2 = OctetOut2; byte OctetIn3 = OctetOut3; byte OctetIn4 = OctetOut4; /* int intbit = 0; intbit = (OctetIn4 << 24) | ((OctetIn3 & 0xff) << 16) | ((OctetIn2 & 0xff) << 8) | (OctetIn1 & 0xff); float hum2 = float.intBitsToFloat(intbit); */ // int IntHum2 = (OctetIn4 << 24) | ((OctetIn3 & 0xff) << 16) | ((OctetIn2 & 0xff) << 8) | (OctetIn1 & 0xff); // float hum2 = (OctetIn1 << 24) | ((OctetIn2 & 0xff) << 16) | ((OctetIn3 & 0xff) << 8) | (OctetIn4 & 0xff); int IntHum2 = ((OctetIn2 & 0xff) << 8) | (OctetIn1 & 0xff); int IntTemp2 = ((OctetIn4 & 0xff) << 8) | (OctetIn3 & 0xff); // Serial.println(IntHum2); float hum2 = IntHum2 / 10.0; float temp2 = IntTemp2 / 10.0; Serial.println("Mesures recues"); Serial.print("Humidite: "); Serial.print(hum2,1); Serial.print(" %\t"); // \t = tabulation Serial.print("Temperature: "); Serial.print(temp2,1); Serial.print(" °C\t"); Serial.println(); Serial.println(); } // fin du void loop