arduno mega Rev 3 et ethernet shield Rev 3

bonjour a tous,

je suis tout nouveau dans le monde de l'arduino et je me heurte a un probleme dont je ne trouve pas la solution.
j'ai parcouru le web dans tout les sens (enfin presque ^^)
voila j'ai une arduino mega (made in italie) et un shield ethernet officiel.
jusque la tout vas bien :slight_smile:
j'essaye tant bien que mal d'implémenté la gestion ip sur l'arduino mega mais je dois passer a coté de quelque chose car cela "plante" au niveau du setup
Ethernet.begin(mac, ip, gateway, mask);

voici le petit "programe test" que j'utilise :

/*************************************/
/* Include des Librairie Nessecaire. */
/*************************************/
#include "Ethernet.h"
#include "SPI.h"
#include "WebServer.h"

/**********************************************************/
/* Declaration des Variables pour les Connexions Ethernet */
/**********************************************************/
byte mac[] = {
  0x90, 0xA2, 0xDA, 0x0D, 0x99, 0x34 };
byte ip[] = {
  192,168,1, 29};
byte gateway[] = {
  192,168,1, 1 };
byte mask[] = {
  255,255,255, 0 };

byte server_externe[] = {
  192,168,1, 25 };
  
/******************************************/
/* Declaration des Objets Server et Client */
/*******************************************/
// Attachement d'un objet "server" sur le port 1337
//EthernetServer server(1337);
// Attachement d'un objet "server_web" sur le port 80
#define PREFIX "/domo"
WebServer webserver(PREFIX, 80);
// Attachement d'un objet Client vers serveur externe 
EthernetClient client;

void setup(){

// Demarage de la connexion série pour le debug
  Serial.begin(9600);
  Serial.println("Boot system ...");
  // Demarage de la connexion ethernet 
  Serial.println("Connexion Ethernet en cour ...");
  //Ethernet.begin(mac, ip, gateway, mask);
  Ethernet.begin(mac, ip, gateway, mask);
  // Demarage du serveur pour la recepetion de linknx sur le port 1337
  Serial.println("Connexion etablie");
}

void loop (){
  Serial.println("LOOP");

}

comme vous pouvez le voir c'est assez simple mais le programe bloque au niveau de Ethernet.begin()
sur le serial je vois bien :
Boot system ...
puis
Connexion Ethernet en cour ...

et puis plus rien.

le ping ne passe pas

j'ai essayer ce cote sur une UNO rev 3 et le meme shield ethernet et la pas de souci tout les sket examples que j'ai tester marche sur la UNO mais pas sur la mega qui est pourtant une REV3 donc (de ce que j'ai lu) 100% compatible avec le shield ethernet ...

j'ai essayer sur une autre mega REV3 aussi et toujours pareil

j'ai changer les cable ust et lan toujours pareil .

j'ai vu sur le net qu'avec les ancienes mega il fallait faire un petit cablage mais comme j'ai la rev 3 cela ne devrait pas etre nessecaire

en résumé

1 essayer 2 mega différente avec 2 shield ethernet différente toujours pareil ca bloque au niveau ethernet.begin
2 sur un uno avec les mem shiel ethernet ca marche
3 les cables on été changé
4 rien n'est connecter sur la mega a pars le shield ethernet le cable usb et rj5
5 la version Arduino 1.0.2 (la derniere je pense)
6 je suis sous windows 7 mais je dois utilisé un windows XP pour uploader sur l'arduino (ca plante chez moi sous win 7 un souci de timeout averdude)
7 desintaller le drivers mega et reinstaller plusieur fois

si quelqu'un a une idée je sus preneur la je tourne un peu en rond depuis 1 semaine :frowning:

merci de votre aide

Hello, j'ai le même soucis avec la version Ethernet depuis la librairie de la version 1.0.0..

Quand je me servais de l'ancienne librairie (0022 ou 0023) je n'avais certes pas de DHCP natif, mais l'initialisation ne se plantait pas lamentablement quatre fois sur cinq ...

deja je me sens moins seul :slight_smile:
mais as-tu trouvé une solution ? ou utilise-tu une version de librairies différentes ?

En fait, je n'ai pas encore upgradé mon environnement ... Je suis resté en Arduino 0023 ...
Et comme il me fallait du DHCP, j'ai pris la librairie EthernetDHCP qui fonctionne a merveille et permet meme le polling pour l'adresse IP ...
Mais ... J'en conviens ... C'est moins smart ...
Je bosse a porter la librairie EthernetDHCP sous environnement 1.0x

Le constat ... C'est que visiblement la nouvelle librairie ethernet du pack en fait un peu rien qu'a sa tete ... (ce qui est fort dommage)

C.

en gros faut attendre une nouvelle version de la librairie ethernet ? pas d'autre solution ...
j'utilise webduino pour l'interface web et la version qui marche avec la lib ethernet 023 n'est pas aussi complete (dez se que j'ai pu voir) que la version actuel ...
dis moi si je me trompe :slight_smile:
s

Je me sers aussi de WebDuino ... et avec la version 0023 ...
En fait, d'attendre c'est ce que je me suis dit a la sortie de la version 1.0.0

j'ai regardé ... aucun changement de la version librairie Ethernet dans la version 1.0.1 ni 1.0.2 ...
Quand a la 1.5.x beta ... elle n'a même pas de librairie Ethernet ...

Sinon, ça fonctionne pas mal WebDuino ...
Faut juste penser a prendre la librairie 'Flash' ... et ça tourne tout seul

Au besoin, je peux te zipper ma version de WebDuino ... la seule modif que j'y ai apporté, c'est le nombre de pages ... et l’icône pour le navigateur ... Mais rien n'est perdu :slight_smile:

C.

je serai plus qu'interresse par ton fichier modifier merci beaucoup

je vais faire avec alors ^^
en esperant qu'une version stable sorte un de ses jours :slight_smile:

Bonjour,

C'est lié à la librairie webduino ou c'est général ce "bug" du DHCP avec 1.0.x ?
Personnellement je suis en 1.0.2 et j'ai jamais eu la moindre erreur de dhcp avec ma freebox v6.

skywodd:
Bonjour,

C'est lié à la librairie webduino ou c'est général ce "bug" du DHCP avec 1.0.x ?
Personnellement je suis en 1.0.2 et j'ai jamais eu la moindre erreur de dhcp avec ma freebox v6.

en fait, ca va faire 4 jours que je me casse le ... a tracer ce que fait la nouvelle librairie ...
sous mega c'est la zone totale ... sous uno ça fonctionne nickel, sous uno Ethernet ça fonctionne bien aussi visiblement ...

Je ne pense pas que le soucis vienne de la couche dhcp ou dns ou udp .. mais plutôt du coté socket & w1000 suis entrain de tracer les différences que je rencontre sur les 3 cartes ...

WebDuino fonctionne très bien ... vu qu'il s'appuie sur la librairie Ethernet existante

C.

Trouvé la solution au probleme ... (du moins dans mon application)
J'ai donc 1 mega 1 shield Wiznet 1 shield perso sur lequel j'ai la connexion pour un afficheur 24x2, un connecteur de partage bus I2C (vers des cartes UNO) un chip DS1307 pour avoir une RTC ...
Je demarre soit en DHCP ... soit en IP fixe (chose que je regle avec le site web embarqué sur la Mega ... (ca c'est du WebDuino) ..
en pour corriger le bug sur la mega, j'ai ajoute :

pinMode ( 4, OUTPUT );
digitalWrite ( 4, HIGH );

avant ma selection Ethernet .. que ce soi par ip fixe ou par dhcp ...
Du coup la mega est reconnue sur le reseau ...

Visiblement c'est CS du lecteur SD qui nous fait son caca nerveux

bonjour,

j'ai eu un espoir :slight_smile: mais non meme en mettant

pinMode ( 4, OUTPUT );
digitalWrite ( 4, HIGH );

ca ne passe pas toujours bloqué a la connexion :frowning:

ah ...

Je viens de paster ton code dans un tout vide sketch arduino 1.0.2 ... j'ai fait deux modifs ...
a) la pate 4 a HIGH
b) ajout du dns, car je n'ai pas souvenir avec vu autrement que par dhcp le possibilité de ne pas passer le dns dans l'init

chez moi ca 'LOOP' ... (tout plein)

/*************************************/
/* Include des Librairie Nessecaire. */
/*************************************/
#include "Ethernet.h"
#include "SPI.h"
#include "WebServer.h"

/**********************************************************/
/* Declaration des Variables pour les Connexions Ethernet */
/**********************************************************/
byte mac[] = {
  0x90, 0xA2, 0xDA, 0x0D, 0x99, 0x34 };
byte ip[] = {
  192,168,1, 29};
byte gateway[] = {
  192,168,1, 1 };
byte mask[] = {
  255,255,255, 0 };
byte thedns[] = {
  192,168,1, 1 };

byte server_externe[] = {
  192,168,1, 25 };
  
/******************************************/
/* Declaration des Objets Server et Client */
/*******************************************/
// Attachement d'un objet "server" sur le port 1337
//EthernetServer server(1337);
// Attachement d'un objet "server_web" sur le port 80
#define PREFIX "/domo"
WebServer webserver(PREFIX, 80);
// Attachement d'un objet Client vers serveur externe 
EthernetClient client;

void setup(){
  // Demarage de la connexion série pour le debug
  Serial.begin(115200);
  pinMode      ( 4, OUTPUT );
  digitalWrite ( 4, HIGH );
  Serial.println("Boot system ...");
  // Demarage de la connexion ethernet 
  Serial.println("Connexion Ethernet en cour ...");
  //Ethernet.begin(mac, ip, dns, gateway, mask);
  Ethernet.begin(mac, ip, thedns, gateway, mask);
  // Demarage du serveur pour la recepetion de linknx sur le port 1337
  Serial.println("Connexion etablie");
}

void loop (){
  Serial.println("LOOP");

}

Je te le repaste ici

edit : Oups .. Gaffe a la vitesse du Serial ... j'l'ai passé a 115200 (ca se traine sur la liaison serie sinon ...

merci pour la reponse :slight_smile:
mais chez moi le code ne passe pas
toujours bloqué a la connexion :cry:

bonjour a tous,

effectivement avec la version 023 l'ethernet marche bien

j'essaye de "convertir" mon code qui marchait e 1.2 (mais seulement sous uno :() en 023,
ca marche plutot pas mal sauf la reception de la variable POST.

je me demande si la version 1.4 gere le javascrip et/ou ajax

voici le code en question

bouton sur la page web :

 P(page_locale3) =
      "<input type=\"submit\" id=\"P1_OFF\" value=\"OFF\" class=\"boutton\" onClick=\"envoie($(this).attr('id'))\"/>";

la fonction js :

 "<script>"
      "function envoie(arg){var id = arg; if(id == 'site'){jQuery.ajax({ type: 'POST', url: 'http://www.google.be', }); } else	{ $.post('/domo', { val: id }); } }" 
      "</script>"

et la parte arduino :

#define NAMELEN 32
#define VALUELEN 32
void web_local(WebServer &server, WebServer::ConnectionType type, char *, bool)
{
  
   char name[NAMELEN];
  int  name_len;
  char value[VALUELEN];
  int value_len;
  server.httpSuccess();
  if (type == WebServer::POST)
  {
    
     while (server.readPOSTparam(name, NAMELEN, value, VALUELEN))
    {

      Serial.print("name = "); // pour debug
      Serial.println(name); // pour debug
      
      Serial.print("value = "); // pour debug
      Serial.println(value); // pour debug
     
      //action(value);
      delay(1);
      
    }
   
     
    server.httpSeeOther(PREFIX);     
      return; 
  }

  server.httpSuccess();

  if (type == WebServer::GET)
  Serial.println("Get");
  {    
    // on affiche la page web
  } 
  
  
}

comme cela je ne voit rien sur la connexion série

si je fais un :

 if (type == WebServer::POST)
  {
    
     while (server.readPOSTparam(name, NAMELEN, value, VALUELEN))
    {

      Serial.print(server.readPOSTparam(name, NAMELEN, value, VALUELEN));// pour debug
         
      //action(value);
      delay(1);
      
    }

la quelque soit le bouton sur lequel j'appuie j'ai le caractere "o"

si quelqu'un a ue idée de comment recepvoir la variable post (qui est quelque chose comme P1_ON) je suis preneur :slight_smile:

merci de votre aide

bonjour,

désolé de remonté le sujet :slight_smile: mais je tourne un peu en rond si quelqu'un a une solution pur la recuperation de la variable en js je lui serai reconnaissant :slight_smile:

merci de vote aide

bonjour,

pour info problème de connexion server.begin() résolu en passant a la version arduino 1.5.1