logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 31-01-2019 16:10:37

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

[résolu] dépannage / compréhension programmes nodemcu

le fil précédent , comme celui - ci , s'appliquent au nodeMcu ESP8266 ESP-F .

suite du fil suivant :  https://debian-facile.org/viewtopic.php … 36#p290436

de même le fil suivant :  https://debian-facile.org/viewtopic.php … 35#p291435

je soumets à votre sagacité 2 programmes qui , en théorie , font la même chose .

savoir afficher , Et sur la console série , ET dans le navigateur , un(des) message(s) .

premier programme (HelloServer2)
pris dans les exemples de l'I.D.E. :


#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

#ifndef STASSID
#define STASSID "Bbox-xxxxxxxxx";
#define STAPSK  "xxxxxxxxxxxxxx";
#endif

const char* ssid = STASSID;
const char* password = STAPSK;

ESP8266WebServer server(80);

const int led = 5;

void handleRoot() {
  digitalWrite(led, 1);
  server.send(200, "text/plain", "hello from esp8266!");
  digitalWrite(led, 0);
}

void handleNotFound() {
  digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  digitalWrite(led, 0);
}

void setup(void) {
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
  }

  server.on("/", handleRoot);

  server.on("/inline", []() {
    server.send(200, "text/plain", "this works as well");
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
}

void loop(void) {
  server.handleClient();
  MDNS.update();
}
 




console série :

15:29:26.856 ->  1384, room 16
15:29:26.856 -> tail 8
15:29:26.856 -> chksum 0x2d
15:29:26.856 -> csum 0x2d
15:29:26.856 -> v21db8fc9
15:29:26.856 -> ~ld
 



et pour le site :

1548945987-capture-d-ecran-de-2019-01-31-15-44-18.png


deuxième programme ,
TUNIOT_22490 encodé sur le site de TUNIOT avec leur programme .

tuto serveur web tuniot

/////////////////////////////////
// Generated with a lot of love//
// with TUNIOT FOR ESP8266     //
// Website: Easycoding.tn      //
/////////////////////////////////
#include <ESP8266WiFi.h>

WiFiServer server(80);

void setup()
{
  Serial.begin(115200);
  WiFi.disconnect();
  delay(3000);
  Serial.println("START");
   WiFi.begin("Bbox-xxxxxx","xxxxxxxxxxxxxxx");
  while ((!(WiFi.status() == WL_CONNECTED))){
    delay(300);
    Serial.print("..");

  }
  Serial.println("Connected");
  Serial.println("Your IP is");
  Serial.println((WiFi.localIP().toString()));
  server.begin();

}


void loop()
{

    WiFiClient client = server.available();
    if (!client) { return; }
    while(!client.available()){  delay(1); }
    Serial.println("connection page web 'void loop' ");
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println("");
    client.println("<!DOCTYPE HTML>");
    Serial.println("Doctype effectué ");
    client.println("<html>");
    client.println("<head>");
    client.println("</head>");
    client.println("<body>");
    Serial.println("Balise body ");
      client.println("<h1 style=""color:#ff0000"">");
      client.println("bienvenue sur cette page web");
      Serial.println("ouverture page web");
      client.println("</h1>");
      client.println("<br>");
      client.println("<span style=""color:#33cc00;font-size:14px"">");
      client.println("ce serveur fonctionne depuis ");
      Serial.println("durée de fonctionnement du serveur");
      client.println("</span>");
      client.println("<span style=""color:#993399;font-size:20px"">");
      client.println((millis()/1000));
      client.println("</span>");
      client.println("<span style=""color:#006600;font-size:14px"">");
      client.println("secondes ");
      client.println("</span>");
      Serial.println("ce serveur fonctionne depuis");
    client.println("</body>");
    client.println("</html>");
    client.stop();
     delay(1);
    client.flush();

}



console série :


16:03:04.677 -> connection page web 'void loop'
16:03:04.677 -> Doctype effectué
16:03:04.677 -> Balise body
16:03:04.677 -> ouverture page web
16:03:04.677 -> durée de fonctionnement du serveur
16:03:04.710 -> ce serveur fonctionne depuis
 



1548947147-capture-d-ecran-de-2019-01-31-16-04-19.png

1548947147-capture-d-ecran-de-2019-01-31-16-04-52.png

grosso modo , j'ai le choix :

- soit l'internet sans la console  (1er programme)

- soit la console sans l'internet  (2ème programme)

vous pigez qque chose vous autres ?

Dernière modification par Debian Alain (01-02-2019 18:30:27)

Hors ligne

#2 31-01-2019 19:01:08

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

Salut smile

Pour le programme n°2, on en a déjà parlé là, j'ai déjà prposé un truc https://debian-facile.org/viewtopic.php … 58#p291258

Pour le 1, tu n'a rien du tout avant ce que tu met dans la console série ? Parce que avec cette recherche https://www.qwant.com/?client=brz-moz&q=1384%2C+room+16 ça amène à un plantage du NodeMCU, mais le serveur semble répondre malgré tout, donc, c'est étrange hmm

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#3 31-01-2019 19:19:40

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

mon premier programme .

bon , faut être honnête aussi , fabriqué avec des bouts de code chipés sur deux - trois  programmes .


/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Blink
*/

// the setup function runs once when you press reset or power the board
#define LED 5                                   // LED Externe  en D1 (gpio5)
#define BUTTON 4                                // Button en D2 (gpio4)

int switchState = 0 ;                           // valeur actuelle du pin 4
int oldSwitchState = 0 ;                        // dernière valeur du pin 4
int lightsOn = 0 ;                              // switch on = 1 ou off = 0

void setup() {
  // initialisations BUTTON et LEDs
  pinMode(BUTTON, INPUT);       // pressez bouton  
  pinMode(LED, OUTPUT);      // LED Externe en OUTPUT
  pinMode(LED_BUILTIN, OUTPUT); // LED Interne en OUTPUT
}

// 'loop' boucle éternelle
void loop() {
  switchState = digitalRead(BUTTON); // lecture état pushButton
  if (switchState != oldSwitchState) // capte le changement
  {
  oldSwitchState = switchState;
  if (switchState == HIGH)
  {
  // Toggle
  lightsOn = !lightsOn;
  }
  }
  if(lightsOn)
  {

  // si impulsion bouton on , alors on fait clignoter les diodes  
  digitalWrite(LED_BUILTIN,HIGH);  // led interne off
  digitalWrite(LED,HIGH);          // led externe on
  delay(1000);                     // wait for a second
  digitalWrite(LED_BUILTIN,LOW);   // led intégrée allumée
  digitalWrite(LED,LOW);           // led  externe off
  delay(1000);                     // attendre une seconde
  } else {

  // si impulsion bouton off , on fixe les voyants allumés  
  digitalWrite(LED_BUILTIN,LOW);   // led intégrée on
  digitalWrite(LED,HIGH);          // led externe on
  }
}
 



et çà fonctionne !!

Hors ligne

#4 31-01-2019 21:27:15

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

essai avec le programme exemple "WiFiManualWebServer"

je l'ai légèrement modifié .
j'ai rajouté quelques "serial.println" à certains endroits pour mieux le comprendre .


/*
    This sketch demonstrates how to set up a simple HTTP-like server.
    The server will set a GPIO pin depending on the request
      http://server_ip/gpio/0 will set the GPIO2 low,
      http://server_ip/gpio/1 will set the GPIO2 high
    server_ip is the IP address of the ESP8266 module, will be
    printed to Serial when the module is connected.
*/

#include <ESP8266WiFi.h>

#ifndef STASSID
#define STASSID "Bbox-xxxxxxxx"
#define STAPSK  "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#endif

const char* ssid = STASSID;
const char* password = STAPSK;

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
  Serial.begin(115200);

  // prepare LED
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, 0);

  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print(F("Connecting to "));
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(F("."));
  }
  Serial.println();
  Serial.println(F("WiFi connected"));

  // Start the server
  server.begin();
  Serial.println(F("Server started"));

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  Serial.println(F("new client"));

  client.setTimeout(5000); // default is 1000

  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(F("request: "));
  Serial.println(req);

  // Match the request
  Serial.println("quelle est la requète ?");
  int val;
  if (req.indexOf(F("/gpio/0")) != -1) {
    val = 1;
    Serial.println(" demande d'extinction de la led ");
  } else if (req.indexOf(F("/gpio/1")) != -1) {
    val = 0;
    Serial.println(" demande d'allumage de la led");
  } else {
    Serial.println(F("invalid request"));
    val = digitalRead(LED_BUILTIN);
  }

  // Set LED according to the request
  digitalWrite(LED_BUILTIN, val);
  Serial.println(" on réponds à la requète ");
  // read/ignore the rest of the request
  // do not client.flush(): it is for output only, see below
  while (client.available()) {
    // byte by byte is not very efficient
    client.read();
  }

  // Send the response to the client
  // it is OK for multiple small client.print/write,
  // because nagle algorithm will group them into one single packet
  Serial.println("envoi de la page web au client");
  client.print(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now "));
  client.print((val) ? F("high") : F("low"));
  client.print(F("<br><br>Click <a href='http://"));
  client.print(WiFi.localIP());
  client.print(F("/gpio/1'>here</a> to switch LED GPIO on, or <a href='http://"));
  client.print(WiFi.localIP());
  client.print(F("/gpio/0'>here</a> to switch LED GPIO off.</html>"));

  // The client will actually be *flushed* then disconnected
  // when the function returns and 'client' object is destroyed (out-of-scope)
  // flush = ensure written data are received by the other side
  Serial.println(F("Disconnecting from client"));
}
 



je commence à peine à le décortiquer .

console série :

21:08:43.754 ->  1384, room 16
21:08:43.754 -> tail 8
21:08:43.754 -> chksum 0x2d
21:08:43.754 -> csum 0x2d
21:08:43.754 -> v21db8fc9
21:08:43.754 -> ~ld

21:08:48.886 -> new client
21:08:48.886 -> request:
21:08:48.886 -> GET /gpio/0 HTTP/1.1
21:08:48.886 -> quelle est la requète ?
21:08:48.886 ->  demande d'extinction de la led
21:08:48.886 ->  on réponds à la requète
21:08:48.886 -> envoi de la page web au client
21:08:48.919 -> Disconnecting from client

21:08:48.952 -> new client
21:08:48.952 -> request:
21:08:48.952 -> GET /favicon.ico HTTP/1.1
21:08:48.952 -> quelle est la requète ?
21:08:48.952 -> invalid request
21:08:48.952 ->  on réponds à la requète
21:08:48.952 -> envoi de la page web au client
21:08:48.952 -> Disconnecting from client

21:09:05.471 -> new client
21:09:05.769 -> request:
21:09:05.769 -> GET /gpio/1 HTTP/1.1
21:09:05.769 -> quelle est la requète ?
21:09:05.769 ->  demande d'allumage de la led
21:09:05.802 ->  on réponds à la requète
21:09:05.802 -> envoi de la page web au client
21:09:05.802 -> Disconnecting from client

21:09:05.835 -> new client
21:09:05.835 -> request:
21:09:05.835 -> GET /favicon.ico HTTP/1.1
21:09:05.835 -> quelle est la requète ?
21:09:05.835 -> invalid request
21:09:05.835 ->  on réponds à la requète
21:09:05.835 -> envoi de la page web au client
21:09:05.868 -> Disconnecting from client
 



1548965743.png

un exemple qui fonctionne , enfin ...

reste à savoir , qui est le serveur , ici ? et qui est le client ?

en gros , qui fait quoi ? (je me doute de la réponse mais , justement , dans le doute ...)

apparemment , le serveur , c'est le node et le client , c'est le navigateur ...

le serveur demande une requète au client

que celui ci lui envoie en demandant au choix d'allumer ou d'éteindre la diode .

c'est çà ?

Dernière modification par Debian Alain (31-01-2019 21:30:54)

Hors ligne

#5 31-01-2019 21:35:16

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

Debian Alain a écrit :

apparemment , le serveur , c'est le node et le client , c'est le navigateur ...

C'est ça, le client, c'est celui qui demande, et qui reçoit la page. Le serveur c'est celui qui la donne (il fait cuistot aussi en l’occurrence, c'est le serveur qui prépare la page aussi tongue ).

Encore une fois, c'est l'intégralité de la sortie de la console série ça ?


Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#6 31-01-2019 21:57:45

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

Encore une fois, c'est l'intégralité de la sortie de la console série ça ?

ben oui  wink) .
mais je l'ai mise en page .

il manque le "void setup" qui ne passe pas à tous les coups (pas toujours à vrai dire) dans le moniteur .

par ailleurs , sais tu où je pourrai trouver le support (arduino I.D.E.)  du GEEKCREIT  DOIT ESP-F DEVKIT V4 ?

Hors ligne

#7 31-01-2019 22:05:04

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

Debian Alain a écrit :

il manque le "void setup" qui ne passe pas à tous les coups (pas toujours à vrai dire) dans le moniteur .

Voilà, c'est ça qui me paraît louche aussi wink Ceci-dit, ça à l'air capricieux cette petite bête de ce que j'ai lu. J'ai déjà eu plusieurs fois ce problème de plantage aussi hmm Bon, ceci-dit ça semble fonctionner ensuite yes.gif

Debian Alain a écrit :

par ailleurs , sais tu où je pourrai trouver le support (arduino I.D.E.)  du GEEKCREIT  DOIT ESP-F DEVKIT V4 ?

Non hmm


Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#8 01-02-2019 10:54:54

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

j'ai modifié mon petiti programme .

maintenant , en plus , j'affiche la température et l'humidité dans la console série .

c'est pas tout à fait ce que je voulais mais on avance . c'est déjà çà ...

voilà le programme

/*
    This sketch demonstrates how to set up a simple HTTP-like server.
    The server will set a GPIO pin depending on the request
      http://server_ip/gpio/0 will set the GPIO2 low,
      http://server_ip/gpio/1 will set the GPIO2 high
    server_ip is the IP address of the ESP8266 module, will be
    printed to Serial when the module is connected.
*/

// librairies :
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <dht.h>

// initialisations :
#ifndef STASSID
#define STASSID "Bbox-9F38B11F"
#define STAPSK  "5556E12CFF4553C1E734A347636EF6"
#endif
#define DHT11_PIN D3
dht DHT;

const char* ssid = STASSID;
const char* password = STAPSK;

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
  Serial.begin(115200);

  // prepare LED
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, 0);

  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print(F("Connecting to "));
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(F("."));
  }
  Serial.println();
  Serial.println(F("WiFi connected"));

  // Start the server
  server.begin();
  Serial.println(F("Server started"));

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {
 
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  Serial.println(F("new client"));

  client.setTimeout(5000); // default is 1000

  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(F("request: "));
  Serial.println(req);

  // Match the request

   // serial println avec dht 11
   // test dht_11
   //lecture capteur
   int chk = DHT.read11(DHT11_PIN);
  // affichage données
  Serial.print("Command is : [");
  Serial.println(" is to show temperature!] ");
  Serial.print(" Temp is: " );
  Serial.print(DHT.temperature);
  Serial.println(" ° C. Degrés Celcius");
   
  Serial.print("Command is : [");
  Serial.println("to show humidity!]");
  Serial.print(" Humidity is: " );
  Serial.print(DHT.humidity);
  Serial.println(" % pour cent ");  

  Serial.println("quelle est la requète ?");
  int val;
  if (req.indexOf(F("/gpio/0")) != -1) {
    val = 1;
    Serial.println(" demande d'extinction de la led ");
  } else if (req.indexOf(F("/gpio/1")) != -1) {
    val = 0;
    Serial.println(" demande d'allumage de la led");
  } else {
    Serial.println(F("invalid request"));
    val = digitalRead(LED_BUILTIN);
  }

  // Set LED according to the request
  digitalWrite(LED_BUILTIN, val);
  Serial.println(" on réponds à la requète ");
  // read/ignore the rest of the request
  // do not client.flush(): it is for output only, see below
  while (client.available()) {
    // byte by byte is not very efficient
    client.read();
  }

  // Send the response to the client
  // it is OK for multiple small client.print/write,
  // because nagle algorithm will group them into one single packet
  Serial.println("envoi de la page web au client");
  client.print(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now "));
  client.print((val) ? F("high") : F("low"));
  client.print(F("<br><br>Click <a href='http://"));
  client.print(WiFi.localIP());
  client.print(F("/gpio/1'>here</a> to switch LED GPIO on, or <a href='http://"));
  client.print(WiFi.localIP());
  client.print(F("/gpio/0'>here</a> to switch LED GPIO off.</html>"));

  // The client will actually be *flushed* then disconnected
  // when the function returns and 'client' object is destroyed (out-of-scope)
  // flush = ensure written data are received by the other side
  Serial.println(F("Disconnecting from client"));
}



console série :
pas mal pour une fois .

10:44:28.187 ->  1384, room 16
10:44:28.187 -> tail 8
10:44:28.187 -> chksum 0x2d
10:44:28.187 -> csum 0x2d
10:44:28.187 -> v21db8fc9
10:44:28.187 -> ~ld
10:44:28.218 ->
10:44:28.218 ->
10:44:28.218 -> Connecting to Bbox-xxxxxxxx
10:44:28.748 -> .
10:44:28.748 -> WiFi connected
10:44:28.748 -> Server started
10:44:28.748 -> 192.168.1.70

10:44:37.464 -> new client
10:44:37.464 -> request:
10:44:37.464 -> GET /gpio/0 HTTP/1.1
10:44:37.464 -> Command is : [ is to show temperature!]
10:44:37.464 ->  Temp is: 26.00 ° C. Degrés Celcius
10:44:37.497 -> Command is : [to show humidity!]
10:44:37.497 ->  Humidity is: 29.00 % pour cent
10:44:37.497 -> quelle est la requète ?
10:44:37.497 ->  demande d'extinction de la led
10:44:37.497 ->  on réponds à la requète
10:44:37.497 -> envoi de la page web au client
10:44:37.497 -> Disconnecting from client

10:44:37.530 -> new client
10:44:37.530 -> request:
10:44:37.530 -> GET /favicon.ico HTTP/1.1
10:44:37.563 -> Command is : [ is to show temperature!]
10:44:37.563 ->  Temp is: 26.00 ° C. Degrés Celcius
10:44:37.563 -> Command is : [to show humidity!]
10:44:37.563 ->  Humidity is: 29.00 % pour cent
10:44:37.563 -> quelle est la requète ?
10:44:37.563 -> invalid request
10:44:37.596 ->  on réponds à la requète
10:44:37.596 -> envoi de la page web au client
10:44:37.596 -> Disconnecting from client

10:44:50.332 -> new client
10:44:50.630 -> request:
10:44:50.630 -> GET /gpio/1 HTTP/1.1
10:44:50.663 -> Command is : [ is to show temperature!]
10:44:50.663 ->  Temp is: 26.00 ° C. Degrés Celcius
10:44:50.663 -> Command is : [to show humidity!]
10:44:50.663 ->  Humidity is: 29.00 % pour cent
10:44:50.663 -> quelle est la requète ?
10:44:50.696 ->  demande d'allumage de la led
10:44:50.696 ->  on réponds à la requète
10:44:50.696 -> envoi de la page web au client
10:44:50.696 -> Disconnecting from client

10:44:50.729 -> new client
10:44:50.729 -> request:
10:44:50.729 -> GET /favicon.ico HTTP/1.1
10:44:50.762 -> Command is : [ is to show temperature!]
10:44:50.762 ->  Temp is: 26.00 ° C. Degrés Celcius
10:44:50.762 -> Command is : [to show humidity!]
10:44:50.762 ->  Humidity is: 29.00 % pour cent
10:44:50.762 -> quelle est la requète ?
10:44:50.762 -> invalid request
10:44:50.762 ->  on réponds à la requète
10:44:50.762 -> envoi de la page web au client
10:44:50.795 -> Disconnecting from client
 



bon , je vous passe la page html , elle n'a pas bougé .

mais j'ai un souci : comment afficher en html les données du capteur dht11 ?

en série , j'y arrive , mais en html , j'ai pas encore trouvé ....

Hors ligne

#9 01-02-2019 12:47:26

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

Tu sais où se passe l'envoie de langage HTML puisque tu l'indique sur la console série. Il ne te reste plus qu'à décortiquer ce qui se passe à cet endroit là, et tu trouveras ta réponse tout seul wink

Note que la page change lorsque la LED change d'etat, tu pourrais t'inspirer de la manière dont c'est fait. Pour t'aider un peu aussi, la structure conditionnelle qui détermine quel texte afficher en fonction de la valeur de la variable val s'appelle un ternaire wink

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#10 01-02-2019 12:58:37

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

oui mais (val) , c'est une variable binaire logique , booléenne .

DHT , ici , contient des valeurs numériques , des suites de nombres ....

donc , comment faire ?

Hors ligne

#11 01-02-2019 13:45:01

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

Ah, tu vois écris 0 ou 1 pour l'État de ta LED et pas low ou high ? wink

Par ailleurs, qu'est ce qu'une page HTML ? C'est du texte dont une partie est interprété par le navigateur pour faire la.mise en page (les balises). Construire une page, c'est donc construire une chaîne textuelle (qu'on appelle aussi chaîne de caractères).

Ta sortie sur la.console série, c'est du texte aussi. Note la similitude de la syntaxe entre ce qui imprime du texte sur la console série et ce qui imprime du texte sur le navigateur (au fait, en anglais imprimer se dit print  wink )

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#12 01-02-2019 13:49:43

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

ouf ! j'y suis arrivé !

plus qu'un petit souci de francisation mineur et c'est terminé ....

voilà , j'y suis arrivé  .

merci pour ton soutien bendia .


/*
    This sketch demonstrates how to set up a simple HTTP-like server.
    The server will set a GPIO pin depending on the request
      http://server_ip/gpio/0 will set the GPIO2 low,
      http://server_ip/gpio/1 will set the GPIO2 high
    server_ip is the IP address of the ESP8266 module, will be
    printed to Serial when the module is connected.
*/

// librairies :
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <dht.h>

// initialisations :
#ifndef STASSID
#define STASSID "Bbox-9F38B11F"
#define STAPSK  "5556E12CFF4553C1E734A347636EF6"
#endif
#define DHT11_PIN D3
dht DHT;

const char* ssid = STASSID;
const char* password = STAPSK;

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
  Serial.begin(115200);

  // prepare LED
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, 0);

  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print(F("Connecting to "));
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(F("."));
  }
  Serial.println();
  Serial.println(F("WiFi connected"));

  // Start the server
  server.begin();
  Serial.println(F("Server started"));

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {
 
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  Serial.println(F("new client"));

  client.setTimeout(5000); // default is 1000

  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(F("request: "));
  Serial.println(req);

  // Match the request

   // serial println avec dht 11
   // test dht_11
   //lecture capteur
   int chk = DHT.read11(DHT11_PIN);
  // affichage données
  Serial.print("Command is : [");
  Serial.println(" is to show temperature!] ");
  Serial.print(" Temp is: " );
  Serial.print(DHT.temperature);
  Serial.println(" ° C. Degrés Celcius");
   
  Serial.print("Command is : [");
  Serial.println("to show humidity!]");
  Serial.print(" Humidity is: " );
  Serial.print(DHT.humidity);
  Serial.println(" % pour cent ");  

  Serial.println("quelle est la requète ?");
  int val;
  if (req.indexOf(F("/gpio/0")) != -1) {
    val = 1;
    Serial.println(" demande d'extinction de la led ");
  } else if (req.indexOf(F("/gpio/1")) != -1) {
    val = 0;
    Serial.println(" demande d'allumage de la led");
  } else {
    Serial.println(F("invalid request"));
    val = digitalRead(LED_BUILTIN);
  }

  // Set LED according to the request
  digitalWrite(LED_BUILTIN, val);
  Serial.println(" on réponds à la requète ");
  // read/ignore the rest of the request
  // do not client.flush(): it is for output only, see below
  while (client.available()) {
    // byte by byte is not very efficient
    client.read();
  }

  // Send the response to the client
  // it is OK for multiple small client.print/write,
  // because nagle algorithm will group them into one single packet
  Serial.println("envoi de la page web au client");
  client.print(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO est maintenant "));
  client.println((val) ? F(" eteint") : F(" allume"));

  client.print("<br><br>");
  client.print("  la temperature est de  : ");
  client.print(DHT.temperature);
  client.print(" C. Degres Celcius ");
  client.print("<br><br>le taux d'humidite est de : ");
  client.print(DHT.humidity);
  client.print(" % pour cent ");
 
  client.print(F("<br><br>Cliquez  <a href='http://"));
  client.print(WiFi.localIP());
  client.print(F("/gpio/1'> ici </a> pour allumer la LED Integree , or <a href='http://"));
  client.print(WiFi.localIP());
  client.print(F("/gpio/0'> ici </a> pour l'eteindre . </html>"));

  // The client will actually be *flushed* then disconnected
  // when the function returns and 'client' object is destroyed (out-of-scope)
  // flush = ensure written data are received by the other side
  Serial.println(F("Disconnecting from client"));
}
 




le moniteur (ou la console) série :

13:41:53.857 ->  1384, room 16
13:41:53.857 -> tail 8
13:41:53.857 -> chksum 0x2d
13:41:53.857 -> csum 0x2d
13:41:53.857 -> v21db8fc9
13:41:53.857 -> ~ld

13:41:59.551 -> new client
13:41:59.949 -> request:
13:41:59.949 -> GET /gpio/1 HTTP/1.1
13:41:59.982 -> Command is : [ is to show temperature!]
13:41:59.982 ->  Temp is: 26.00 ° C. Degrés Celcius
13:41:59.982 -> Command is : [to show humidity!]
13:41:59.982 ->  Humidity is: 26.00 % pour cent
13:41:59.982 -> quelle est la requète ?
13:41:59.982 ->  demande d'allumage de la led
13:41:59.982 ->  on réponds à la requète
13:42:00.015 -> envoi de la page web au client
13:42:00.015 -> Disconnecting from client

13:42:00.058 -> new client
13:42:00.379 -> request:
13:42:00.379 -> GET /favicon.ico HTTP/1.1
13:42:00.379 -> Command is : [ is to show temperature!]
13:42:00.379 ->  Temp is: 26.00 ° C. Degrés Celcius
13:42:00.412 -> Command is : [to show humidity!]
13:42:00.412 ->  Humidity is: 26.00 % pour cent
13:42:00.412 -> quelle est la requète ?
13:42:00.412 -> invalid request
13:42:00.412 ->  on réponds à la requète
13:42:00.412 -> envoi de la page web au client
13:42:00.412 -> Disconnecting from client

13:42:11.440 -> new client
13:42:11.440 -> request:
13:42:11.440 -> GET /gpio/0 HTTP/1.1
13:42:11.440 -> Command is : [ is to show temperature!]
13:42:11.440 ->  Temp is: 26.00 ° C. Degrés Celcius
13:42:11.473 -> Command is : [to show humidity!]
13:42:11.473 ->  Humidity is: 30.00 % pour cent
13:42:11.473 -> quelle est la requète ?
13:42:11.473 ->  demande d'extinction de la led
13:42:11.473 ->  on réponds à la requète
13:42:11.473 -> envoi de la page web au client
13:42:11.473 -> Disconnecting from client

13:42:11.506 -> new client
13:42:11.506 -> request:
13:42:11.506 -> GET /favicon.ico HTTP/1.1
13:42:11.539 -> Command is : [ is to show temperature!]
13:42:11.539 ->  Temp is: 26.00 ° C. Degrés Celcius
13:42:11.539 -> Command is : [to show humidity!]
13:42:11.539 ->  Humidity is: 30.00 % pour cent
13:42:11.539 -> quelle est la requète ?
13:42:11.539 -> invalid request
13:42:11.572 ->  on réponds à la requète
13:42:11.572 -> envoi de la page web au client
13:42:11.572 -> Disconnecting from client

13:42:15.845 -> new client
13:42:16.242 -> request:
13:42:16.242 -> GET /gpio/1 HTTP/1.1
13:42:16.276 -> Command is : [ is to show temperature!]
13:42:16.276 ->  Temp is: 26.00 ° C. Degrés Celcius
13:42:16.276 -> Command is : [to show humidity!]
13:42:16.276 ->  Humidity is: 30.00 % pour cent
13:42:16.276 -> quelle est la requète ?
13:42:16.276 ->  demande d'allumage de la led
13:42:16.276 ->  on réponds à la requète
13:42:16.276 -> envoi de la page web au client
13:42:16.309 -> Disconnecting from client

13:42:16.342 -> new client
13:42:16.342 -> request:
13:42:16.342 -> GET /favicon.ico HTTP/1.1
13:42:16.342 -> Command is : [ is to show temperature!]
13:42:16.375 ->  Temp is: 26.00 ° C. Degrés Celcius
13:42:16.375 -> Command is : [to show humidity!]
13:42:16.375 ->  Humidity is: 30.00 % pour cent
13:42:16.375 -> quelle est la requète ?
13:42:16.375 -> invalid request
13:42:16.375 ->  on réponds à la requète
13:42:16.375 -> envoi de la page web au client
13:42:16.375 -> Disconnecting from client
 



copie d'écran :
1549025098.png


voilà , reste plus qu'à affiner la conception ( régulateurs de tension)
et à préparer  la mise en production (circuit imprimé , boîtier , pile ... )

par contre , pour l'alim , je me pose la question :

présentement , la carte est alimentée en usb , donc 5 volts .
on peut l'alimenter par la broche Vin également (théorie 20 Volts maxi , en pratique , ne pas dépasser 9 V. , à ce que j'ai appris)
je dispose d'un boitier 4X AAA soit 6 volts .

on peut aussi l'alimenter  en 3.3 volts (V.nominal) avec un régulateur de tension ...

je ne sais pas trop quoi faire ....

je pourrai mettre les piles sur le V.in .
ce serait bien aussi .

Dernière modification par Debian Alain (01-02-2019 14:44:33)

Hors ligne

#13 01-02-2019 14:55:31

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

Bravo, c'est toi qui a dépanné tout seul, je ne t'ai donné aucune solution toute faite wink

Tu peux t'exercer à faire la même chose avec l'autre bibliothèque. Elle a l'avantage de gérer plus facilement les requêtes les données reçues via les méthodes POST et GET si c'est nécessaire (pour transmettre des informations de ton navigateur au programme de l'ESP).

Par contre, cela détail un peu moins la salade interne a réaliser pour coder un serveur.

Une autre chose que tu pourrais essayer de faire aussi est de créer une chaîne de caractère, et l'envoyer en une seule fois (avec un simple client.print) . Pour une petite page, la méthode utilisée là ne pose pas trop d'inconvénients, mais pour une page plus complexe, c'est vite illisible (et donc compliqué à dépanner).

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#14 01-02-2019 15:22:49

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

bendia a écrit :

Bravo, c'est toi qui a dépanné tout seul, je ne t'ai donné aucune solution toute faite


tu m'as un peu guidé qd mme ... non ?

bendia a écrit :

Tu peux t'exercer à faire la même chose avec l'autre bibliothèque.


à laquelle tu penses ?

bendia a écrit :

Elle a l'avantage de gérer plus facilement les requêtes les données reçues via les méthodes POST et GET si c'est nécessaire (pour transmettre des informations de ton navigateur au programme de l'ESP).

doucement , doucement ... je ne suis que au début  ^^

et puis "serial.print" ou "client.print" , çà me suffit pour l'instant .

bendia a écrit :

Une autre chose que tu pourrais essayer de faire aussi est de créer une chaîne de caractère, et l'envoyer en une seule fois (avec un simple client.print) . Pour une petite page, la méthode utilisée là ne pose pas trop d'inconvénients, mais pour une page plus complexe, c'est vite illisible (et donc compliqué à dépanner).

Hé je veux bien , mais comment tu crées une variable en arduino ?
comment tu lui attribues une valeur , un type ?

jusqu'ici , j'ai procédé par déductions , un peu à tâtons .

par ailleurs , je viens d'essayer d'alimenter  l' ESP sur son V.in avec des piles (donc 6 volts (4x1.5V.)) :

pas de réseau  , pas de led interne . la broche D1 alimentée par défaut (donc les autres aussi , je pense) .

je crois qu'il me faudrait un régulateur de tension en 3.3 Volts .

qu'en pensez vous ?

Hors ligne

#15 01-02-2019 15:38:05

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

Je t'ai guidé, mais je ne t'ai pas donné de solution. Donc tu es sur la voie de l'autonomie wink

La bibliothèque est ESP8266WebServer je crois. Celle du premier exemple de ton autre fil.

Pour les variables, il faut que tu mises le tuto d'Eskimon sur Zeste De Savoir wink Mais, il y a un exemple dans le programme exemple de l'autre bibliothèque smile

Debian Alain a écrit :


je pourrai mettre les piles sur le V.in .
ce serait bien aussi .

attention à l'autonomie. Il faudrait mesurer à l'ampèremètre, mais ça consomme pas mal ce genre de montage. Donc, tes piles ne vont pas durer très longtemps.

Pour diminuer la consommation, il faudrait mettre la carte en veille, mais ce n'est pas compatible avec une fonction de serveur (qui attend les requêtes donc, et qui doit être réveiller pour cela).

C'est là l'intérêt de MQTT par exemple. Ton serveur (Broker en l'occurrence) est sur le secteur et sous tension en permanence, et il attend les données envoyées par l'ESP.

De son côté, l'ESP est en veille, se réveille périodiquement, et transfert des données, puis, se rendort, économisant ainsi la batterie.

Cependant, avec un NodeMCU complet, il risque d'y avoir des composants qui consomme même en veille, genre, la LED de présence tension, le régulateur de tension (qui ramène les tensions d'alimentation à la tension de fonctionnement de 3.3V).

Voilà un peu plus.d'informations sur le sujet https://ouilogique.com/test-deep-sleep-esp8266/

Il faudrait regarder sur le schéma électronique pour voir si il n'y a pas.déjà un régulateur derrière Vin.


Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#16 01-02-2019 17:43:17

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

bendia a écrit :

attention à l'autonomie. Il faudrait mesurer à l'ampèremètre, mais ça consomme pas mal ce genre de montage. Donc, tes piles ne vont pas durer très longtemps.

ouch ! , j'y pensais pas . 16.5mA environ pour une pile , c'est tant que çà ?
enfin , je veux dire , une pile supporte quelle intensité en sortie ? en moyenne ?
j'ai cru lire que la capa maxi d'une pile (ou plutôt d'un accu) estde 1500 à 2000 mAH soit , dans le meilleurs des cas ,
une durée de 100 h à 20 mA. ,
c.a.d. un peu plus de deux jours .

bendia a écrit :

Pour diminuer la consommation, il faudrait mettre la carte en veille, mais ce n'est pas compatible avec une fonction de serveur (qui attend les requêtes donc, et qui doit être réveiller pour cela).

faudrait peut être bricoler un timer (à base de 555 par ex.)  ? non ?

bendia a écrit :

Pour les variables, il faut que tu mises le tuto d'Eskimon sur Zeste De Savoir

j'ai trouvé des variables numériques et logiques mais aucune variable texte ...
-- Eskimon -- les variables arduino

Mais, il y a un exemple dans le programme exemple de l'autre bibliothèque

ha ?  tu parles de "message +="  ???

Dernière modification par Debian Alain (01-02-2019 17:58:14)

Hors ligne

#17 01-02-2019 18:48:08

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [résolu] dépannage / compréhension programmes nodemcu

Debian Alain a écrit :

ha ?  tu parles de "message +="  ???

Oui smile Tu as d'ailleurs le type de variable utilisée pour le texte lorsque la variable message est définie wink

Debian Alain a écrit :

faudrait peut être bricoler un timer (à base de 555 par ex.)  ? non ?

Puisque ce fil est résolu, on en parle dans l'autre si tu veux, mais je t'ai mis un lien juste au dessus à ce sujet smile


Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

Pied de page des forums