/* Crowdsourcing pour tous : Programmation et visualisation de capteurs fixes pour permettre aux citoyen.nes de produire diverses mesures dans un programme de santé environnement. Programme pour envoyer des données en MQTT entre un M5Sick-C (+capteur SensAirS8 +DHT) au site AdafruitOI https://www.wikidebrouillard.org/wiki/M5Stick_-_SensAirS8_-_DHT_-_MQTT ///////// Installation M5Stick-C Importer de nouvelles cartes dans l'interface Arduino https://www.wikidebrouillard.org/wiki/Importer_de_nouvelles_cartes_dans_l%27interface_Arduino#%C3%89tape_2_-_Ajout_d_un_catalogue_de_cartes_dans_l_interface_de_d%C3%A9veloppement_Arduino 1-> Préférences -> URL de gestionnaire de cartes supplémentaires https://dl.espressif.com/dl/package_esp32_index.json 2-> Outils -> Type de carte -> Gestionnaire de carte -> Rechercher et installer ESP32 ///////// Import bibliothèque https://www.wikidebrouillard.org/wiki/Importer_des_biblioth%C3%A8ques_dans_l%27interface_Arduino -> M5SticKC -> EspSoftwareSerial -> DHT sensor library -> Adafruit Unified Sensor -> AirGradient_Air_Quality_Sensor -> Adafruit_MQTT //////// Gestion de plusieurs capteurs sur le M5Stick-C Dans la biblio AirGradient_Air_Quality_Sensor à installer -> Modifier AirGradient.cpp -> Trouver PMS_Init(D5,D6); (Ligne 60) mettre en commentaire //PMS_Init(D5,D6); -> Trouver CO2_Init(D4,D3); (Ligne 569) mettre en commentaire // CO2_Init(D4,D3); -> Trouver Wire.begin(); (Ligne45) mettre en commentaire // Wire.begin(); ///////// AdafruitIO Créer un compte chez AdafruitIO pour envoyer des données dans le web https://www.wikidebrouillard.org/wiki/Cr%C3%A9er_un_compte_chez_AdafruitIO_pour_envoyer_des_donn%C3%A9es_dans_le_web Envoyer des données sur le WEB grâce à MQTT https://www.wikidebrouillard.org/wiki/Envoyer_des_donn%C3%A9es_sur_le_WEB_gr%C3%A2ce_%C3%A0_MQTT ///////// Branchement des capteurs -> Capteur DHT en grove -> Capteur CO2 -> Etape un peu de soudure https://www.wikidebrouillard.org/wiki/Un_capteur_de_CO2_avec_UIFLOW_et_M5STICK D'autres capteurs ici : https://www.wikidebrouillard.org/wiki/DataLab_-_Chapitre_3_-_Connecter_ses_capteurs CCbySA Les Petits Débrouillards 2022 */ /************************* Import bibliothèque *************************************************/ #include //Bibliothèque Wifi pour un ESP32 https://www.wikidebrouillard.org/wiki/Configurez_le_r%C3%A9seau_Wifi_sur_un_ESP #include //Bibliotheque M5StickC //#include //Bibliotheque M5SticC Plus - Des adpatations seront à faire pour la visualisation // des textes affichés à chaque ligne comprenant M5.Lcd.setCursor........ #include "DHT.h" //Bibliothèque pour le capteur DHT #include //Bibliothèque MODIFIÉ pour le capteur CO2 SensAir-S8 #include "Adafruit_MQTT.h" //Bibliothéque pour la gestion des requettes MQTT Adafruit #include "Adafruit_MQTT_Client.h" //Bibliothéque pour la gestion des requettes MQTT Adafruit /************************* Configuration pour le Wifi *************************************************/ const char* ssid = "NOMRESEAU"; // Nom de votre réseau WIFI const char* password = "MDPWIFI"; // Clef Wifi /************************* Configuration pour utiliser MQTT Adafruit *********************************/ #define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 // Suivre ce tuto pour récupérer les infos nécessaires https://www.wikidebrouillard.org/wiki/Cr%C3%A9er_un_compte_chez_AdafruitIO_pour_envoyer_des_donn%C3%A9es_dans_le_web #define AIO_USERNAME "USERNAME" //Votre nom d'utilisateur sur io.adafruit #define AIO_KEY "KEY" //Votre clef AdafruitIO /************ Création des objets MQTT et Wifi ******************************************************/ WiFiClient client; // Création d'un objet client wifi, nécessaire pour initier la connexion avec le serveur Adafruit MQTT. Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); // Création de l'objet mqtt nécessaire à la connexion avec le serveur /****************************** Création des flux de données ****************************************/ // Création des objets temp, hum et CO2 // Renseigner les chemins de vos flux de données "/feeds/****** // voir tuto https://www.wikidebrouillard.org/wiki/Envoyer_des_donn%C3%A9es_sur_le_WEB_gr%C3%A2ce_%C3%A0_MQTT Adafruit_MQTT_Publish temp = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature"); Adafruit_MQTT_Publish hum = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humidite"); Adafruit_MQTT_Publish CO2 = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/CO2"); /****************************** Configuration du capteur DHT *******************************************/ #define DHTPIN 33 // numero pin de connexion // Choisir le type de DHT #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) // Initialisation du capteur DHT DHT dht(DHTPIN, DHTTYPE); /****************************** Configuration du capteur Sensair-S8 *******************************************/ AirGradient ag = AirGradient(); // Création de l'objet ag String co2_val; /****************************** SETUP *******************************************/ void setup() { M5.begin(); // Démarrage du M5Stick Serial.begin(9600); // Démarrage de la connexion série pour le débugage WiFi.begin(ssid, password); // Connexion à la box wifi while (WiFi.status() != WL_CONNECTED) { // Attente de l'etablissement de la connexion Wifi delay(500); Serial.print("."); } Serial.println(); Serial.println("WiFi connecte"); Serial.println("IP addresse: "); Serial.println(WiFi.localIP()); //Affichage de l'adresse IP dans le terminal console M5.Lcd.setRotation(3); Serial.println("DHTxx test!"); ag.CO2_Init(36, 26, 9600); dht.begin(); } /****************************** LOOP *******************************************/ void loop() { mqtt.connect(); // Connexion au serveur MQTT d'adafruitIO delay(5000); // attente de 5 secondes (temps de mesure du capteur 2s) co2_val = ag.getCO2(); int valCO2 = co2_val.toInt(); // Conversion de la valeur CO2 en valeur entière float temp_val = dht.readTemperature(); // Lecture de la température et insertion dans la variable temp_val float hum_val = dht.readHumidity(); // Lecture de l'humidité et insertion dans la variable hum_val //Envoie des mesures de température dans le flux de donnée MQTT Adafruit CO2.publish(valCO2); temp.publish(temp_val); hum.publish(hum_val); /******* Visualisation sur l'écran du M5Stick-C ***********/ M5.Lcd.setTextColor(BLACK); M5.Lcd.setTextSize(1.5); M5.Lcd.setCursor(40, 20); M5.Lcd.println(co2_val + "ppm"); M5.Lcd.setCursor(20, 40); M5.Lcd.print("Humidity : "); M5.Lcd.print(hum_val); M5.Lcd.println(" %"); M5.Lcd.setCursor(20, 50); M5.Lcd.print("Temperature : "); M5.Lcd.print(temp_val); M5.Lcd.print(" *C"); delay(5000); /******* Modification message + couleur écran M5Stick-C en fonction de la valeur CO2 ***********/ if (co2_val.toInt() < 800) { M5.Lcd.fillScreen(GREEN); M5.Lcd.setCursor(40, 10); M5.Lcd.print("EXCELLENT"); } if (co2_val.toInt() >= 800 && co2_val.toInt() < 1000) { M5.Lcd.fillScreen(0xFFE0); // jaune M5.Lcd.setCursor(40, 10); M5.Lcd.print("MOYEN" ); } if (co2_val.toInt() >= 1000 && co2_val.toInt() < 1500) { M5.Lcd.fillScreen(0xFDA0); // orange M5.Lcd.setCursor(40, 10); M5.Lcd.print("MEDIOCRE"); } if (co2_val.toInt() >= 1500) { M5.Lcd.fillScreen(RED); M5.Lcd.setCursor(40, 10); M5.Lcd.print("VICIE"); } calibration(); } /******* Calibration Capteur CO2 ***********/ void calibration() { pinMode(37, INPUT); pinMode(0, OUTPUT); digitalWrite(0, HIGH); boolean cur_value = digitalRead(37); while (!cur_value) { cur_value = digitalRead(37); M5.Lcd.fillScreen(BLACK); M5.Lcd.setTextColor(WHITE); M5.Lcd.setTextSize(2); M5.Lcd.setCursor(2, 10); M5.Lcd.print("Calibration"); digitalWrite(0, LOW); } }