Problème conflit Virtualwire/Ethernet ?

Bonjour,

Cela fait un moment que j'utilise ce forum comme ressource pour mes projets (étant débutant, il m'est difficile par contre de participer efficacement). Aujourd'hui, par contre, je suis bloqué avec un projet.

Je souhaite réaliser un petite station météo avec envoi des données sur thingspeak (j'aime les belles courbes :smiley: )

J'utilise :

  • un émetteur-capteur extérieur : DHT22, BMP085, arduino nano, émetteur RF433
  • un récepteur intérieur : DHT11 sur la broche 7 (mesure des paramètres intérieurs), récepteur RF433 sur la broche 2 (mais j'ai essayé pas mal de broches parmi celles qui sont inutilisées par le shield ethernet), sur un arduino uno avec un ethernet shield

L'utilisation de l'éthernet shield est une évolution, le code tourne très bien avec le Uno récepteur et un écran LCD pour lire les données extérieures reçues.

De même, un Uno avec son shield ethernet envoi correctement toutes les mesures que je lui demande sur Thingspeak

Mon problème survient quand j'utilise les deux bibliothèques (virtualWire + ethernet) ensembles dans le même code --> plus rien ne marche, même pas les terminal série qui n'affiche rien....

en annulant soit la fonction de réception Radio 433, soit l'éthernet, je retrouve un bon fonctionnement...

#include <Wire.h>
#include <VirtualWire.h>
#include "ThingSpeak.h"
#include "DHT.h"
#define DHTPIN 7     // what digital pin we're connected to
#define DHTTYPE DHT11   // DHT 11
DHT dht(DHTPIN, DHTTYPE);
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
EthernetClient client;


int  numbers[6];
float TempExt;
float HumiditeExt;
float Pression;

/*
  *****************************************************************************************
  **** Visit https://www.thingspeak.com to sign up for a free account and create
  **** a channel.  The video tutorial http://community.thingspeak.com/tutorials/thingspeak-channels/
  **** has more information. You need to change this to your channel, and your write API key
  **** IF YOU SHARE YOUR CODE WITH OTHERS, MAKE SURE YOU REMOVE YOUR WRITE API KEY!!
  *****************************************************************************************/
unsigned long myChannelNumber = 79276;
const char * myWriteAPIKey = "DQNXWUOQU5XKMCJP";
// Variable Setup
long lastConnectionTime = 0;
boolean lastConnected = false;
int failedCounter = 0;
const int updateThingSpeakInterval = 16 * 1000; // Time interval in milliseconds to update ThingSpeak (number of seconds * 1000 = interval)

void setup() {

  Serial.begin(115200);  // Debugging only
  dht.begin();

  vw_set_rx_pin(2);
  vw_setup(1000); // Bits per sec
  vw_rx_start();       // Start the receiver PLL running


  Ethernet.begin(mac);
  ThingSpeak.begin(client);

}
void loop() {



  //-----------Réception des données extérieures



  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;
  if (vw_get_message(buf, &buflen)) // Non-blocking
  {
    //------------------Debugging---------------------
    Serial.print(buflen, DEC);
    Serial.println(" bytes received!");
    //------------------Debugging----------------------

    for (int i = 0; i < buflen; i++)
    {
      //-------------------Debugging-------------------
      Serial.print("buf[");
      Serial.print(i, DEC);
      Serial.print("]=");
      Serial.print(buf[i], DEC);
      Serial.print("  ");
      //-------------------Debugging------------------
    }

    Serial.println(); //For Debugging

    //memcpy(buf, numbers, buflen);
    for (int i = 0; i < 6; i++) //If you add more integers you have to change the 6 to how many intergers you have.
    {
      numbers[i] = word(buf[i * 2 + 1], buf[i * 2]);

      //-------------------Debugging------------------
      Serial.print("numbers[");
      Serial.print(i, DEC);
      Serial.print("]=");
      Serial.print(numbers[i], DEC);
      Serial.print("  ");
      //-------------------Debugging-------------------
    }
    //----------------------Coverstion Numbers en float

    TempExt = (float)numbers[0] + (float)numbers[1] / 100;

    HumiditeExt = (float)numbers[2] + (float)numbers[3] / 100;

    Pression = ((float)numbers[4] + (float)numbers[5] / 100) * 10; // *10 pour avoir des hectoPascal

    /*char text_buffer[10];
      String Textstring = dtostrf(TempExt,0,5,text_buffer); //Convert Temperature value to String
      char hext_buffer[10];
      String Hextstring = dtostrf(HumiditeExt,0,5,hext_buffer); //Convert Temperature value to String
      char p_buffer[10];
      String Pstring = dtostrf(Pression,0,5,p_buffer); //Convert Temperature value to String
    */


    /////////--------------------------DHT11
    int h = dht.readHumidity();
    // Read temperature as Celsius (the default)
    int t = dht.readTemperature();
    // Read temperature as Fahrenheit (isFahrenheit = true)
    //float f = dht.readTemperature(true);

    // Check if any reads failed and exit early (to try again).
    if (isnan(h) ) {
      Serial.println("Failed to read from DHT sensor!");
      return;
    }

    // Compute heat index in Fahrenheit (the default)
    // float hif = dht.computeHeatIndex(f, h);
    // Compute heat index in Celsius (isFahreheit = false)
    //float hic = dht.computeHeatIndex(t, h, false);

    delay(200);

    //----------------

    // Write to ThingSpeak. There are up to 8 fields in a channel, allowing you to store up to 8 different
    // pieces of information in a channel.  Here, we write to field 1.
    ThingSpeak.setField(1, h);
    ThingSpeak.setField(2, t);
    ThingSpeak.setField(3, TempExt);
    ThingSpeak.setField(4, HumiditeExt);
    ThingSpeak.setField(5, Pression);


    ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

    delay(20000); // ThingSpeak will only accept updates every 15 seconds.


  }
}

J'ai fait des recherches, changé l'ordre des initialisations pour VW et ethernet.begin() dans le setup et d'autres pistes glanées sur internet mais RAS : toujours le même souci.

Si quelqu'un du forum a une solution, ça m'aiderait bien.

D'ailleurs, je vois que je ne suis pas seul à bloquer sur ce sujet

Bonjour, Je remonte ce message car je sèche encore.

J'ai cru comprendre qu'il s'agissait d'un souci d'interruption, mais je n'ai aucune idée pour gérer ça , avez-vous quelques pistes ?