Auteur Sujet: BALDUINO WIFI  (Lu 37059 fois)

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1085
  • HO avec DCC++
    • Voir le profil
Re : BALDUINO WIFI
« Réponse #15 le: juillet 03, 2019, 08:44:49 am »
UDP est plus simple, cependant UDP est un protocole non fiable, certes sur un réseau local c'est très relatif, mais peut-on garantir qu'il n'y aura pas perte ou inversion de paquets. S'il faut mettre en oeuvre des contrôles alors autant utiliser TCP, d'autant plus que le débit ici sera très très faible.

Il ne s'agit pas de contrôle mais simplement d'une répétition du message comme c'est le cas sur les satellites (avec SAM) ou encore en DCC où les commandes sont répétées une dizaine de fois si je ne m'abuse. A fortiori si le débit est très faible, cela ne pose pas de problèmes à répéter le message.

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1716
    • Voir le profil
Re : BALDUINO WIFI
« Réponse #16 le: juillet 03, 2019, 08:57:01 am »
Bonjour,

J'ai fait des test longue durée sur une communication en UDP entre mon Mac et un Weimos Mini D1 (ESP8266) pour un truc qui n'a rien à voir avec le modélisme ferroviaire. Le Mac envoyait un message toutes les 10s avec un numéro d'ordre. Le Mini D1 incrémentait de son côté un compteur et le comparait avec le numéro d'ordre pour voir si un message était perdu. L'ensemble a tourné pendant 3 jours.

Résultat : 12% des messages sont perdus, ce qui est bien au dessus de ce qui est attribuable au fait que l'UDP ne fait pas d'acquittement. On va dire que la communication en UDP sur un ESP8266 marche jusqu'à un certain point mais que bon c'est très très loin d'être fiable.

Donc ne pas hésiter à répéter les messages.

Par ailleurs, j'avais aussi fait quelques tests, mais de manière plus informelle, avec un serveur http sur le même Weimos Mini D1. Le serveur répond un peu quand ça lui chante : des requêtes qui n'aboutissent pas ou qui aboutissent après un délai important. Je ne saurais dire la proportion d'échec mais c'est loin d'être négligeable. J'ai pas encore essayé les websocket.
« Modifié: juillet 03, 2019, 09:01:25 am par Jean-Luc »
Cordialement

savignyexpress

  • Invité
Re : BALDUINO WIFI
« Réponse #17 le: juillet 03, 2019, 01:37:20 pm »
Bonjour à tous,

Une application du protocole UDP est la diffusion d'un même message à plusieurs destinations (broadcast). Cela peut être utile pour détecter dynamiquement les systèmes connectés au réseau. Ensuite, une fois les systèmes connus, on peut établir des connexions TCP avec ces derniers. Dans l'IT, on voit souvent des applications à l'écoute en TCP et en UDP sur le même numéro de port.

Bonne journée et meilleures salutations.

Gorgio-arduino

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
Re : BALDUINO WIFI
« Réponse #18 le: juillet 04, 2019, 11:36:54 pm »
Bonsoir,

J'ai du mal a avancer - Je rappele que ce systeme fonctionne parfaitement en filaire.
Je souhaite remplacer les fils par des liaisons WIFI

J'ai fait un petit schéma pour bien comprendre le fonctionnement attendu.

La seule chose que j'ai réussi à faire c'est ceci

Page WEB 192.168.0.150/R (simulant un ESP BAL'C' du schéma) l'ESP BAL'B' recoit R , envoi une variable Avertissementon à son arduino et retourne AV à la page WEB
Page WEB 192.168.0.150/JV (simulant un ESP BAL'C' du schéma) l'ESP BAL'B' recoit JV , envoi une variable Avertissementoff à son arduino et retourne VL (voie libre) à la page WEB

Le reste je sais pas par quel bout le prendre. un ESP peut-il recevoir depuis 2 IP différentes sans forcément demander une requête ?

C'est peut être pas possible de faire cela en WIFI.

Si quelqu'un à un début de solution de codage (fu fu fu fu !!!!)

Ou puis-je trouver des infos sur les fonctions type server.send server.on notamment ce que doit contenir les parenthèses, j'ai fouillé sans succès (Dans les librairies?)

Bonne soirée
    #include <ESP8266WiFi.h>
    #include <WiFiClient.h>
    #include <ESP8266WebServer.h>
    #include <ESP8266mDNS.h>
    IPAddress ip(192,168,0,150);
    IPAddress gateway(192,168,0,1);
    IPAddress subnet(255,255,255,0);
    const char* ssid = "******";
    const char* password = "*****";
    ESP8266WebServer server(80);
    void setup(void){
      Serial.begin(115200);
     
      // on demande la connexion au WiFi
      WiFi.config(ip, gateway, subnet);
      WiFi.begin(ssid, password);
      Serial.println("");
      // on attend d'etre connecte au WiFi avant de continuer
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      // on affiche l'adresse IP qui nous a ete attribuee QUE J'AI CHOISI (IP fixe)
      Serial.println("");
      Serial.print("IP address: ");
      Serial.println(WiFi.localIP());
 
       
        server.on("/R", [](){
        server.send(200, "text/plain", "AV");
        Serial.println("Signal ferme");
       });
      server.on("/JV", [](){
        server.send(200, "text/plain", "VL");
        Serial.println("Signal ouvert");
      });
      // on commence a ecouter les requetes venant de l'exterieur
      server.begin();
     
    }
    void loop(void){
      // a chaque iteration, on appelle handleClient pour que les requetes soient traitees
      server.handleClient();
    }
Le code n'est pas de moi, mais je l'ai adapté à mon besoin.





« Modifié: juillet 04, 2019, 11:42:43 pm par Gorgio-arduino »

Didier44

  • Newbie
  • *
  • Messages: 43
    • Voir le profil
Re : BALDUINO WIFI
« Réponse #19 le: juillet 05, 2019, 03:12:54 pm »
Bonjour Giorgio-arduino,

Citer
Ou puis-je trouver des infos sur les fonctions type server.send server.on notamment ce que doit contenir les parenthèses, j'ai fouillé sans succès (Dans les librairies?)

server.on("/R", [](){
        server.send(200, "text/plain", "AV");
        Serial.println("Signal ferme");
});

Pour bien comprendre ce qu'il faut écrire entre les parenthèses et plus précisément entre les crochets ou les accolades fait au préalable une recherche sur les fonctions lamda.
Ce qui est écrit ci-dessus, pourrais s'écrire ainsi en plus lisible (et fonctionnant aussi bien) sans lambda:


void handle_R();

...

setup()
{
...
server.on ("/R", handle_R);     // handle_R pour "handle répondant à la commande /R" par exemple
...
}

void handle_R()
{
     .... quelquechose à faire ici !! Allumer les led d'un signal...
    server.send(200, "text/plain", "AV");
    Serial.println("Signal fermé");
}

Ceci dit il ne se passe rien dans handle_R en dehors du fait que le server renvoie un "accusé de réception".
Pour avancer un peu va voir ce site (in english) https://tttapa.github.io/ESP8266/Chap01%20-%20ESP8266.html

Gorgio-arduino

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
Re : BALDUINO WIFI
« Réponse #20 le: juillet 05, 2019, 04:00:10 pm »
Merci pour cet info sur server.on et send

J'avais déjà compris que mes variables à traiter se trouveraient après serveur.on

Maintenant je sais qu'après la virgule du server.on("*", fonction), on peut y mettre un fonction qui exécute des lignes de code , comme mettre un GPIO à 1
et le /R c'est quoi? existe -il d'autres termes  ?

Mes carences en codage me font défaut sur ce projet. Il est loin mon BASIC 2.0 du C64!

Je regarderai le lien sur l'ESP.

Merci


Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1716
    • Voir le profil
Re : BALDUINO WIFI
« Réponse #21 le: juillet 05, 2019, 04:27:11 pm »
Bonjour,

le "/R" est le chemin après l'IP.

Par exemple si le serveur est à l'IP 192.168.1.1, accéder à http://192.168.1.1/R avec ton navigateur te renverra "AV"

Ceci dit, je ne pense pas que faire tourner un serveur web pour communiquer soit la bonne solution (à vrai dire ça n'est pas du tout comme ça qu'il faut faire), il vaudrait mieux communiquer directement avec les sockets. Cherche "ESP32 socket examples" tu trouveras des tutos, par exemple : https://techtutorialsx.com/2018/05/25/esp32-socket-server-controlling-a-relay-remotely/
Cordialement

Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : BALDUINO WIFI
« Réponse #22 le: juillet 05, 2019, 04:57:49 pm »
Bonjour

Voila une ébauche de ce que pourrait être la communication entre ESP pour le BAL.

On est ici en TCP donc avec le modèle client serveur.

Chaque ESP est à la fois serveur (pour un autre ESP) sur le port 2222 et client (d'un autre ESP).

Le serveur reçoit un octet d'un ESP et le transmet à un autre ESP (trois ESP).


IPAddress ipLocal; // adresse ip du serveur local

#include <WiFi.h>

char ssid[]="WIFI MAC"; // nom du reseau
char pass[]="Ma phrase de securite"; // mot de passe WPA

WiFiServer serveur(2222); // serveur sur le port 2222
int status=WL_IDLE_STATUS; // etat connexion wifi

WiFiClient client;
IPAddress ipDistant(192,168,1,13);  // adresse ip du serveur distant

void setup() {
  Serial.begin(9600);
   Serial.println("Essai de connexion wifi");
  while (status!=WL_CONNECTED) { // connexion wifi
    status=WiFi.begin(ssid, pass);
    delay(5000);
  }
  Serial.println("Serveur connecte wifi");
  serveur.begin(); // demarrage du, serveur
  ipLocal=WiFi.localIP(); // obtention de l'adresse ip du serveur
  serveur.begin(); // demarrage du serveur 2222
  Serial.println(ipLocal);

  while (!client.connect(ipDistant,2222)) { Serial.print("."); delay(100); }
  Serial.println();
  Serial.println("Client connecte au serveur distant 2222");
  Serial.println(ipDistant);
 
  Serial.println("Attente de connexion au serveur local 2222");
}

void loop() {   
  WiFiClient clientDuServeur=serveur.available(); // test si clientDuServeur connecte
  if (clientDuServeur) { unsigned char data; int color; // clientDuServeur connecte
    Serial.println("Client connecte au serveur local 2222");
    while (clientDuServeur.connected()) { // boucle de traitement
     
      if (client.available()>=1) {
        data=client.read();
        Serial.print((int)data); Serial.print(" ");
        clientDuServeur.write(data);
      }
     
      delay(100);
   }
   Serial.println("Client deconnecte au serveur local 2222");   
   clientDuServeur.stop(); // clientDuServeur deconnecte
  }
}

C'est assez difficile à comprendre, mais cela fonctionne bien (sur un ESP32), avec un Mac pour simuler les deux autre ESP (je n'ai qu'un ESP32).
Ce n'est pas complètement au point s'il y a des déconnections entre les clients et les serveurs.

Cordialement

Pierre

PS fait petite correction sur les n° de port 22 est devenu 2222 (le port 22 n'est pas utilisable sur Mac).
« Modifié: juillet 06, 2019, 10:33:58 am par Pierre59 »

Gorgio-arduino

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
Re : BALDUINO WIFI
« Réponse #23 le: juillet 06, 2019, 11:20:22 am »
Bonjour,

Après plusieurs  très longues soirées, le principe de fonctionnement est OK
 
Je suis tombé au grès de mes recherche sur le site  easycoding.tn (et là c'est bingo pour moi)
Ce qui m'a permis de m'affranchir du codage

Le principe que je recherchai est en fait pas si complexe que je l'imaginai.

Si l'ESP reçoit BalR (venant du N+1), il affiche "Recu Rouge" et ici je pourrai envoyer un variable vers l'Arduino NANO via une liaison série pour mettre de BAL au Jaune
Comme le BAL N était au rouge et passe au jaune, il envoi à l'ESP N-1 (ip192.168.0.150) BalJ, qui mettra le BAL N-1 en Voie libre.

Voila, je ne clôture pas ce sujet car je communiquerai sur le passage de mon réseau du filaire vers le WIFI. puisque j'en ai à présent le principe.
Reste à mettre en vis à vis, les ARDUINO NANO de contrôle BAL avec les ESP qui leurs seront associés.

Je reste à votre écoute, bon gré , un départ en vacances imminent. 8)

Un grand merci à ceux qui ont participé à ce post, j'ai lu plein de choses intéressantes dans vos commentaires. ;)

Georges


« Modifié: juillet 06, 2019, 11:28:59 am par Gorgio-arduino »

Gorgio-arduino

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
Re : BALDUINO WIFI
« Réponse #24 le: juillet 13, 2019, 12:22:30 am »
Bonsoir,

C'est fait, le BAL en WIFI, ça marche, et ça ouvre des perspectives de réalisation de réseau modulaire avec très peu de câbles.
C'est idéal pour faire un réseau démontable. Il suffira d'amener sur chaque module du 5v et du 12V
Et je vous parle même pas des commandes d’aiguille avec servo , pareil du 5V un arduino wifi c'est tout
le pilotage des appareils de voies et de décor peuvent même se faire avec une tablette, puisque tout se pilote avec des variables.
Je ferais ce WE une vidéo du BAL WIFI qui m'a servi pour réaliser la mise au point.
Cout d'un BAL WIFI avec Feu imprimé 3D , environ 10 euros. (Nano + ESP-01)

Bonne nuit.



nopxor

  • Full Member
  • ***
  • Messages: 195
    • Voir le profil
Re : BALDUINO WIFI
« Réponse #25 le: juillet 13, 2019, 12:04:44 pm »
Bonjour Georges,

Peux tu publier le code arduino que tu as utilisé finalement pour les ESP ?

Gorgio-arduino

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
Re : BALDUINO WIFI
« Réponse #26 le: juillet 13, 2019, 08:34:27 pm »
Bonsoir,
1- Comme expliquer auparavant, j'ai simulé le bal N+1 par envoi de commande depuis un navigateur Exemple http://192.168.0.151/ICr qui commande l'Arduino nano de passe au Carré  "ICr"= Interrupteur cmd Carré On ; "Icr"= Interrupteur Carré Off.
Ce que fait l'ESP-01 c'est uniquement recevoir les cmd depuis HTTP est de les envoyer vers l'Arduino sous forme de txt via une liaison série, et en fonction des textes reçu le BAL se mets au rouge , au jaune ,Marche réduite , enfin tout ce qu'un feu SNCF peu signaler

2- Il faut que je m’attelle à présent à renvoyer des ordres d’état du BAL (Arduino Nano) vers son ESP qui enverra un texte type ("LRoV1" pour LED ROUGE on VOIE 1 'Allumer'), ce qui ordonnerra au BAL N-1 de se mettre au jaune. MAIS CA C'EST PAS ENCORE FAIT.
Ce ne sera qu'un texte lu sur le port série de l'ESP. Ce texte sera envoyé via un IP vers un autre BAL

Plutôt que du code , voici le logigramme établi sous TUNIOT (http://easycoding.tn/tuniot/demos/code/?lang=fr)
Vous pouvez le reproduire et visualiser ainsi le code que vous aurez copier dans l'IDE ARDUINO
En prime une petite photo du montage réaliser avec un BAL imprimer 3D mais cassé (Il me sert de BANC TEST)


« Modifié: juillet 13, 2019, 09:22:31 pm par Gorgio-arduino »