Aller au contenu

ARDUINO => HC2


flamalex

Messages recommandés

Bonjour,

sur Arduino, je mesure la vitesse du vent avec un anémomètre "pulse" vitesse appelée "vitesseVent"

je cherche à envoyer cette vitesse dans une variable globale de la HC2 "testvent"

voici un code, qui n'est pas fonctionnel, avec ce code j'envoie une valeur "fixe et prédéfinie" à la hc2 mais ce n'est pas ce que je cherche.

pourriez vous m'aider

par avance merci

voici le code complet:


#define ANEMOMETRE  1   //pin D3, interruption n°1
volatile unsigned int countAnemometre = 0;  
unsigned long previousMillis=   0;
unsigned long previousMillis2=  0;
unsigned long delaiAnemometre = 3000L;    //3 secondes
unsigned long delaiProgramme =  60000L;   //60 sec
float gust(0);        //vent max cumulé sur 1 min
float wind(0);        //vent moyen cumulé sur 1 min
int nbAnemo = 0;      //nb d'occurence de mesure Anemo
float vitesseVent(0); //vent moyen cumulé sur 1 min
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xA5, 0x7E }; //physical mac address 90:A2:DA:0E:A5:7E
byte ip[] = { 192, 168, 1, 175 }; // ip in lan
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask   
IPAddress server(192,168,1,24); //HC2 FIBARO
EthernetClient client;

void setup() {
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  delay(1000);
  attachInterrupt(ANEMOMETRE,interruptAnemometre,RISING) ;
pinMode(3, INPUT);
 
}
/*  *  Fonction d'interruption de l'anémomètre qui incrémente un compteur à chaque impulsion */
void interruptAnemometre(){
  countAnemometre++;
}
void loop(){    
int BP = digitalRead(3); // Lecture du capteur
  unsigned long currentMillis = millis(); // read time passed
//Récupération des infos de l'anémomètre toutes les 3 sec
  //Enregistrement cumulé des valeurs
  if (currentMillis - previousMillis > delaiAnemometre){
    previousMillis = millis();
   // vitesseVent = (PI * RAYON * 2 * countAnemometre)/3*3.6; //3 = durée de prise de mesure (3sec)
    vitesseVent = (0.83 * countAnemometre)/3*3.6; //3 = durée de prise de mesure (3sec) 
    if(vitesseVent>gust) gust = vitesseVent;
    wind += vitesseVent;
    nbAnemo++;
    countAnemometre = 0;
    Serial.print("Vent:");
    Serial.println(vitesseVent); 
  }
  //Toutes les minutes, compilation des valeurs et envoi au serveur  
  if (currentMillis - previousMillis2 > delaiProgramme){
    previousMillis2 = millis();
    float avgwind = wind / nbAnemo;
    Serial.print("Wind AVG : ");
    Serial.println(avgwind);
    Serial.print("Gust : ");
    Serial.println(gust);
    
    //RAZ des compteurs qui ont servi a calculé les valeurs moyennes sur 1 min
    wind = 0;
    gust = 0;
    nbAnemo = 0;
  }
   if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  delay(1000);
Serial.println("connecting...");

String PostData = "{\r\n\"value\":\"0\"\r\n}"; //JSON data to send

 if (client.connect(server,80)) {
    Serial.println("connected");
    client.print("PUT /api/globalVariables/testvent"); //Fibaro Global Variable
    client.println(" HTTP/1.1");
    client.println("Host: 192.168.1.24");
    client.println("Authorization: Basic xxxxxxxxxxxxxx");   //need to insert base 64 user:password
    client.print("Content-Length: ");
    client.println(PostData.length());
    client.println();
    client.println(PostData); 
  }
      
  else {
   Serial.println("Connection Failed."); 
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

 

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

Je me réponds à moi mm

ca peut aider

 

#include <Ethernet.h>
#include <SPI.h>

#define ANEMOMETRE  1   //pin D3, interruption n°1
volatile unsigned int countAnemometre = 0;
unsigned long previousMillis =   0;
unsigned long previousMillis2 =  0;
unsigned long delaiAnemometre = 3000L;    //3 secondes
unsigned long delaiProgramme =  60000L;   //60 sec
float gust(0);        //vent max cumulé sur 1 min   / variable fibaro ventMax
float wind(0);        //vent moyen cumulé sur 1 min / variable fibaro ventMoyen
int nbAnemo = 0;      //nb d'occurence de mesure Anemo
float vitesseVent(0); //vent actuel

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xA5, 0x7E }; //physical mac address 90:A2:DA:0E:A5:7E
byte ip[] = { 192, 168, 1, 175 }; // ip in lan
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
IPAddress server(192, 168, 1, 24); //HC2 FIBARO
EthernetClient client;

void setup() {
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  delay(3000);
  attachInterrupt(ANEMOMETRE, interruptAnemometre, RISING) ;
  pinMode(3, INPUT);
}
/*  *  Fonction d'interruption de l'anémomètre qui incrémente un compteur à chaque impulsion */
void interruptAnemometre() {
  countAnemometre++;
}

void lectureAnemometre () {
  //Récupération des infos de l'anémomètre toutes les 3 sec
  //Enregistrement cumulé des valeurs
  if (millis() - previousMillis > delaiAnemometre) {
    previousMillis = millis();
    // vitesseVent = (PI * RAYON * 2 * countAnemometre)/3*3.6; //3 = durée de prise de mesure (3sec)
    vitesseVent = (0.83 * countAnemometre) / 3 * 3.6; //3 = durée de prise de mesure (3sec)
    if (vitesseVent > gust) gust = vitesseVent;
    wind += vitesseVent;
    nbAnemo++;
    countAnemometre = 0;
    Serial.print("Vent:");
    Serial.println(vitesseVent);

    String PostData = "{\r\n\"value\":\"" + String(vitesseVent) + "\"\r\n}"; //JSON data to send
    if (client.connect(server, 80)) {
      Serial.println("connected");
      client.print("PUT /api/globalVariables/vitesseVent"); //Fibaro Global Variable
      client.println(" HTTP/1.1");
      client.println("Host: 192.168.1.24");
      client.println("Authorization: Basic xxxxxxxxxxxx");   //need to insert base 64 user:password
      client.print("Content-Length: ");
      client.println(PostData.length());
      client.println();
      client.println(PostData);
      Serial.println();
      Serial.println("disconnecting.");
      delay(500); // par précaution, pour laisser le temps au client de recevoir tout
      client.stop();
    }
    else Serial.println("Connection Failed.");
  }
}

void compilAnemometre () {
  //Toutes les minutes, compilation des valeurs et envoi au serveur
  if (millis() - previousMillis2 > delaiProgramme) {
    previousMillis2 = millis();
    float avgwind = wind / nbAnemo;
    Serial.print("Wind AVG : ");
    Serial.println(avgwind);
    Serial.print("Gust : ");
    Serial.println(gust);
    String PostData = "{\r\n\"value\":\"" + String(avgwind) + "\"\r\n}"; //JSON data to send

    if (client.connect(server, 80)) {
      Serial.println("connected");
      client.print("PUT /api/globalVariables/ventMoyen"); //Fibaro Global Variable
      client.println(" HTTP/1.1");
      client.println("Host: 192.168.1.24");
      client.println("Authorization: Basic xxxxxxxxxxxxxxxxxx");   //need to insert base 64 user:password
      client.print("Content-Length: ");
      client.println(PostData.length());
      client.println();
      client.println(PostData);

      PostData = "{\r\n\"value\":\"" + String(gust) + "\"\r\n}"; //JSON data to send
      client.print("PUT /api/globalVariables/ventMax"); //Fibaro Global Variable
      client.println(" HTTP/1.1");
      client.println("Host: 192.168.1.24");
      client.println("Authorization: Basic xxxxxxxxxxxx");   //need to insert base 64 user:password
      client.print("Content-Length: ");
      client.println(PostData.length());
      client.println();
      client.println(PostData);
      Serial.println();
      Serial.println("disconnecting.");
      delay(500); // par précaution, pour laisser le temps au client de recevoir tout
      client.stop();
    }
    else Serial.println("Connection Failed.");

    //RAZ des compteurs qui ont servi a calculé les valeurs moyennes sur 1 min
    wind = 0;
    gust = 0;
    nbAnemo = 0;
  }
}

void loop() {
  // int BP = digitalRead(3); // Ne sert à rien dans ce code
  lectureAnemometre (); // lecture anémomètre toutes les 3 secondes
  compilAnemometre ();  // moyennage et envoi au bout d'une minute
}

 

Modifié par flamalex
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...