Go Down

Topic: Shield Arduino Ethernet « new IDE » : Connexion impossible avec IP Publique (Read 4217 times) previous topic - next topic

Maxkcirtap

Shield  Arduino Ethernet « new IDE » : Connexion impossible avec IP Publique
Bonjour,
Peut-être pourrez-vous me conseiller : Après plusieurs jours de recherche je n'arrive pas à trouver la solution pour me connecter de l'extérieur, avec mon adresse publique  fixe Free, malgré la redirection de port, alors que tout se passe normalement en local.

OS : Windows XP SP3
IDE Arduino  1.7.8
Arduino UNO R3 (Officiel)
Shield Arduino Ethernet "newIDE" ->Implique les bibliothèques :
#include <Ethernet2.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp2.h>
Code compilé joint : Tutorial « WebServer » du site Arduino (Avec quelques ajouts de variables)
Box : FreeBox Révolution (Firmware à jour).
Je possède plusieurs caméras de surveillance un NAS Synology et 3 serveurs Web IPX-800 de GCE, pour lesquels j'ai fait les redirections de ports. Tout fonctionne parfaitement en local et de l'extérieur avec mon IP Fixe Free.
Redirection effectuée pour le Shield Ethernet Arduino  New IDE :
IPAddress ip(192, 168, 0, 100);
EthernetServer server(700);
 « Port redirigé sur la FreeBox » :
700 - 192.168.0.100 - 700
  80 - 192.168.0.100 -     80

UNO + nouveau Shield Ethernet Arduino " NewIDE"  (officiels) + Code « WebServer » :
En local : J'accède parfaitement au serveur Arduino avec mon IPAD AIR ou mon iPhone :
Sur navigateur Google : 192.168.0.100:700 j'obtiens sans problème une page HTML avec les valeurs des 6 entrées analogiques de la UNO. Le shield reconnaît donc le port 700… J'obtiens le même résultat avec 192.168.0.100:80

Par contre si je souhaite me connecter de l'extérieur avec mon adresse publique comme je le fais avec mes webServeurs IPX800-V3, impossible alors que le port 700 est bien redirigé !

Dans le navigateur : « XX.XXX.XXX.XX :700 » //Adresse publique fixe
Réponse : Page Web inaccessible
ERR_CONNECTION_REFUSED

J'ai réalisé plusieurs codes Arduino avec des capteurs DHT22, BMP180, Tiny I2C RTC, Servo SG90 LCD 4x20, relais pompes et  SEN0114 avec lecture « Serial »et LCD en local, mais jamais à distance.

J'ai certainement oublié quelque chose dans le code, car c'est la première fois que j'utilise un Shield Ethernet… Peut-être pouvez-vous m'aider ?
Cordialement.

Code: [Select]
[#include <SPI.h>
#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet2.h> //Carte shield Ethernet "new IDE" + Arduino UNO R3 (Arduino officiel))
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp2.h>
#include <util.h>

/*
  Web Server

 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield.

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)

 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 modified 02 Sept 2015
 by Arturo Guadalupi

 */

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 0, 100);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(700);
int valueMap;
void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            valueMap=map(sensorReading,0,1023,0,5);         
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.println(sensorReading);
            client.print("Tension : ");
            client.println(valueMap);
            client.print(" Volts");
           
            client.println("<br />");
           
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
}/code]

infobarquee

bonjour,
tu essaye de ton pc pour arriver sur l'ip publique ou via un autre pc extérieur ou via un téléphone?
AUCUNE AIDE PAR MP

Artouste

Peut-être pourrez-vous me conseiller : Après plusieurs jours de recherche je n'arrive pas à trouver la solution pour me connecter de l'extérieur, avec mon adresse publique  fixe Free, malgré la redirection de port, alors que tout se passe normalement en local.
bonjour
tu test avec ton adresse IP FREE de ton acces FREE ?
si oui c'est peut etre un probleme de loopback (c'est le cas avec ORANGE)
tu a fais un test d'accés a partir d'un autre acces internet ?


rjnc38

tu test avec ton adresse IP FREE de ton acces FREE ?
si oui c'est peut etre un probleme de loopback (c'est le cas avec ORANGE)
avec FREE ça fonctionne : on peux atteindre en local un hote avec son adresse publique

Maxkcirtap

@Artoust && @infobarquee : Merci à tous pour vos réponses.

Comme le dit justement @rjnc38, le forwarding sur les FreeBox permet d'utiliser l'adresse publique en local et ça fonctionne très bien avec mes caméras et mes serveurs iIPX-800.

Je n'ai donc pas fait le test à partir d'un PC à l'extérieur, mais je vais essayer à tout hasard...

Pour résoudre ce problème, étant débutant Arduino, je pensais plutôt à une erreur de code de ma part
ou à un problème lié à la nouvelle bibliothèque <ethernet2.h>, qui remplace <ethernet.h> pour le nouveau shield newIDE. Bien que le site Arduino précise que les codes utilisés avec la librairie ethernet.h restent compatibles...

Quelqu'un a-t-il utilisé ce nouveau shield ?

Merci pour vos conseils, car je voudrais fusionner tous les programme avec les différentss capteurs et pouvoir les visualiser de l'extérieur.

Maxkcirtap

Suite à mon poste précédent, je confirmer que mon Shield Arduino n'est pas accessible de l'extérieur à partir d'un autre PC.

Ooups ! Quelqu'un a-t-il une solution à mon problème ?
Cdlt.

hameau

Salut,

je laisserais le port 80 (par defaut) sur le shield Eternet, par contre pour accéder depuis l'extérieur je ferais un essai avec cette config :

IP_Public_FB:700 ->Free_Boox avec une redirection du port 700 vers 80 de l'IP  192.168.1.100.

@+
 

Maxkcirtap

Merci @hameau,
Je viens de réessayer la redirection du port 700 vers le port 80 sur la FreeBox, mais en me connectant à : mon_ip-publique:700, j'obtiens toujours le même message d'erreur :
Page Web inaccessible - ERR_CONNECTION_REFUSED

Dans ce message, la question est de savoir par qui est refusée la connexion : la box ou le Shield Ethernet ? Car le message n'est pas ERR_CONNECTION_TIME_OUT, mais bien REFUSED...

Photo : Redirection des ports sur la FreeBox

rjnc38

tu n'as pas dit si ça fonctionne par l'IP locale ? ça prouverait un pb de box
je crois que le port 700 est réservé essayes par ex le port 7070

Maxkcirtap

@rjnc38: Oui cela fonctionne en local, je l'avais précisé dans mon premier post.
Je viens de changer le port en 7070, même message d'erreur.

Résumé des divers tests en IP locale :
Code Arduino : EthernetServer(700)
Connexion Navigateur : 192.168.0.100:700 Page html ok

Code Arduino : EthernetServer(7070)
Connexion navigateur : 192.168.0.100:7070 Page html ok

Code Arduino : Ethernet(80)
Connexion navigateur : 192.168.0.100:80 Page html ok

j'ai également essayé d'attribuer des ports qui fonctionnent de l'extérieur avec mon adresse publique pour mes caméras. Même message d'erreur.

La FreeBox ne semble pas être en cause, car je peux appeler mes serveurs IPX-800, mon Syno et mes CAMs avec mon adresse publique et cela fonctionne normalement.

Je pense plutôt à une ligne de code Arduino ajouter ou un problème particulier lié à la nouvelle librairie ethernet2, et là ce n'est plus de mon niveau...

Photos : page html en local et message d'erreur avec adresse publique.

rjnc38

essaye de faire une config IP complète avec : Ethernet.begin(mac, IPlocal, gateway, gateway , subnet);
tu peux aussi essayer l'exemple ethernet webclient pour voir s'il peut sortir ...

rjnc38

@rjnc38: Oui cela fonctionne en local, je l'avais précisé dans mon premier post.
Je viens de changer le port en 7070, même message d'erreur.
Code Arduino : EthernetServer(7070)
Connexion navigateur : 192.168.0.100:7070 Page html ok
en fait c'est le port externe qu'il faut changer, tu peux laisser l'arduino sur le port 80
car je pense que c'est la box qui te retourne le message

Maxkcirtap

- Ethernet.begin complète ne change rien,
- Port 80 ou 7070 sur Arduino ne change rien (Sauf avec l'IP locale ou ça fonctionne pour les 2 ports),
- L'exemple WebClient fonctionne. Le terminal série confirme la connexion à Google.

J'ai essayé tous les exemples WebServer Arduino en modifiant les IP, DNS, gateway et port, rien n'y fait j'ai toujours la même erreur.

C'est insoluble !





Maxkcirtap

Le problème n'est pas résolu, mais vient d'ailleurs...
Abandonnant provisoirement le problème Ethernet newIDE, j'ai chargé mon programme qui gère 5 capteurs sur une Mega 2560, afin de modifier une variable d'humidité. Mais impossible de compiler le programme.
Les erreurs provenaient de la librairie LiquidCrystal_I2C, alors que tout fonctionnait avant.

J'ai donc réinstallé la librairie, ce qui a généré une dizaine de librairies LiquidCrystal avec des noms divers ! C'est là que j'ai compris que la version de l'IDE 1.7.8 que j'avais installée, seule compatible avec le nouveau Shield "newIDE" et acheté sur le NET dans un magasin très connu, était en cause.

J'ai désinstallé la 1.7.8 et réinstallé la 1.6.7 que j'avais précédemment et tout est rentré dans l'ordre pour le programme de la MEGA'

J'ai alors testé le programme WebServer et il m'est désormais impossible de me connecter, en local, avec les librairie Ethernet.h, EthernetClient.h et EthernetServer.h., ce que n'arrivait à faire avant.

C'est donc bien un problème lié à l'IDE 1.7.8, certainement encore non stable, et je n'ai plus qu'à mettre le Shield Ethernet newIDE dans un placard !

Je vais acheter l'ancien Shield pour voir si enfin je peux enfin me connecter avec mon adresse publique...
 
En tout cas, merci à tous de votre aide !
Maxkcirtap


rjnc38

J'ai désinstallé la 1.7.8 et réinstallé la 1.6.7 que j'avais précédemment et tout est rentré dans l'ordre pour le programme de la MEGA'
J'ai alors testé le programme WebServer et il m'est désormais impossible de me connecter, en local, avec les librairie Ethernet.h, EthernetClient.h et EthernetServer.h., ce que n'arrivait à faire avant.
C'est donc bien un problème lié à l'IDE 1.7.8, certainement encore non stable, et je n'ai plus qu'à mettre le Shield Ethernet newIDE dans un placard !
pour moi la version de lib n'est pas liée a la version de l'IDE mais à la version du schield donc
Quote
// If you want to use the w5100
#include <Ethernet.h>
// If you want to use the w5200/w5500
#include <EthernetV2_0.h>
donc suivant le CI (5200 ou 5500) de ton schield même en IDE 1.6 il faut utiliser la lib Ethernet V2

Go Up