Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Exemple basic de transimission avec transmetteurs
- * de type RFM69
- *
- * source:
- * Simple RFM12B wireless demo - Receiver - no ack
- * Glyn Hudson openenergymonitor.org GNU GPL V3 7/7/11
- * Credit to JCW from Jeelabs.org for RFM12
- *
- * voir aussi:
- * https://www.mysensors.org/build/connect_radio#wiring-the-rfm69-radio
- */
- //nous créons un compteur pour lire les valeurs toutes les 10 minutes
- #define TENMIN (1000UL * 60 * 10);
- unsigned long rolltime = millis() + TENMIN;
- #define RF69_COMPAT 1 // 1 pour RFM69CW ou 0 pour RFM12B
- #include <JeeLib.h> //from jeelabs.org
- #define myNodeID 10 //node ID du transmetteur (range 0-30) different du recepteur
- #define network 210 //groupe reseau (peut être entre 1-250).le même que le recepteur
- /**
- * Frequences du RF12B/RFM69 peut être:
- * RF12_433MHZ, RF12_868MHZ ou RF12_915MHZ.
- * fonction de la frequence du module
- *
- * Lecture de température avec un ou plusieurs
- * capteurs DS18B20
- */
- /**
- * Nous utilisons la librairie OneWire
- * Elle doit être présente dans le répertoire libraries
- * situé dans le répertoire des croquis/sketchs
- * voir dans le menu Préférences
- * cf: https://github.com/PaulStoffregen/OneWire/archive/master.zip
- */
- #include <OneWire.h>
- /**
- * nous utilisons Tiny RTC module horloge
- * DS1307 pour bus I2C
- * avec batterie au lithium CR1225
- * Le port I2C de l'Arduino est situé
- * sur les pin A4 et A5
- *
- * Analog pin A5 <-> SCL
- * Analog pin A4 <-> SDA
- */
- // nous utilisons la librairie RTClib
- //pour lire les données de l'horloge
- //cf: https://github.com/adafruit/RTClib
- #include <Wire.h>
- #include "RTClib.h"
- RTC_DS1307 RTC;
- // nous utilisons la librairie RTClib
- //cf: https://github.com/adafruit/RTClib
- #include <Wire.h>
- #include "RTClib.h"
- /**
- * Nous utilisons aussi la librairie DallasTemperature
- * cf: https://github.com/milesburton/Arduino-Temperature-Control-Library
- */
- #include <DallasTemperature.h>
- // Le fil des données jaune est relié au pin 8 du Arduino pro mini
- #define ONE_WIRE_BUS 8
- /**
- * Création d'une instance oneWire afin de pouvoir
- * communiquer avec des périphériques OneWire
- * Nb: pas seulement des capteurs Maxim/Dallas
- */
- OneWire oneWire(ONE_WIRE_BUS);
- /**
- * Nous passons notre instance oneWire à notre
- * objet sensors utilisant DallasTemperature
- */
- DallasTemperature sensors(&oneWire);
- // zone BME, lecteur de pression atmosphérique température et humidité
- #include "cactus_io_BME280_I2C.h"
- // Créer un objet BME280
- //BME280_I2C bme; // I2C en utilisant l'adresse 0x77
- BME280_I2C bme (0x76); // I2C en utilisant l'adresse 0x76
- #define RF_freq RF12_868MHZ
- // Structure contenant les données, doivent être identiques entre emetteur et recepteur
- typedef struct {
- int annee, mois, jour , heure, minut , seconde , temperature1,temperature2,pressionmbar,humidite,temperatureBME ;
- }
- PayloadTX;
- PayloadTX emontx;
- const int LED = 8; //emonTx V3
- /**
- * Écriture sur une carte SD
- *
- * SD card reliée au bus SPI :
- * MOSI - pin 11
- * MISO - pin 12
- * CLK ou SCK - pin 13
- * CS - pin 4
- *
- * SPI pour Serial Peripheral Interface
- *
- * created 24 Nov 2010
- * modified 9 Apr 2012
- * by Tom Igoe
- * cf: https://www.arduino.cc/en/Tutorial/Datalogger
- */
- #include <SPI.h>
- #include <SD.h>
- // Arduino Uno pin 4
- // cf: https://www.arduino.cc/en/Reference/SPI
- const int chipSelect = 4;
- void setup() {
- //zone sonde température
- Serial.println("Demo de la librairie Dallas Temperature");
- // Initialisation de notre librairie
- sensors.begin();
- Wire.begin();
- //zone BME
- Serial.println ("Bosch BME280 Pression - Humidite - Capteur de temperature | cactus.io");
- if (!bme.begin()) {
- Serial.println ( " Impossible de trouver un capteur BME280 valide, vérifiez le câblage!" );
- while (1);
- }
- Serial.println("BME initialise avec succes!");
- bme.setTempCal (-1); // Temp était en lecture haute pour soustraire 1 degré
- Serial.println ("Pression mbar \ Humidite \ Temperature ");
- //zone emetteur rfm69
- rf12_initialize(myNodeID,RF_freq,network); //Initialise RFM69 avec parametres precedents
- Serial.begin(9600);
- Serial.println("RFM12B Transmitter - Simple demo avec température");
- Serial.print("Node: ");
- Serial.print(myNodeID);
- Serial.print(" Freq: ");
- if (RF_freq == RF12_433MHZ) Serial.print("433Mhz");
- if (RF_freq == RF12_868MHZ) Serial.print("868Mhz");
- if (RF_freq == RF12_915MHZ) Serial.print("915Mhz");
- Serial.print(" Network: ");
- Serial.println(network);
- pinMode(LED, OUTPUT);
- RTC.begin();
- if (! RTC.isrunning())
- {
- Serial.println("RTC is NOT running!");
- }
- // Décommenter cette ligne pour mettre à jour l'heure dans RTC
- // RTC.adjust(DateTime(__DATE__, __TIME__));
- //zone SD
- while (!Serial)
- {
- ; // wait for serial port to connect. Needed for native USB port only
- }
- Serial.println("Initialisation de la carte SD ...");
- // on verifie que la carte est présente et peut être initialisée
- if (!SD.begin(chipSelect))
- {
- Serial.println("Carte Sd inaccesible ou absente");
- // ne fait rien d'autre
- return;
- }
- Serial.println("Carte OK");
- }
- void loop()
- {
- if((long)(millis() - rolltime) >= 0)
- //si il s'est écoulé 10 minutes depuis la dernière demande de température
- {
- DateTime now = RTC.now();
- /**
- * Nous interrogeons notre capteur
- */
- Serial.print(" Demande de temperature...");
- sensors.requestTemperatures(); // envoi de la demande
- Serial.println("Fait");
- Serial.print("La temperature du premier capteur est : ");
- Serial.println(sensors.getTempCByIndex(0));
- Serial.print("La temperature du second capteur est : ");
- Serial.println(sensors.getTempCByIndex(1));
- bme.readSensor ();
- // on incremente test histoire d'avoir des valeurs qui changent et verifier la transmission
- emontx.annee =now.year();
- emontx.mois = now.month();
- emontx.jour= now.day();
- emontx.heure= now.hour();
- emontx.minut= now.minute();
- emontx.seconde= now.second();
- emontx.temperature1=sensors.getTempCByIndex(0);
- emontx.temperature2=sensors.getTempCByIndex(1);
- emontx.pressionmbar=bme.getPressure_MB ();
- emontx.humidite=bme.getHumidity ();
- emontx.temperatureBME=bme.getTemperature_C ();
- Serial.print("temperature1= ");Serial.println(sensors.getTempCByIndex(0));
- Serial.print("temperature2= ");Serial.println(sensors.getTempCByIndex(1));
- Serial.print ("P mb= " );Serial.println (bme.getPressure_MB ());
- Serial.print ( "H= " );Serial.println (bme.getHumidity ());
- Serial.println ( "Tbme= " );Serial.println (bme.getTemperature_C ());
- rf12_sendNow(0, &emontx, sizeof emontx); // on envoie la structure emontx
- rf12_sendWait(2);
- digitalWrite(LED, HIGH); delay(500); digitalWrite(LED, LOW);
- delay(2000);
- // on enregistre sur SD année; mois; jour; heure; minute; seconde; T1; T2
- //Zone SD
- // nous créons une chaîne de caractères pour
- // concaténer les données à écrire :
- String dataString = "";
- // nous convertissons la valeur
- // avec l'objet String() afin de pouvoir
- // l'écrire sur la carte
- dataString += String(now.year(), DEC);
- dataString += ";";
- dataString += String(now.month(), DEC);
- dataString += ";";
- dataString += String(now.day(), DEC);
- dataString += ";";
- dataString += String(now.hour(), DEC);
- dataString += ";";
- dataString += String(now.minute(), DEC);
- dataString += ";";
- dataString += String(now.second(), DEC);
- dataString += ";";
- dataString += String(sensors.getTempCByIndex(0));
- dataString += ";";
- dataString += String(sensors.getTempCByIndex(1));
- dataString += ";";
- /**
- * nous ouvrons le fichier
- * Nb: un seul fichier peut être ouvert à la fois
- * le fichier se nomme : journal.csv
- */
- File dataFile = SD.open("journal.csv", FILE_WRITE);
- // si le fichier est disponible, nous écrivons dedans :
- if (dataFile) {
- Serial.print("journal ouvert");
- dataFile.println(dataString);
- dataFile.close();
- // nous affichons aussi notre chaîne sur le port série :
- Serial.println(dataString);
- }
- // Si le fichier n'est pas ouvert nous affichons
- // un message d'erreur
- else {
- Serial.println("nous ne pouvons ouvrir journal.csv");
- }
- //nous ajoutons 10 minutes à rolltime pour que arduino interroge à nouveau la température au bout de 10 minutes
- rolltime += TENMIN;
- }//fin du if rolltime
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement