IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

no-IP port 8080 [Arduino ESP32]


Sujet :

Arduino

  1. #1
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut no-IP port 8080
    Bonjour à tous
    J'ai 2 questions:
    1. j'ai construit un serveur avec un ESP32 qui en WiFi fonctionne parfaitement si je mets le port 80 et que je me connecte sur mon réseau local (Livebox Orange).
    Par contre si je mets le port 8080 cela ne fonctionne plus. Pourquoi?

    2.J'essaie en vain de me connecter par internet sur mon ESP32 serveur: j'ai un compte no-IP, j'ai configurer ma box pour router le port 80 (qui fonctionne). Je fais cette commande: http://noIp/monNomDeDomaine.ddns.net/maCommande
    mais rien ne se passe. Je pense que ma commande est erronée. Si quelque connait la syntaxe exacte car je ne la trouve pas sur le site de n0-IP.

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 884
    Par défaut
    Citation Envoyé par mormic Voir le message
    Par contre si je mets le port 8080 cela ne fonctionne plus. Pourquoi?
    si vous mettez 8080 où?
    quel code tourne sur l'ESP?

  3. #3
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    J'utilise la librairie WebServer et je défini le port 80 ou 8080:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <Arduino.h>
    #include <FS.h>
    #include <SPIFFS.h>
    #include <WiFi.h>
    #include <WebServer.h>
    #include "maBox.h"
    
    #define LED_P01 26
    #define LED_P02 25
    #define BTN_PIN 22
    #define FORMAT_SPIFFS_IF_FAILED true
    #define HTTP_PORT 80
    Je crée un serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //****************instantiations*********************
    WebServer serveur(HTTP_PORT);
    Dans le setup je construis le serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void initWebServer() {
      serveur.on("/", handleRoot);
      serveur.on("/index.html",handleRoot);
      serveur.on("/led1", comLed1);
      serveur.on("/led2", comLed2);
      serveur.begin();
    }
    puis dans la boucle principale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    serveur.handleClient();
    Bien-sûr lorsque je mets le port 8080 je modifie aussi dans ma box le NAT/PAT
    Web Server 8080 8080 TCP esp32-CB06A0
    Mais dans ce cas, l'accès est refusé même en local.

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 884
    Par défaut
    Vous essayez de le joindre par son IP? Il est bien enregistré sur le réseau wifi ? (Imprimez l’IP obtenue)

    En local vous ne devriez pas avoir besoin de modifier quoi que ce soit sur la box

    Sans tout le code ou un code exposant le souci difficile de dire si vous n’avez pas autre chose qui gêne

    J’utilise asyncWebServer sur esp32 c’est plus complet

  5. #5
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    J’utilise asyncWebServer sur esp32 c’est plus complet
    Je viens de voir cette librairie qui est assurément plus complète mais un peu trop compliquée pour moi. De plus, je n'ai pas besoin d'avoir plusieurs liaisons simultanées. Alors je vais resté avec WebServer.
    En regardant de plus près cette dernière, je m'aperçois que dans l'entête le port est déjà défini à 80:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class WebServer
    {
    public:
      WebServer(IPAddress addr, int port = 80);
      WebServer(int port = 80);
      virtual ~WebServer();
     
      virtual void begin();
      virtual void begin(uint16_t port);
      virtual void handleClient();
     
      virtual void close();
      void stop();
    Ne serait-ce pas la raison pour laquelle un autre port ne puisse pas être utilisé?

    Sinon voilà mon programme complet en cours de développement.
    Actuellement la page HTML est dans le corps du programme mais j'ai prévu d'utiliser le SPIFFS pour l'héberger.
    J'ai aussi prévu une API pour gérer d'autres actions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    *********************************************************************************
    ***********Maquette d'essai ESP32 en serveur Web - librairie WebServer************
    ***********Controle de 2 leds  une en On/Off l'autre en clignotement**************
    ***********accès en local par réseau WiFi et sur Internet via la Box**************
    ***********utilisation d'un domaine sur no-IP*************************************
    **************************************version 1.08 Michel MORICE juillet 2023****/
    #include <Arduino.h>
    #include <FS.h>
    #include <SPIFFS.h>
    #include <WiFi.h>
    #include <WebServer.h>
    #include "maBox.h"
     
    #define LED_P01 26
    #define LED_P02 25
    #define BTN_PIN 22
    #define FORMAT_SPIFFS_IF_FAILED true
    #define HTTP_PORT 80  //ou 8080
     
    const uint8_t DEBOUNCE_DELAY = 50;
    const char* mon_ssid = SECRET_SSID;
    const char* mon_pass = SECRET_PASS;
     
    //***************définition des leds*******************************
    struct Del{
      uint8_t pin; bool etat;
      void update(){
        digitalWrite(pin, etat? HIGH : LOW);
      }
    };
     
    //**************définition des boutons*****************************
    struct Bouton{
      uint8_t pin; bool lastReading; uint32_t lastDebounceTime; uint16_t state;
      //Méthodes pour déterminer l'état du bouton
      bool pressed()                  {return state == 1;}
      bool released()                 {return state == 0xFFFF;}
      bool held(uint16_t count=0)     {return state >1 + count && state < 0xFFFF;}
      //Méthode pour lire l'état du bouton
      void read(){
        bool lecture = digitalRead(pin);
        if(lecture != lastReading){
          lastDebounceTime = millis();
        }
        if(millis() - lastDebounceTime > DEBOUNCE_DELAY){
          bool pressed = lecture == LOW;
          if(pressed){
                 if(state < 0xFFFE) state++;
            else if(state == 0xFFFE) state = 2;
          }
          else if(state){ state = state == 0xFFFF? 0 : 0xFFFF;}
        }
        lastReading = lecture;
      }
    };
    //****************Page HTML***********************
    const char index_html[] PROGMEM = R"=====(
    <!DOCTYPE html>
    <html lang="fr">
      <head>
        <meta charset="utf-8">
        <link rel="icon" href="data:,">
        <title>Commande Leds</title>
      </head>
      <body>
        <h1>Etat des leds</h1>
          <h2 id="etatLed1"></h2>
          <h2 id="etatLed2"></h2>
        <h1>Boutons de commande</h1>
        <button onclick="appServeur('/led1',actionLed1)">Basculer Led1</button>
        <button onclick="appServeur('/led2',actionLed2)">Activation Led2</button>
        <script>
          function appServeur(url,cFonction){
            var xhttp = new XMLHttpRequest();
            xhttp.onreadystatechange = function(){
              if(this.readyState==4 && this.status==200){
                cFonction(this);
              }
            };
            xhttp.open("GET", url, true);
            xhttp.send();
          }
          function actionLed1(xhttp){
            document.getElementById("etatLed1").innerHTML = "LED1 " + xhttp.responseText;
          }
          function actionLed2(xhttp){
            document.getElementById("etatLed2").innerHTML = "LED2 " + xhttp.responseText;
          }
        </script>
      </body>
    </html>
    )=====";
     
    //***************variables globales***********************
    Del led2    = {LED_P02, false };
    bool cligneOn = false;
    Del led1    = {LED_P01, false};  
    Bouton btn  = {BTN_PIN, HIGH, 0, 0}; 
     
    //****************instantiations*********************
    WebServer serveur(HTTP_PORT);
     
    //**************SPIFFS initialisation*******************
    void initSPIFFS(){
      Serial.println("init SPIFFS");
      if(!SPIFFS.begin(FORMAT_SPIFFS_IF_FAILED)){
        Serial.println("cannot mount SPIFFS");
        while(1){
          led2.etat = millis() % 200 < 50;
          led2.update();
        }
      }
    }
    //****************WIFI initialisation********************
    void connexion_BOX(WiFiEvent_t wifi_event, WiFiEventInfo_t wifi_info){
      Serial.println("connexion reussie");
    }
    void obtention_IP(WiFiEvent_t wifi_event, WiFiEventInfo_t wifi_info){
      Serial.printf("%s\n", WiFi.localIP().toString().c_str());
    }
    void deconnexion_BOX(WiFiEvent_t wifi_event, WiFiEventInfo_t wifi_info){
      WiFi.begin(mon_ssid,mon_pass);
    }
    //**************WebServer init***************************
    void handleRoot() {
      String tempo(reinterpret_cast<const __FlashStringHelper*> (index_html));
      serveur.send(200,"text/html", tempo);
    }
    void comLed1(){
      led1.etat = !led1.etat;
      String msg = led1.etat? "allumée" : "éteinte";
      serveur.send(200,"text/plain", msg);
    }
    void comLed2(){
      cligneOn = !cligneOn;
      String msg = cligneOn? "cligne" : "éteinte";
      serveur.send(200,"text/plain", msg);
    }
    void initWebServer() {
      serveur.on("/", handleRoot);
      serveur.on("/index.html",handleRoot);
      serveur.on("/led1", comLed1);
      serveur.on("/led2", comLed2);
      serveur.begin();
    }
    void initWiFi(){
      WiFi.mode(WIFI_STA); 
      Serial.println("init WIFI");  
      WiFi.onEvent(connexion_BOX,ARDUINO_EVENT_WIFI_STA_CONNECTED);           //attend une connexion wifi
      WiFi.onEvent(obtention_IP, ARDUINO_EVENT_WIFI_STA_GOT_IP);              //attend l'obtention de l'adresse IP
      WiFi.onEvent(deconnexion_BOX, ARDUINO_EVENT_WIFI_STA_DISCONNECTED);     //si une déconnexion survient  
      WiFi.begin(mon_ssid, mon_pass);
    }
    //*****************paramétrage initial***********************
    void setup() {
      Serial.begin(9600);
      Serial.println("Start");
      pinMode(led2.pin,OUTPUT);
      pinMode(led1.pin,OUTPUT);
      pinMode(btn.pin,INPUT_PULLUP);
      initWiFi();
      delay(1000);  
      initSPIFFS();
      delay(1000);
      initWebServer();                                           
    }
    //*****************boucle principale*****************************
    void loop() {
      serveur.handleClient();
      btn.read();
      if (btn.pressed()) led1.etat = !led1.etat;
      led2.etat = cligneOn? millis() % 1000 < 50 : false;
      led1.update();
      led2.update();
    }

  6. #6
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 884
    Par défaut
    OK, la bibliothèque AsyncWebServeur n'est pas si compliquée que cela mais je comprends.




    le 80 que vous voyez là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class WebServer
    {
    public:
      WebServer(IPAddress addr, int port = 80);
      WebServer(int port = 80);
    est une valeur par défaut

    si dans votre code vous faisiez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WebServer serveur(); // sans parmètre
    alors 80 serait utilisé par la bibliothèque

    mais comme vous faites
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WebServer serveur(HTTP_PORT);
    c'est bien le N° de port que vous passez qui sera utilisé





    que tapez vous pour accéder à votre ESP ?

  7. #7
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    je saisie en 4G: mondomainesurnoIp.ddns.net/index.html pour afficher la page d'accueil ou led1 ou led2
    en wifi: monadresseIP/index.html
    Ceci fonctionne si je mets port interne 80 et port externe 80.
    Par contre si je mets port interne 80 et port externe 8080 ma saisie en 4G ne fonctionne plus car no-IP semble prendre 80 comme port d'accès externe.
    Alors j'ai tenté cette commande: mondomainesurnoIp.ddns.net:8080/index.html et là ça fonctionne.

    J'ai maintenant remis en port interne mais là cela ne fonctionne plus comme si c'était toujours l'adresse 80 qui prenait le dessus.

    Je vais donc me contenter de ce qui fonctionne bien: port interne 80 et port externe 8080.

    Je vais m'intéresser maintenant à sécuriser cette affaire en passant par HTTPS.

    Merci de votre aide

  8. #8
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 884
    Par défaut
    si vous n'êtes pas sur le port 80 (port par défaut) il faut bien écrire http://mon.site.com:8080/ pour accéder au service sur le port 8080
    si vous êtes en accès externe (4G) il faut que votre box route le port 8080 vers votre ESP sur le port 8080 aussi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/11/2007, 13h57
  2. acces webdav sur port 8080
    Par sam_c_java dans le forum Windows XP
    Réponses: 0
    Dernier message: 29/10/2007, 19h29
  3. NetBeans en utilisant le port 8084 / Tomcat Port : 8080
    Par 19cmos83 dans le forum NetBeans
    Réponses: 12
    Dernier message: 02/10/2007, 07h21
  4. Réponses: 4
    Dernier message: 15/07/2007, 08h22
  5. pb lors du traditionnel changement du port 8080 en 80 dans le server.xml
    Par dracula2000 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 16/03/2007, 13h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo