Bonjour à toutes et tous
novice en arduino je fais des petits tests avec deux cartes arduino uno une avec un capteur de température dht11, détecteur de mvt et emetteur 433mhz + des leds qui m'indiquent des etats et de l'autre coté une carte Mega avec une ethernet shield un ventilo le recepteur 433 mhz et une led pour m'indiquer un etat. mon ethernet shield envoi les données sur un wampserver afin de pouvoir lire les donnees sur une page php et de les inscrire sur une base de donnees mysql voila donc pour la description.
pour la partie pratique c'est une autre histoire :o
mon programme du coté mega me pose des problemes sur le serveur wamp par exemple j'ai 0 d'afficher pour la temperature et l'humidité alors que mes donnees sont bien envoyées mon ventilo demarre bien plus tard j'ai tout les ingredients mais mon plat et indigeste
je ne vois pas ou j'ai un pb sur mon code si parmi vous il y a un oeil attentif à ce que j'ai fait je suis preneur voila donc le code dans un premier temps je mets le code pour la partie captage des donnees et emission et dans la deuxieme partie je mets réception des données et envoi sur serveur
merci et à bientôt j’espère.
partie 1
#include "DHT.h"
#include <VirtualWire.h>
#define DHTPIN 2 //pin data du dht11
#define DHTTYPE DHT11 //on utilise le capteur dht11
//variable et initalisation pour dht11
DHT dht(DHTPIN, DHTTYPE);
//variable pour capteur PIR
//temps pour calibrer le capteur
int calibrationTime = 30;
//temps pour le capteur allumé apres avoir dit qu'il ne detectait plus aucun mouvement
long temps;
long unsigned int lowIn;
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;
int pirPin = 7; //capteur PIR sur pin 7
int ledPin = 8; //led pour indiquer presence pin8
int txPin=3;
// variable 433mhz
int mouvement_detecte;
char MessageMvt[64];
//SETUP
void setup(){
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(pirPin, LOW);
pinMode(txPin, OUTPUT);
digitalWrite(txPin,LOW);
temps=millis();
dht.begin();
vw_set_tx_pin(12);
vw_setup(2000); // Bits par seconde
//laisser le temps au cateur de se calibrer
Serial.print("calibrating sensor ");
for(int i = 0; i < calibrationTime; i++){
Serial.print(".");
delay(1000);
}
Serial.println(" done");
Serial.println("SENSOR ACTIVE");
delay(50);
}
//LOOP
void loop(){
delay(2000);
if ((millis() - temps) >150000)
{
int humidite = dht.readHumidity();
int temperature = dht.readTemperature();
digitalWrite(txPin, true);
Serial.print("temperature : ");
Serial.println(temperature);
Serial.print("humidite: ");
Serial.println(humidite);
sprintf(MessageMvt,"%d,%d",temperature,humidite);
vw_send((uint8_t *)MessageMvt, strlen(MessageMvt));
vw_wait_tx(); // On attend la fin de la transmission
temps=millis();
digitalWrite(txPin, false);
}
//bloc capteur mvt
if(digitalRead(pirPin) == HIGH){
digitalWrite(txPin, true); // flash pour voir que ca transmet la led est sur la pin3
digitalWrite(ledPin, HIGH); //allumé la led si mouvement
mouvement_detecte=1;
sprintf(MessageMvt,"%d",mouvement_detecte);
vw_send((uint8_t *)MessageMvt, strlen(MessageMvt));
vw_wait_tx(); // On attend la fin de la transmission
digitalWrite(txPin, false);
delay(1000); // et on se repose un peu...
if(lockLow){
//etre sur d'attendre un changement d'etat avant qu'un autre mouvement ne soit detecté
lockLow = false;
Serial.println("---");
Serial.print("motion detected at ");
Serial.print(millis()/1000);
Serial.println(" sec");
Serial.println(mouvement_detecte);
delay(50);
}
takeLowTime = true;
}
if(digitalRead(pirPin) == LOW){
digitalWrite(ledPin, LOW);
if(takeLowTime){
lowIn = millis();
takeLowTime = false;
}
if(!lockLow && millis() - lowIn > pause)
{
lockLow = true;
Serial.print("motion ended at ");
Serial.print((millis() - pause)/1000);
Serial.println(" sec");
mouvement_detecte=0;
delay(50);
}
}
}
et en deuxieme partie
#include <VirtualWire.h>
#include <SPI.h>
#include <Ethernet.h>
//declaration variables
int mouvement_detecte;
int humidite;
int temperature;
//init pour ethernet
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(192,168,0,10);
IPAddress ip(192, 168, 0, 32);
EthernetClient client;
//init tableau de string à envoyer
char mess_recu_mvt[12];
//setup
void setup()
{
Serial.begin(9600);
pinMode(2,OUTPUT);//pin pour le ventilo
// pinMode(10,OUTPUT);//pin pour la led
if (Ethernet.begin(mac)==0)
{
Serial.println("Connection impossible revoir parametre DHCP");
Ethernet.begin(mac, ip);
}
delay(1000);
Serial.println("connexion...");
if (client.connect(server, 80))
{
Serial.println("connecté");
client.println("Connection: fermee");
client.println();
}
else {
Serial.println("connection corrompu");
}
vw_set_rx_pin(3);
vw_setup(2000); // Bits par seconde
vw_rx_start();
}
//loop
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen))
{
int i;
for (i=0;i<buflen;i++)
{
mess_recu_mvt[i] = char(buf[i]);
}
digitalWrite(10, true);
sscanf(mess_recu_mvt, "%d,%d,%d",&mouvement_detecte,&temperature,&humidite);
Serial.print("la temperature est de : " );
Serial.print(temperature);
Serial.println(" *C");
Serial.print("le taux d'humidite est de : ");
Serial.print(humidite);
Serial.println(" %");
Serial.println("on entre dans la boucle connexion au serveur");
digitalWrite(10,false);
delay(1000);
}
//envoi des temperature tout les 1/4 d'heures au serveur
if (client.connect(server,80))
{
Serial.println("youhou");
client.print("GET /temperature_2/add_data.php?");
client.print("temp=");
client.print(temperature);
client.print("&humidite=");
client.print(humidite);
client.println( " HTTP/1.1");
client.println( "Host: 192.168.0.10" );
client.print(" Host: ");
client.println(server);
client.println( "Connection: close" );
client.println();
client.println();
client.stop();
Serial.println("je suis entré dans la methode get");
delay(15000);
}
if (client.connected())
{
client.stop();
}
if (temperature>=20)
{
digitalWrite(2,HIGH);
}
else
{
Serial.println("temperature basse");
}
if (mouvement_detecte ==1)
{
digitalWrite(10, true);
Serial.print("attention mouvement detecte : ");
Serial.println(mouvement_detecte);
digitalWrite(10, false);
delay(3000);
}
memset( mess_recu_mvt, 0, sizeof( mess_recu_mvt));// pour reset le string recu
}
encore merci ![]()