Arduino prog météo
Arduino prog météo
#include "SparkFunBME280.h" //Library allows either I2C or SPI, so include both. #include "Wire.h" #include "SPI.h" #include "DHT.h" #include #include LiquidCrystal lcd( 3, 4, 5, 6, 9, 8); #define REFRESH 3000 #define DHTPIN 2 // Changer le pin sur lequel est branché le DHT #define DHTTYPE DHT11 // DHT 11 SoftwareSerial softSerial(10, 11); // RX, TX String SSID = ""; // SSID du réseau Wi-Fi String PASS = ""; // Mot de passe Wi-Fi DHT dht(DHTPIN, DHTTYPE); BME280 capteur; int dustPin = 7; // dust sensor - Arduino A0 pin int ledPin = 0; float voltsMeasured = 0; float calcVoltage = 0; float dustDensity = 0; float Humidity = 0; float Pression_at = 0; float Temperature = 0; float pressure; //Pour stocker la pression (Pa) /* private function */ /** Fonction de calcul rapide du point de rosée en fonction de la température et de l'humidité ambiante */ double dewPoint(double celsius, double humidity) { // Constantes d'approximation // Voir http://en.wikipedia.org/wiki/Dew_point pour plus de constantes const double a = 17.27; const double b = 237.7; // Calcul (approximation) double temp = (a * celsius) / (b + celsius) + log(humidity * 0.01); return (b * temp) / (a - temp); } void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); //iled default closed while (!Serial) { // Attente de l'ouverture du port série pour Arduino LEONARDO } //configuration du capteur capteur.settings.commInterface = I2C_MODE; capteur.settings.I2CAddress = 0x76; capteur.settings.runMode = 3; capteur.settings.tStandby = 0; capteur.settings.filter = 0; capteur.settings.tempOverSample = 1 ; capteur.settings.pressOverSample = 1; capteur.settings.humidOverSample = 1; Serial.println("Starting BME280... "); delay(10); // attente de la mise en route du capteur. 2 ms minimum // chargement de la configuration du capteur capteur.begin(); dht.begin(); lcd.begin(16, 2); //config wifi softSerial.begin(115200); // baudrate par défaut de l'ESP8266 delay(100); // on demande à utiliser un baudrate inférieur // (notre esp8266 s'est montrer plus stable ainsi) softSerial.println("AT+CIOBAUD=9600"); delay(200); softSerial.begin(9600); } void sendValue(String value) { //IP de votre serveur web a changer selon votre réseau"; String host = "192.168.0.12"; delay(100); // on va se connecter à un réseau existant, donc on passe en mode station softSerial.println("AT+CWMODE=1"); delay(1000); // on se connecte au réseau softSerial.println("AT+CWJAP=\"" + SSID + "\",\"" + PASS + "\""); delay(10000); // mode "connexions multiples" softSerial.println("AT+CIPMUX=1"); delay(3000); // on se connecte à notre serveur en TCP sur le port 80 softSerial.println("AT+CIPSTART=4,\"TCP\",\"" + host + "\",80"); delay(1000); String request = "GET /meteo/receive.php" + value + " HTTP/1.0\r\n"; // chemin de et nom du fichier qui recevra les données request += "Host:" + host + "\r\n"; // on donne la taille de la requête qu'on va envoyer, en ajoutant 2 car // println ajouter 2 caractères à la fin "\r" et "\n" softSerial.println("AT+CIPSEND=4," + String(request.length() + 2)); delay(500); // on envoie la requete softSerial.println(request); if (softSerial.available()) { Serial.print(softSerial.read()); } delay(3000); // on ferme la connexion softSerial.println("AT+CIPCLOSE=4"); Serial.println(request); } void loop() { digitalWrite(ledPin, HIGH); // power on the LED delayMicroseconds(280); voltsMeasured = analogRead(dustPin); // read the dust value delayMicroseconds(40); digitalWrite(ledPin, LOW); // turn the LED off delayMicroseconds(9680); //measure your 5v and change below calcVoltage = voltsMeasured * (5.0 / 1024.0); dustDensity = 0.17 * calcVoltage - 0.1; Serial.println("GP2Y1010AU0F readings"); Serial.print("Raw Signal Value = "); Serial.println(voltsMeasured); Serial.print("Voltage = "); Serial.println(calcVoltage); Serial.print("Dust Density = "); Serial.println(dustDensity); // mg/m3 Serial.println(""); //Serial.print("Altitude: "); //Serial.print(capteur.readAltitude (1020)); Serial.print("Température : "); Temperature = capteur.readTempC(); Serial.print(Temperature, 2); Serial.println(" °C"); Serial.print("Pression : "); Pression_at = capteur.readFloatPressure(); //Serial.print(Pression_at, 2); //Serial.println(" Pa "); Serial.print(Pression_at / 100); Serial.println(" mB"); Serial.print("Humidité relative : "); Serial.print(capteur.readFloatHumidity(), 2); Serial.println(" %"); Serial.print("Poussiere : "); Serial.print(dustDensity); Serial.println(" mg/m3"); // Lecture du taux d'humidité float Humidity = dht.readHumidity(); // Lecture de la température en Celcius float t = dht.readTemperature(); // Pour lire la température en Fahrenheit float f = dht.readTemperature(true); // Calcul la température ressentie. Il calcul est effectué à partir de la température en Fahrenheit // On fait la conversion en Celcius dans la foulée float hi = dht.computeHeatIndex(f, Humidity); Serial.print("Humidite: "); Serial.print(Humidity); Serial.println(" %"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" °C "); Serial.print("Temperature ressentie: "); Serial.print(dht.convertFtoC(hi)); Serial.println(" °C"); Serial.print("Point de rosee: "); Serial.print(dewPoint(t, Humidity)); Serial.println(" °C\n"); // set the cursor to (0,0): lcd.setCursor(0, 0); // print from 0 to 9: lcd.print("Temp: "); lcd.print(capteur.readTempC(), 2); lcd.print("C "); // set the cursor to (16,1): lcd.setCursor(0, 1); lcd.print("Humidity: "); lcd.print(Humidity); lcd.print("%"); delay(REFRESH); // set the cursor to (0,0): lcd.setCursor(0, 0); // print from 0 to 9: lcd.print("Dust: "); lcd.print(dustDensity); lcd.print("mg/m3"); // set the cursor to (16,1): lcd.setCursor(0, 1); lcd.print("Pressur: "); lcd.print(Pression_at / 100); lcd.print("mb"); delay(REFRESH); // construction des paramètres à transférer // ici le capteur est l'id 1, a changer sur chaque station pour les différencier String url_temperature = String(Temperature); // dans la vraie vie on utiliserait la valeur retournée par un capteur String url_pression = String(Pression_at); String url_humidite = String(Humidity); String url = "?capteur=1&temperature=" + url_temperature + "&pression=" + url_pression + "&humidite=" + url_humidite; sendValue( url); }Code sources Arduino CPP

Publié le : 01/06/2022
Mise à jour : 06/07/2022
Catégories
- Arduino 1
- Bash 0
- C 0
- Capteurs 0
- Code sources 2
- CPP 1
- ESP8266MOD 1
- MicroPython 1
- PHP 0
- Python 1
- Raspberry Pi 1