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 )
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