Go Down

Topic: lire des data en réseau :/ (Read 161 times) previous topic - next topic

goffax8

bonjour à tous,
je suis étudient en automatisation et dans le cadre d'un projet (automatiser le portail d'un parking)
je dois communiquer avec le réseau local de l'infrastructure, pour cela j'ai choisi un arduino uno qui serale serveur avec un module shield Ethernet.
Mon problème est le suivant,
j'aimerais bien lire des données reçus par le client (j'utiliser le logiciel hercules http pour simuler le client) via le moniteur série, mais lors d'envoie de data, je ne reçois pas ce que j'ai envoyé.
voici mon code :


#include <SPI.h>       //librairie pour synchroniser la communication
#include <Ethernet.h>

// configuration réseau
byte mac[] = {0x90, 0xA2, 0xDA, 0x0F, 0x8B, 0x19};   //adresse mac physique.**Communication dans réseau privé.
byte ip[] = {192, 168, 1, 50};                      // IP dans le LAN. **Communication avec n'importe qui dans le monde.
byte gateway[] = {192, 168, 1, 1};                   // DG. **Interface entre réseau local et internet.Pas nécessaire car on fait que du local.
byte subnet[] = {255, 255, 255, 0};                  //mask de sous-réseau. **Donne l'emplacement de l'appareil dans le réseau local.
EthernetServer server(1025);                           //port du serveur (prendre un port libre) //**Créer un serveur qui écoute les connections sur le port spécifié


// Server IP Target
char serverTarget[] = "192.168.1.50"; //ip de notre arduino (dans le sous réseau du masi)


int CapteurSortie = 4;
const int CommandeOuverture = 3;
int FM = 0; //bit pour détecter un front montant

// données reçues par le GET HTTP Protocol
char licencee_plate_status_validation = 5; //**Pour savoir si la plce est ok.
// si les données reçues = 0 => la plaque n'est pas acceptée
// si les données reçues = 1 =>  la plaque est acceptée

void setup()
{
  Serial.begin(9600);

  pinMode(licencee_plate_status_validation, INPUT);
  pinMode(CapteurSortie, INPUT);
  pinMode(CommandeOuverture, OUTPUT);


  //démarre la connection Ethernet et le serveur
  Ethernet.begin(mac, ip, gateway, subnet); //**Pq on a besoin de la gateway??
  server.begin(); //**Indique au serveur de commencer à écouter les connexions entrantes.(les connexions des clients).
  Serial.print("l'adresse IP du serveur est: ");
  Serial.println(Ethernet.localIP()); //**Obtient l'adresse IP du shield Ethernet. Utile lorsque l'adresse est attribuée automatiquement via DHCP. A quoi ca sert de l'afficher??
}

void loop()
{
  EthernetClient client = server.available(); //if an incoming client connects, there will be bytes available to read: **(EthernetClient) Crée un client pouvant se connecter à une adresse IP Internet et à un port spécifiés (défini dans la fonction client.connect ())

  // Hello from arduino => check if Arduino is alive
  hello(client);
  // Check if a car goin out
  checkExitSensor(client);
  if (client)  //si un client est connecté
  {
    if (client.connected())          // Tant que le client est connecté
    {
      if (client.available())        // A-t-il des choses à dire ?
      {
        readDataFromClient(client);
      }
    }
  }
  delay(10);
}

// ================================= METHODES

void readDataFromClient(EthernetClient client) {

  // send HTTP header to client : **envoie l'en-tête HTTP au client:
  client.println(F("HTTP/1.1 200 OK")); //**Envoi un header avec 2 infos, le protocole et le code de retour.A quoi sert le "F" devant?? Signifie chaine de caractère??
  client.println(F("Content-Type: text/html")); //**Recoi les caractères de la plaque par ici???
  client.println();

  // Read GET CALL for know Status of licence plate
  for (int i = 0; i < 6; i++)
  {
    if (i == 5)
    {
      licencee_plate_status_validation = client.read();
      Serial.println(licencee_plate_status_validation);
      openParking(licencee_plate_status_validation);
    }
    else
    {
      client.read();
    }
  }
  client.stop();
}

void openParking(char licencee_plate_status_validation)
{
  if (licencee_plate_status_validation == '1')
  {
    Serial.println("oepnParking true  : " );
    Serial.println(licencee_plate_status_validation);
    //on ouvre la barrière pour faire entrer la voiture
    digitalWrite(CommandeOuverture, HIGH);
    delay(1500);
    digitalWrite(CommandeOuverture, LOW);
  }
}

void checkExitSensor(EthernetClient client)
{
  if (CapteurSortie == HIGH)
  {

    exitRequest(client);

    if (FM == 0)
    {
      // CONTACT CLIENT by HTTP GET method
      exitRequest(client);

      //on ouvre la barrière pour faire sortir la voiture
      digitalWrite(CommandeOuverture, HIGH);
      delay(1500);
      digitalWrite(CommandeOuverture, LOW);
      FM = 1;
    }
  }
  else //donc si CapteurSortie =LOW
  {
    FM = 0;
  }
}


void exitRequest(EthernetClient client) //????
{
  if (client.connect(serverTarget, 1025))
  {
    // Make a HTTP request:
    client.println("GET /carDetected HTTP/1.1");
    client.println("Host: 192.168.0.100");
    client.println("Connection: close");
    client.println();
  }
  else
  {
    // if you didn't get a connection to the server:
    Serial.println("connection failed from exit Request");
  }
}


void hello(EthernetClient client)
{
  if (client.connect(serverTarget, 1025))
  {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /toto/1.1");
    client.println("Host: 192.168.0.100");
    client.println("Connection: close");
    client.println();
  }
  else
  {
    // if you didn't get a connection to the server:
    Serial.println("connection failed from Hello");
  }
}

merci pour vos réponses
axel 

J-M-L

Vous avez vu il y a un smiley dans votre code...

Lisez comment utiliser le forum ça attirera sans doute un peu plus de réponses....
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Go Up