récupérer adresse mac shield ethernet

bonjour tout le monde,
j'ai regardé la lib redfly et j'ai pu voir que l'on pouvait récupérer l'adresse mac du shield wifi.

Serial.print("Adresse MAC du module : "); // affiche message

    for (int i=0; i<6; i++) { // défile les 6 octets

      if (mac[i]<10) Serial.print(0,HEX),Serial.print(mac[i],HEX), Serial.print(":"); // affiche message
      else Serial.print(mac[i],HEX), Serial.print(":");

    } // fin for
(mac);

est il possible de faire la même chose via le shield ethernet?
j'ai testé plusieurs solutions, mais sans succès.
si vous avez une idée

Salut,

Pour les shield ethernet a base de W5100, tu assigne une mac address lors de initialisation :wink:
Donc pas grand interet de recupere cette mac address par la suite ... :-/

on peux supposer que pour les autres chips(je n'ai pas de reference sous la main), ca doit etre la meme chose ...

infobarquee:
bonjour tout le monde,
j'ai regardé la lib redfly et j'ai pu voir que l'on pouvait récupérer l'adresse mac du shield wifi.

Serial.print("Adresse MAC du module : "); // affiche message

for (int i=0; i<6; i++) { // défile les 6 octets

if (mac[i]<10) Serial.print(0,HEX),Serial.print(mac[i],HEX), Serial.print(":"); // affiche message
      else Serial.print(mac[i],HEX), Serial.print(":");

} // fin for
(mac);




est il possible de faire la même chose via le shield ethernet?
j'ai testé plusieurs solutions, mais sans succès.
si vous avez une idée

bonjour
pour le shield Ethernet W5100 l'adresse MAC ("USINE") est inscrite sur la "tiquette derrière" :grin:
elle est modifiable en exploitation (voir là réponse au dessus)

merci les gars, je suis au courant pour l'étiquette :grin:
mais mon but est de ne pas a avoir a mettre à la mano chaque mac si j'ai 10 shield a mettre en place.
ca fait 10 fois la même modif a faire, sachant que je vais chercher la config de chaque carte suivant sa mac, c'est lourd.
via un dhcp automatique, la mac apparait bien sur un router, donc on doit bien la trouver quelque part via un script je pense comme pour le redfly.

L'adresse mac comme c'est toi qui l'inscrit dans ton code,donc tu peux la récupéré et l'envoyer facilement non ?

byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

Serial.print("Adresse MAC du module : "); // affiche message

    for (int i=0; i<6; i++) { // défile les 6 octets

      if (mac[i]<10) Serial.print(0,HEX),Serial.print(mac[i],HEX), Serial.print(":"); // affiche message
      else Serial.print(mac[i],HEX), Serial.print(":");

    } // fin for
(mac);

J'ai pas très bien compris, l'adresse mac tu veux la récupéré pour où, qui, quoi ?

Bonjour
Sans entrer dans le débat sur l'utilité de la chose je veux juste dire qu'il est à priori possible (après une modification de la librairie Ethernet) de lire dans un sketch l'adresse MAC préalablement définie ..... par le même sketch.

Ce qui me fait dire cela c'est la présence dans W5100.h d'un 'GetIPAdress()' aux côtés du 'SetIPAdress() utilisé, lui, dans Ethernet.cpp. ces deux fonctions permettent la lecture/écriture des registre SHARn du W5100. Les deux fonctions complémentaires existent donc mais seule l'écriture est actuellement utilisée dans le driver.

Sauf erreur d'intérprétation de la doc du W5100 les registres SHAR sont en RAM, l'adresse MAC est perdue quand l'alim est coupée. L'étiquette ne correspondrait alors qu'à une adresse 'réservée' proposée !!

Dans le cas du redfly et des modules WiFi en général c'est différent car l'adresse MAC est en général conservée en 'dur' (rom, flash ou eeprom). La fonction lecture devient alors plus pertinente !!

En effet c'est pour cela qu'il faut l'attribuer à l'initialisation du shield comme il en a besoin pour la couche de liaison (c'est d'ailleurs comme cela par exemple que le routeur pourras déterminé la mac adresse de l'interface distante).
C'est ça ici que je ne comprend pas pourquoi il veut récupéré une adresse mac qu'il faut de toute façon spécifié sois même, dans le cas de la redfly ok mais ici ... :~

al1fch a bien comprit et répondu à ma question.
j'ai fait plusieurs tests en déconnectant de l'usb le shield ethernet et avec la découverte du réseau, la mac est toujours la même.
d'ou mon interrogation pour la récupérer, mais apparemment, ce n'est pas possible.

pour quoi ?

mais mon but est de ne pas a avoir a mettre à la mano chaque mac si j'ai 10 shield a mettre en place.

pour qui et pour ou?
sachant que je vais chercher la config de chaque carte suivant sa mac sur un serveur avec un fichier dédié à cette mac, ca me ferait gagner du temps en automatisant la chose.
je rentre dans mon panel la mac du shield, au boot, le shield va chercher sa conf tout seul comme un grand et je n'ai pas besoin de me taper les modif à chaque fois dans le sketch :wink:

Ah ok si je comprend bien, c'est le fait de devoir attribué toi même une adresse mac, donc modifié le code (l'adresse mac) arduino pour chaque carte qui est ch... ?
(Je pensais que tu savais que l'adresse mac étais attribué dans le code et non inscrite en dure dans le shield :sweat_smile:)

tu as tout compris :wink:
c'est quand même fait pour les feignants l'informatique :grin:

infobarquee:
c'est quand même fait pour les feignants l'informatique :grin:

:grin:
Sinon pour facilité les choses tu peux jouer avec les #define

#define mac1 ...
#define mac2 ...

Ou comme tu peux attribuer l'adresse mac que tu veux, tu peux les faire suivre sur le dernier octet.

{  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x01 };
{  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x02 };
{  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x03 };
.
.
.
{  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x09 };
{  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x0A };
.
.
.
{  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xFF };

tu n'auras que le derniers octet à changer à chaque fois et non tout la mac adresse .

Un feignant orienté 'hardware' comme moi proposerait plutôt l'ajout sur chaque shield d'un composant comportant d'origine (pour s'épargner la peine de les programmer !!) un nombre 'unique' d'au moins 48 bits acceptable comme adresse MAC. Par exemple :

-un ds1820 ou autre composant OneWire (3 fils à souder, c'est pas fatiguant !!).
Dans leur code en ROM de 64 bits il y ajustement un n° unique de 48bits
Le sketche commun contiendrait une lecture de ce numero en tant qu'adresse MAC
Chaque shield aurait donc sa propre adresse MAC 'maison' en 'dur'

-une petite EEPROM spéciale de chez Microcip (24AA02E48 ou 25AA02E48) (spi ou i2c) contenant une adresse MAC, une vraie de vraie....

Ca fait quand même beaucoup de code pour pas grand chose (1 octet à changer) sans oublier le poids en mémoire programme, enfin pour un feignant 'software' comme moi. :grin:
Sinon il y a les ds2401 qui ne servent qu'a ça, je sais pas s'il a déjà été implémenté dans l'arduino mais j'y avais justement pensé pour identifié les modules pour notre projets domotique.

je sens une certaine ironie dans le "feignant" :slight_smile:
ce n'est pas péjoratif du tout, je l'utilise souvent pour dire que l'informatique est bien pratique pour éviter les taches répétitives, il faut le prendre comme ca et non autrement.

le principe de souder 3 fils, n'est pas dénué de bon sens, mais on en revient au même, 3 soudures sur 10 modules, ca fait du taf.
il y a toujours le moyen de mettre un wifshield, mais bon.
ca me turlupine cette histoire de mac quand même.

infobarquee:
je sens une certaine ironie dans le "feignant" :slight_smile:
ce n'est pas péjoratif du tout, je l'utilise souvent pour dire que l'informatique est bien pratique pour éviter les taches répétitives, il faut le prendre comme ca et non autrement.

Ironique non, tu n’imagines pas tout ce que le développeur est prêt à faire par fainéantise juste pour éviter 2 lignes de code :grin:.

infobarquee:
le principe de souder 3 fils, n'est pas dénué de bon sens, mais on en revient au même, 3 soudures sur 10 modules, ca fait du taf.
il y a toujours le moyen de mettre un wifshield, mais bon.
ca me turlupine cette histoire de mac quand même.

Vus qu'il n'y aurais qu'1 seul 1wire le mode parasite 2 fils suffit normalement, sinon sans prise de tête contente toi de modifier le code uniquement c'est pas comme si tu allais le mettre en production non plus (enfin je crois lol).

osaka:
Sinon il y a les ds2401 qui ne servent qu'a ça, je sais pas s'il a déjà été implémenté dans l'arduino mais j'y avais justement pensé pour identifié les modules pour notre projets domotique.

bonsoir Osaka
juste sur ce point :
Tous les compo 1Wire quelque soit leur fonction emporte une identité unique. (un code famille+un N° unique+CRC)
les plus basiques ne font justement que de simplement renvoyer "cette identité" .
Pour ceux qui sont le plus souvent utilisés "en arduino" = les T° 18x20, il n'y en a pas 2 identiques.
C'est même la condition première : impérativement connaitre l'adresse/identité pour ensuite pouvoir obtenir "la valeur"

la lib OneWire est bien fonctionnelle

Bonsoir Artouste,
Vivi je sais pour le numéro unique, je disais juste qu'il pouvait ce contenté du 2401 puisqu'il n'y a que l'adresse qui l’intéresse dans ce cas ci. :wink:
J'avais juste pas tilté :sweat_smile: sur le fait que si la lib est capable de le connaitre pour le 18b20 il est capable pour les autres (biesse que je suis :sleeping: :grin:) ...
Sinon je viens de pensé à un truc, pourquoi ne pas inscrire la mac adresse dans l'eeprom de l'arduino une seul fois, après quelque soit cette adresse le code sera le même ?

Sinon je viens de pensé à un truc, pourquoi ne pas inscrire la mac adresse dans l'eeprom de l'arduino une seul fois, après quelque soit cette adresse le code sera le même ?

Je n'ai pas osé proposer ça à infobarquee vu la lourdeur du travail de programmation de l'eeprom d'une dizaine d'Arduinos ;)..... et puis j'avais cru comprendre qu'il voulait 'attacher' l'adresse mac au shield lui même, pas à l'Arduino.

Yop al1fch,
Vi m'enfin entre l'écriture (à effectuer une seule fois)+ la simple lecture de 6 octet en eeprom de l'atmega (code commun à tous) comparé à l’installation matériel (soudure, ...)+utilisation d'une entrée+ lib 1wire ... :~.
En fait ça serait une lecture de l'eeprom pas pour l'arduino, mais pour attribuer cette mac address au shield à l'initialisation de celui ci dans le code arduino. :wink:

osaka:

infobarquee:
je sens une certaine ironie dans le "feignant" :slight_smile:
ce n'est pas péjoratif du tout, je l'utilise souvent pour dire que l'informatique est bien pratique pour éviter les taches répétitives, il faut le prendre comme ca et non autrement.

Ironique non, tu n’imagines pas tout ce que le développeur est prêt à faire par fainéantise juste pour éviter 2 lignes de code :grin:.

infobarquee:
le principe de souder 3 fils, n'est pas dénué de bon sens, mais on en revient au même, 3 soudures sur 10 modules, ca fait du taf.
il y a toujours le moyen de mettre un wifshield, mais bon.
ca me turlupine cette histoire de mac quand même.

Vus qu'il n'y aurais qu'1 seul 1wire le mode parasite 2 fils suffit normalement, sinon sans prise de tête contente toi de modifier le code uniquement c'est pas comme si tu allais le mettre en production non plus (enfin je crois lol).

tu as tout a fait raison, je suis le premier a me prendre le choux sur le codage pour éviter de réécrire 2 lignes à chaque fois :slight_smile: (pour le php, pour l'arduino, j'en suis encore loin)
pour le moment, la production est en proto sur un premier site chez moi, mais si ca fonctionne, ca risque de passer en option sur la production pour du matériel que je vends, donc moins j'aurais a me prendre la tête, plus je gagnerai en temps par la suite.