Advertisement
Guest User

T_bme_H_SD_RFM

a guest
Mar 28th, 2017
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.58 KB | None | 0 0
  1. /**
  2.  * Exemple basic de transimission avec transmetteurs
  3.  * de type RFM69
  4.  *
  5.  * source:
  6.  * Simple RFM12B wireless demo - Receiver - no ack
  7.  * Glyn Hudson openenergymonitor.org GNU GPL V3 7/7/11
  8.  * Credit to JCW from Jeelabs.org for RFM12
  9.  *
  10.  * voir aussi:
  11.  * https://www.mysensors.org/build/connect_radio#wiring-the-rfm69-radio
  12.  */
  13.  
  14. //nous créons un compteur pour lire les valeurs toutes les 10 minutes
  15. #define TENMIN (1000UL * 60 * 10);
  16. unsigned long rolltime = millis() + TENMIN;
  17.  
  18.  
  19. #define RF69_COMPAT 1  // 1 pour RFM69CW ou 0 pour RFM12B
  20. #include <JeeLib.h>    //from jeelabs.org
  21.  
  22. #define myNodeID 10          //node ID du transmetteur (range 0-30) different du recepteur
  23. #define network     210      //groupe reseau (peut être entre 1-250).le même que le recepteur
  24. /**
  25.  * Frequences du RF12B/RFM69 peut être:
  26.  * RF12_433MHZ, RF12_868MHZ ou RF12_915MHZ.  
  27.  * fonction de la frequence du module
  28. *
  29.  * Lecture de température avec un ou plusieurs
  30.  * capteurs DS18B20
  31.  */
  32.  
  33. /**
  34.  *  Nous utilisons la librairie OneWire
  35.  *  Elle doit être présente dans le répertoire libraries
  36.  *  situé dans le répertoire des croquis/sketchs
  37.  *  voir dans le menu Préférences
  38.  *  cf: https://github.com/PaulStoffregen/OneWire/archive/master.zip
  39.  */
  40. #include <OneWire.h>
  41.  
  42.  
  43. /**
  44.  * nous utilisons Tiny RTC module horloge
  45.   * DS1307 pour bus I2C
  46.  * avec batterie au lithium CR1225
  47.  * Le port I2C de l'Arduino est situé
  48.  * sur les pin A4 et A5
  49.  *
  50.  * Analog pin A5 <-> SCL
  51.  * Analog pin A4 <-> SDA
  52.  */
  53. // nous utilisons la librairie RTClib
  54. //pour lire les données de l'horloge
  55. //cf: https://github.com/adafruit/RTClib
  56.  #include <Wire.h>
  57. #include "RTClib.h"
  58.  
  59. RTC_DS1307 RTC;
  60.  
  61. // nous utilisons la librairie RTClib
  62. //cf: https://github.com/adafruit/RTClib
  63.  #include <Wire.h>
  64. #include "RTClib.h"
  65.  
  66. /**
  67.  * Nous utilisons aussi la librairie DallasTemperature
  68.  * cf: https://github.com/milesburton/Arduino-Temperature-Control-Library
  69.  */
  70. #include <DallasTemperature.h>
  71.  
  72. // Le fil des données jaune est relié au pin 8 du Arduino pro mini
  73. #define ONE_WIRE_BUS 8
  74.  
  75. /**
  76.  * Création d'une instance oneWire afin de pouvoir
  77.  * communiquer avec des périphériques OneWire
  78.  * Nb: pas seulement des capteurs Maxim/Dallas
  79.  */
  80. OneWire oneWire(ONE_WIRE_BUS);
  81.  
  82. /**
  83.  * Nous passons notre instance oneWire à notre
  84.  * objet sensors utilisant DallasTemperature
  85.  */
  86. DallasTemperature sensors(&oneWire);
  87.  
  88. // zone BME, lecteur de pression atmosphérique température et humidité
  89. #include "cactus_io_BME280_I2C.h"
  90.  
  91. // Créer un objet BME280
  92. //BME280_I2C bme; // I2C en utilisant l'adresse 0x77
  93. BME280_I2C bme (0x76); // I2C en utilisant l'adresse 0x76
  94.  
  95.  
  96.  
  97. #define RF_freq RF12_868MHZ
  98.  
  99.  
  100. // Structure contenant les données, doivent être identiques entre emetteur et recepteur
  101. typedef struct {
  102.   int annee, mois, jour , heure, minut , seconde , temperature1,temperature2,pressionmbar,humidite,temperatureBME ;
  103. }
  104. PayloadTX;
  105. PayloadTX emontx;  
  106.  
  107. const int LED = 8;                                             //emonTx V3
  108.  
  109. /**
  110.  * Écriture sur une carte SD
  111.  *
  112.  * SD card reliée au bus SPI :
  113.  * MOSI       - pin 11
  114.  * MISO       - pin 12
  115.  * CLK ou SCK - pin 13
  116.  * CS         - pin 4
  117.  *
  118.  * SPI pour Serial Peripheral Interface
  119.  *
  120.  * created  24 Nov 2010
  121.  * modified 9 Apr 2012
  122.  * by Tom Igoe
  123.  * cf: https://www.arduino.cc/en/Tutorial/Datalogger
  124.  */
  125. #include <SPI.h>
  126. #include <SD.h>
  127.  
  128. // Arduino Uno pin 4
  129. // cf: https://www.arduino.cc/en/Reference/SPI
  130. const int chipSelect = 4;
  131.  
  132. void setup() {
  133. //zone sonde température
  134.  Serial.println("Demo de la librairie Dallas Temperature");
  135.   // Initialisation de notre librairie
  136.   sensors.begin();
  137.  
  138.    Wire.begin();
  139. //zone BME
  140. Serial.println ("Bosch BME280 Pression - Humidite - Capteur de temperature | cactus.io");
  141. if (!bme.begin()) {
  142. Serial.println ( " Impossible de trouver un capteur BME280 valide, vérifiez le câblage!" );
  143. while (1);
  144. }
  145. Serial.println("BME initialise avec succes!");
  146. bme.setTempCal (-1); // Temp était en lecture haute pour soustraire 1 degré
  147. Serial.println ("Pression mbar \ Humidite \ Temperature ");
  148.  
  149. //zone emetteur rfm69  
  150.   rf12_initialize(myNodeID,RF_freq,network);   //Initialise RFM69 avec parametres precedents  
  151. Serial.begin(9600);
  152. Serial.println("RFM12B Transmitter - Simple demo avec température");
  153.  
  154.  Serial.print("Node: ");
  155.  Serial.print(myNodeID);
  156.  Serial.print(" Freq: ");
  157.  if (RF_freq == RF12_433MHZ) Serial.print("433Mhz");
  158.  if (RF_freq == RF12_868MHZ) Serial.print("868Mhz");
  159.  if (RF_freq == RF12_915MHZ) Serial.print("915Mhz");
  160.  Serial.print(" Network: ");
  161.  Serial.println(network);
  162.  
  163. pinMode(LED, OUTPUT);
  164.  
  165.       RTC.begin();
  166.       if (! RTC.isrunning())
  167.       {
  168.         Serial.println("RTC is NOT running!");
  169.        
  170.       }
  171.       // Décommenter cette ligne pour mettre à jour l'heure dans RTC
  172.       // RTC.adjust(DateTime(__DATE__, __TIME__));
  173.  
  174.  
  175. //zone SD
  176.   while (!Serial)
  177.     {
  178.     ; // wait for serial port to connect. Needed for native USB port only
  179.  
  180.     }
  181.  
  182.   Serial.println("Initialisation de la carte SD ...");
  183.  
  184.   // on verifie que la carte est présente et peut être initialisée
  185.   if (!SD.begin(chipSelect))
  186.     {
  187.     Serial.println("Carte Sd inaccesible ou absente");
  188.     // ne fait rien d'autre
  189.     return;
  190.     }
  191.   Serial.println("Carte OK");
  192.  
  193.    
  194. }
  195.  
  196.  
  197.  
  198.  
  199. void loop()
  200. {
  201. if((long)(millis() - rolltime) >= 0)
  202.    //si il s'est écoulé 10 minutes depuis la dernière demande de température
  203. {
  204.   DateTime now = RTC.now();
  205. /**
  206.    * Nous interrogeons notre capteur
  207.    */
  208.   Serial.print(" Demande de temperature...");
  209.   sensors.requestTemperatures(); // envoi de la demande
  210.   Serial.println("Fait");
  211.   Serial.print("La temperature du premier capteur est : ");
  212.   Serial.println(sensors.getTempCByIndex(0));
  213.   Serial.print("La temperature du second capteur est : ");
  214.   Serial.println(sensors.getTempCByIndex(1));
  215.   bme.readSensor ();
  216.  
  217.   // on incremente test histoire d'avoir des valeurs qui changent et verifier la transmission
  218. emontx.annee =now.year();
  219.   emontx.mois = now.month();
  220.   emontx.jour= now.day();
  221.   emontx.heure= now.hour();
  222.   emontx.minut= now.minute();
  223.   emontx.seconde= now.second();
  224.   emontx.temperature1=sensors.getTempCByIndex(0);
  225.   emontx.temperature2=sensors.getTempCByIndex(1);
  226.   emontx.pressionmbar=bme.getPressure_MB ();
  227.   emontx.humidite=bme.getHumidity ();
  228.   emontx.temperatureBME=bme.getTemperature_C ();
  229.  
  230.  
  231.    
  232.   Serial.print("temperature1= ");Serial.println(sensors.getTempCByIndex(0));
  233.   Serial.print("temperature2= ");Serial.println(sensors.getTempCByIndex(1));
  234.   Serial.print ("P mb= " );Serial.println (bme.getPressure_MB ());
  235. Serial.print ( "H= " );Serial.println (bme.getHumidity ());
  236. Serial.println ( "Tbme= " );Serial.println (bme.getTemperature_C ());    
  237.    
  238.     rf12_sendNow(0, &emontx, sizeof emontx); // on envoie la structure emontx
  239.     rf12_sendWait(2);
  240.  
  241.  
  242.   digitalWrite(LED, HIGH); delay(500); digitalWrite(LED, LOW);  
  243.   delay(2000);
  244.  
  245.  
  246. // on enregistre sur SD année; mois; jour; heure; minute; seconde; T1; T2
  247. //Zone SD
  248.   // nous créons une chaîne de caractères pour
  249.   // concaténer les données à écrire :
  250.   String dataString = "";
  251.  
  252.   // nous convertissons la valeur
  253.   // avec l'objet String() afin de pouvoir
  254.   // l'écrire sur la carte
  255.   dataString += String(now.year(), DEC);
  256.   dataString += ";";
  257.   dataString += String(now.month(), DEC);
  258.   dataString += ";";
  259.   dataString += String(now.day(), DEC);
  260.   dataString += ";";
  261.   dataString += String(now.hour(), DEC);
  262.   dataString += ";";
  263.   dataString += String(now.minute(), DEC);
  264.   dataString += ";";
  265.   dataString += String(now.second(), DEC);
  266.   dataString += ";";
  267.   dataString += String(sensors.getTempCByIndex(0));
  268.   dataString +=  ";";
  269.   dataString += String(sensors.getTempCByIndex(1));
  270.   dataString += ";";
  271.  
  272.  
  273.   /**
  274.    * nous ouvrons le fichier
  275.    * Nb: un seul fichier peut être ouvert à la fois
  276.    * le fichier se nomme : journal.csv
  277.    */
  278.   File dataFile = SD.open("journal.csv", FILE_WRITE);
  279.  
  280.   // si le fichier est disponible, nous écrivons dedans :
  281.   if (dataFile) {
  282.     Serial.print("journal ouvert");
  283.     dataFile.println(dataString);
  284.     dataFile.close();
  285.  
  286.     // nous affichons aussi notre chaîne sur le port série :
  287.     Serial.println(dataString);
  288.   }
  289.  
  290.   // Si le fichier n'est pas ouvert nous affichons
  291.   // un message d'erreur
  292.   else {
  293.     Serial.println("nous ne pouvons ouvrir journal.csv");
  294.  
  295.   }
  296.  
  297.   //nous ajoutons 10 minutes à rolltime pour que arduino interroge à nouveau la température au bout de 10 minutes
  298.   rolltime += TENMIN;
  299.    }//fin du if rolltime
  300.  
  301. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement