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