probleme avec mon ethernet shield et mon lan

salut à tous !

j’ai un problème avec mon ethernet shield et mon lan (mais je suppose que vous avez lu le titre :P).

Voila, je me lance dans la domotique, rien de bien ambitieux, mais je pense que ça commence mal. En effet, mon code semble être fonctionnel entre mon laptop et mon arduino+ethernet shield, seulement voila, quand je me lance sur le lan, je n’arrive plus à communique avec mon arduino… problématique pour faire de la domotique !!!

pour ne pas faire un post trop long, j’ai raccourcis mon code au plus simple (mon objectif étant de faire une alarme anti intrusion avec un catpeur infrarouge, que je peux activer et désactivé à distance depuis le lan).

La contrainte… c’est pour ma maman… et comme vous le savez, les mamans et l’informatique … donc il faut que ça soit le plus user friendly possible.

en gros, arduino+ethernet shield avec une IP statique via ethernet et envoi et reception de trames depuis un laptop connecté sur le lan via wifi, avec un script en python qui reçois et envoi des trames (du genre allumé, éteindre et status)

pour commencé, j’ai configurer ma carte eht0 (j’oubliais, je bosse en linux mais il faut que ça tourne sur du windows) avec une autre ip que sur mon wifi (wifi en 192.168.0.0/24, free quand tu nous tiens…) et donc j’ai configurer ma carte : sudo ifconfig eth0 192.168.1.250, et mon nono en 192.168.1.253 jusque la tout fonctionne parfaitement, mais pour vous montrer ma démarche, je vous donne le code simplifié :

arduino :

#include <SPI.h>
#include <Ethernet.h>

/*GERSTION ETHERNET*/
byte mac[] = { 0x13, 0x37, 0x13, 0x37, 0x13, 0x37 };
IPAddress ip(192,168,1, 253);
EthernetServer serveur(1337);

byte reponse; 

void setup()
{
        /*CONECTION ETHERNET*/
        /*initialisation*/ 
        Ethernet.begin(mac, ip);

        delay(1000);
 
        /*initialisation serveur*/
        serveur.begin();
}

void loop()
{
    /*création de la liaison*/
    EthernetClient client = serveur.available() ;
    
    /*si la liaison est disponible*/
    if (client == true)
    { 
       client.print("coucou"); //envoie d'un message
    }
}

et le python associé :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import sys
import time

# parametrage d'ip et de port
Host = "192.168.1.253"
Port = 1337

# création d'une socket
Sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# initialisation de l'écoute 
Sock.connect((Host, Port))

# envoi d'une premiere chaine de caractere, on dit a l'arduino que l'on est pret a reçevoir
Sock.send(str.encode("WAZZAAAAA"))

message = Sock.recv(10)

print message

# fermeture de la socket
Sock.close()
#raw_input("appuyez sur ENTREE pour quitter.....")
sys.exit()

la ça fonctionne nickel, quand je lance mon script dans un terminal je reçois bien le “coucou”.

et c’est ici que les choses se corsent. confiant, je branche mon arduino+ethernet shield sur ma box free via ethernet, et mon laptop est en wifi (brancher un cable ça parait trop difficile pour ma maman…).
je modifie donc mon code en conséquence, pour que mon arduino chope bien la passerelle et le masque, et je change l’adresse ip dans le code pour qu’il soit bien sur la même adresse réseau :

code arduino :

#include <SPI.h>
#include <Ethernet.h>

/*GERSTION ETHERNET*/
byte mac[] = { 0x13, 0x37, 0x13, 0x37, 0x13, 0x37 };
IPAddress ip(192,168,0, 253);
byte gateway[] = { 192, 168, 0, 254 };
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer serveur(1337);

byte reponse; 

void setup()
{
        /*CONECTION ETHERNET*/
        /*initialisation*/ 
        Ethernet.begin(mac, ip, gateway, subnet);

        delay(1000);
 
        /*initialisation serveur*/
        serveur.begin();
}

void loop()
{
    /*création de la liaison*/
    EthernetClient client = serveur.available() ;
    
    /*si la liaison est disponible*/
    if (client == true)
    { 
       client.print("coucou"); //envoie d'un message
    }
}

code python (rien de bien différent mis a part l’ip):

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import sys
import time

# parametrage d'ip et de port
Host = "192.168.0.253"
Port = 1337

# création d'une socket
Sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# initialisation de l'écoute 
Sock.connect((Host, Port))

# envoi d'une premiere chaine de caractere, on dit a l'arduino que l'on est pret a reçevoir
Sock.send(str.encode("WAZZAAAAA"))

message = Sock.recv(10)

print message

# fermeture de la socket
Sock.close()
#raw_input("appuyez sur ENTREE pour quitter.....")
sys.exit()

et la… je n’arrive même pas a pinger l’arduino… j’ai essayé de me connecter en filaire avec mon laptop (pc et arduino brnaché en ethernet directement sur la box)… merde… ça fonctionne… mais que se passe t il ??

es ce que a vous est déjà arrivé ?? moi je suis un peu largué, j’ai vérifier toutes les confs sur mon laptop, mais comme je l’ai dit, j’essaye d’être le plus user friendly pour ma mere, donc touché a la conf de sa carte réseau, ça risque de la perdre… :confused:

merci d’avance pour votre aide !!!

bonjour,
ping tu le nono?
ouvre le port 1337 sur le compte free et reboot la box pour être pris en compte

salut infobarquee !

je ping le nono uniquement quand je suis en filaire (soit l'arduino directement sur le port ethernet de mon PC, soit quand le nono et mon PC sont en filaire sur la box). quand l'arduino est en filaire sur la box et que mon laptop est en wifi la... plus de ping ....

j'ai pensé a ouvrir le port, mais je n'ai pas de firewall LAN sur ma box, juste du forwarding de port WAN->LAN pour faire un serveur étant accessible depuis le net. (et avant qu'on me pose la question, mes iptables sont flush en ACCEPT).

Je ne veux pas que ce systeme soit accessible depuis internet, les communications n'atant pas encore chiffré et mes amis étant des trolls sur pates, ça risque de poser des problemes :slight_smile:

regardes s'il n'y a pas l'isolate AP active en wifi sur la box, ca pourrait expliquer le soucis
ne pas oublier de rebooter la box chez free à chaque modif

malheureusement pas de VLAN dédié à chaque connexion, je ping bien mes colocs (on est tous en wifi) et la box que j'ai (des anciennes alice box d'apres la MAC) offre vraiment peu d'option en terme d'administration réseau. A vraie dire, mis a par la configuration wifi (activer/désactiver le wifi, le Chanel et le type de chiffrement ) et le port forwarding pour du host, on peut rien en faire ! :slight_smile:

d'apres toi le code coté arduino est bon ? c'est la premiere fois que je tente de brancher le nono sur une box, du coup j'ai des doutes sur la véracité du code :confused:

mets toi en dhcp et donne le résultat d'ifconfig

change l'ip du nono en 192.168.0.10 par exemple et le port en 80

si ca ne fonctionne pas, essaye d'avoir un routeur pour vérifier que ca vient bien de la box et non du reste.

mon laptop est en DHCP, voici le ifconfig :

wlan0     Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
             inet adr:192.168.0.10  Bcast:192.168.0.255  Masque:255.255.255.0
             adr inet6: XXXX::XXXX:XXXX:XXXX:XXXX/64 Scope:Lien
             UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
             RX packets:2715288 errors:0 dropped:0 overruns:0 frame:0
             TX packets:2290066 errors:0 dropped:0 overruns:0 carrier:0
             collisions:0 lg file transmission:1000 
             RX bytes:2972634677 (2.7 GiB)  TX bytes:222441300 (212.1 MiB)

le nouveau code de mon nono ou j’ai changer l’ip en .15 et le port en 80 :

#include <SPI.h>
#include <Ethernet.h>

/*GERSTION ETHERNET*/
byte mac[] = { 0x13, 0x37, 0x13, 0x37, 0x13, 0x37 };
IPAddress ip(192,168,0, 15);
byte gateway[] = { 192, 168, 0, 254 };
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer serveur(80);

byte reponse; 

void setup()
{
        /*CONECTION ETHERNET*/
        /*initialisation*/ 
        Ethernet.begin(mac, ip, gateway, subnet);

        delay(1000);
 
        /*initialisation serveur*/
        serveur.begin();
}

void loop()
{
    /*création de la liaison*/
    EthernetClient client = serveur.available() ;
    
    /*si la liaison est disponible*/
    if (client == true)
    { 
       client.print("coucou"); //envoie d'un message
    }
}

et le code pyhon associé :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import sys
import time

# parametrage d'ip et de port
Host = "192.168.0.15"
Port = 80

# création d'une socket
Sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# initialisation de l'écoute 
Sock.connect((Host, Port))

# envoi d'une premiere chaine de caractere, on dit a l'arduino que l'on est pret a reçevoir
Sock.send(str.encode("WAZZAAAAA"))

message = Sock.recv(10)

print message

# fermeture de la socket
Sock.close()
#raw_input("appuyez sur ENTREE pour quitter.....")
sys.exit()

mais toujours le même probleme :frowning: le plus étonnant c’est qu’en branchant mon pc et l’arduino en filaire à la box ça fonctionne… c’est ça que je comprend pas… on a fais des tests en branchant un pc en filaire et en le pingant avec un autre pc en wifi ça marche impect… ça reste un grand mystère o_0

je vais essayer de dégoter un routeur je te tiens informé des que possible ! merci beaucoup pour ton aide !! :slight_smile: