Ayant recu mon shiel ethernet 2 et mon mega 2560 aujourd ’ hui , j ’ ai testé 2 3 trucs trouvé sur le net .
Lorsque je met :
#include <SPI.h> //bibliothèqe pour SPI
#include <Ethernet.h> //bibliothèque pour Ethernet
#include <SD.h> //bibliothèque pour carte micro-SD
byte mac[] = {0x90, 0xA2, 0xDA, 0x0F, 0xDF, 0xAB}; //adresse mac de votre carte
byte ip[] = {192, 168, 1, 123}; //adresse IP
EthernetServer serveur(80); // déclare l'objet serveur au port d'écoute 80
void setup() {
Serial.begin (9600); //initialisation de communication série
if (!SD.begin(4)) { //teste la communication avec la carte(pin 4)
Serial.print("Communication SD impossible");
return; //stoppe le programme
}
Serial.print("Communication SD ok !");
Ethernet.begin (mac, ip); //initialisation de la communication Ethernet
Serial.print("\n-> Le serveur est sur l'adresse : ");
Serial.println(Ethernet.localIP()); //on affiche l'adresse IP de la connexion
serveur.begin(); // démarre l'écoute
}
void loop() {
}
le retour du moniteur serie est :
Communication SD ok !
→ Le serveur est sur l’adresse : 0.15.15.15
bizzarre cette adresse locale …
je ne vois pas trop ou est mon erreur pourtant , votre aide est la bienvenue .
Bonjour , en mode DHCP , ca plante on dirait , bien que aucune erreur n ’ apparaisse a la compilation ni dans le moniteur serie et rien dans la live box non plus .
voici le code que j ’ ai testé pour le DHCP :
#include <SPI.h> //bibliothèqe pour SPI
#include <Ethernet.h> //bibliothèque pour Ethernet
//#include <SD.h> //bibliothèque pour carte micro-SD
byte mac[] = {0x90, 0xA2, 0xDA, 0x0F, 0xDF, 0xAB}; //adresse mac de votre carte
//byte ip[] = {192, 168, 1, 123}; //adresse IP
EthernetServer serveur(80); // déclare l'objet serveur au port d'écoute 80
void setup() {
Serial.begin (9600); //initialisation de communication série
Serial.println("Moniteur serie initialisé !");
/*if (!SD.begin(4)) { //teste la communication avec la carte(pin 4)
Serial.print("Communication SD impossible");
return; //stoppe le programme
}
Serial.print("Communication SD ok !");*/
/*
Ethernet.begin(mac, ip); // forme conseillée pour fixer IP fixe locale
//Ethernet.begin(mac, ip, serverDNS, passerelle, masque); // forme complète
*/
// start the Ethernet connection:
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
}
else {
Serial.print("L'adresse IP du shield Ethernet est :" );
delay(1000); // donne le temps à la carte Ethernet de s'initialiser
Serial.println(Ethernet.localIP());
serveur.begin(); // démarre l'écoute
}
Serial.println("test");
}
void loop() {
}
j ’ ai essayé de changer de cable ethernet , mis celui de mon PC sur le shiel ethernet et vice versa , mais ca n ’ a rien changé .
Meme le test ne s’ affiche pas sur le moniteur serie .
le shield est actuellement directement enfiché sur le mega 2560 la prise RJ45 se retrouvant au dessus de la prise USB .
L ’ adresse mac entrée dans le code est bien celle figurant sur l ’ etiquette placée audessous du shield ( que j’ ai mise sur le port RJ 45 .
je vais tester de rajouter les modifs pour le pin 4 , et dire si cela change quelque chose .
voici donc le code testé :
#include <SPI.h> //bibliothèqe pour SPI
#include <Ethernet.h> //bibliothèque pour Ethernet
#include <SD.h> //bibliothèque pour carte micro-SD
byte mac[] = {0x90, 0xA2, 0xDA, 0x0F, 0xDF, 0xAB}; //adresse mac de votre carte
byte ip[] = {192, 168, 1, 123}; //adresse IP
EthernetServer serveur(80); // déclare l'objet serveur au port d'écoute 80
void setup() {
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
Serial.begin (9600); //initialisation de communication série
if (!SD.begin(4)) { //teste la communication avec la carte(pin 4)
Serial.print("Communication SD impossible");
return; //stoppe le programme
}
Serial.print("Communication SD ok !");
Ethernet.begin (mac, ip); //initialisation de la communication Ethernet
Serial.print("\n-> Le serveur est sur l'adresse : ");
Serial.println(Ethernet.localIP()); //on affiche l'adresse IP de la connexion
serveur.begin(); // démarre l'écoute
}
void loop() {
}
et le retour sur le moniteur serie :
Communication SD ok !
-> Le serveur est sur l'adresse : 0.15.15.15
Bravo , apres lecture et implantation de la bibliotheque ethernet2.H je viens de faire un test et ca marche impec …
Merci pour la trouvaille
solution a mon probleme :
If you’re using the arduino.cc (this website) IDE, which I would highly recommend, then you only need to install an Ethernet library that supports the W5500. There are a few choices:
Ethernet2 library - this is the same library included with the arduino.org IDE
Download https://github.com/adafruit/Ethernet2/archive/master.zip
Sketch > Include Library > Add .ZIP Library > select the downloaded file > Open
change the line #include <Ethernet.h> in your sketch to:#include <Ethernet2.h>
pourtant j ’ utilise l ’ IDE avec le repo specifique pour la version ubuntu , quand meme , inclure une bibliotheque de plus ou de moins ne doit pas changer grand chose au niveau taille de DL , mais eviterait bien des problemes ulterieurs .
Y a t ’ il d’ autres bibliotheques qui serait susceptibles d’ etre DL avant de rencontrer d’ autre peripeties du genre ?
Un grand merci pour votre aide en tout cas , je vais pouvoir vraiment tester mes codes plein pot a present !!
Par contre je n’ arrive toujours pas a afficher la page dans mon reseau local en tapant l ’ adresse ip fixe du shield de l’ arduino dans mon navigtateur , pourtant il m ’ affiche la bonne adresse maintenant et il est visible et configurable dans l ’ interface de la livebox , ca progresse bien tout de meme .
je pense que ca doit etre un probleme lié a la configuration de la box , avec le code suivant :
#include <SPI.h> //bibliothèqe pour SPI
#include <Ethernet2.h> //bibliothèque pour Ethernet
#include <SD.h> //bibliothèque pour carte micro-SD
byte mac[] = {0x90, 0xA2, 0xDA, 0x10, 0x2F, 0x93}; //adresse mac de votre carte
byte ip[] = {192, 168, 1, 125}; //adresse IP
int pinRelais = 7; //variable de pin pour le Relais
boolean etatRelais = 0; //etat du pin
EthernetServer serveur(80); // déclare l'objet serveur au port d'écoute 80
void setup() {
pinMode(pinRelais, OUTPUT); //pin en mode OUTPUT
Serial.begin (9600); //initialisation de communication série
Ethernet.begin (mac, ip); //initialisation de la communication Ethernet
Serial.print("*\n-> Le serveur est sur l'adresse : ");
Serial.println(Ethernet.localIP()); //on affiche l'adresse IP de la connexion
serveur.begin(); // démarre l'écoute
}
void loop() {
gestionClient(); // fonction qui gère toute la communication avec le client
}
//----------------------Fonctions----------------------
//fonction qui gère la communication avec le client
void gestionClient() {
EthernetClient client = serveur.available(); //on écoute le port
if (client) { //si client existe
Serial.println("Client en ligne"); //on le dit...
if (client.connected()) { // si le client est connecté
GET(client); //appel de la fonction de décodage
//réponse au client
entete(client); // fonction pour l'entête de la page HTML
corps(client); // fonction pour le corps
piedPage(client); // fonction pour le pied de page
Serial.println("Fin de communication avec le client\n");
client.stop(); //on déconnecte le client
}
}
}
//fonction de fabrication de l'entête HTML
void entete(EthernetClient cl) {
//infos pour le navigateur
cl.println("HTTP/1.1 200 OK"); // type du HTML
cl.println("Content-Type: text/html; charset=ascii"); //type de fichier et encodage des caractères
cl.println("Connection: close"); // fermeture de la connexion quand toute la réponse sera envoyée
cl.println();
//balises d'entête
cl.println("<!DOCTYPE HTML>");
cl.println("<html>");
cl.println("<head><title>Relais</title></head>");
cl.println("<body><h1>Relais</h1><hr>
");
}
//fonction de fabrication du corps de page
void corps(EthernetClient cl) {
cl.println("
"); // saut de ligne
cl.print("
Relais ");
if (etatRelais) { //si état sur 1
cl.print("ON "); // on l'écrit
}
else { // sinon
cl.print("OFF "); //on l'écrit aussi ;)
}
cl.print(" <a href=?"); //création du lien inutile de répéter l'adresse du site
cl.print('c'); //code à recevoir
cl.println(" target=_self >Change</a>
");
}
//fonction de fabrication du pied de page
void piedPage(EthernetClient cl) {
//balises de pied de page
cl.println("
<hr>");
cl.println("</body>");
cl.println("</html>");
}
//fonction décodage GET
void GET(EthernetClient cl) {
boolean lu = 0; //variable pour indiquer l'état de lecture
while (cl.available()) { // tant qu'il a des infos à transmettre
char c = cl.read(); // on lit le caractère
delay(1); //delai de lecture
if (c == '?' && lu == 0) { //si "?" repéré
c = cl.read(); //on lit le caractère suivant qui contient la donnée
if (c == 'c') { //si code reçu
etatRelais = !etatRelais; //on change l'état du relais
digitalWrite(pinRelais, etatRelais); //on met à jour le pin
Serial.println(etatRelais);
}
delay(10);
lu = 1; // on dit qu'on a lu l'info
}
}
}
parfois ca affiche la page , parfois pas et si je clique pour changer l ’ etat du relais , ca cherche indefiniement .
Pourtant j ’ ai fait la translation de port du 43210 externe au 80 interne lié sur l ’ IP du shield ( 192.168.1.125 en DHCP statique dans la box ) .
et dans mon navigateur je tape : "mon_ip_publique:43210 le probleme doit venir du lien qui ne retranscris pas l ’ adresse , je vais voir si en mettant la bonne adresse " en dur " ca marche .
Dans les 2 cas ca patauge dans la semoule indefiniement…
oui , il est prevu de les deporter dans un fichier stocké sur la micro-SD , enfin si j ' arrive a faire marcher mon code a un moment donné ! avant de me lancer dans une serie complete et plus complexe , mais pour le moment vu que certaines choses ne vont pas , j ' essai de resoudre les pb avant de me lancer dans la clarté du code et la simplification , j ' en suis qu ' a la phase de test actuellement .