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