241
Trucs & astuces / Re : trouver le nom du programme en cours d’exécution
« le: janvier 09, 2020, 01:03:42 pm »
On peut aussi avoir la date et l'heure : __DATE__ et __TIME__
Pierre59
Pierre59
Le forum LOCODUINO est consacré aux discussions ayant trait à l'utilisation de l'Arduino dans les automatismes et les animations pour le train miniature. Nous avons eu récemment quelques inscriptions de personnes ayant des projets plus généraux mais surtout inapplicables au train miniature. Si votre projet ou vos questions ne concernent pas le modélisme ferroviaire, ne vous inscrivez pas, vous perdriez votre temps et nous aussi.
Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.
(le fantasme c'est d'avoir un suivi des trains qui permet de mélanger les 2 modes. Pour chaque canton -ou circuit de voie - il y aurait un booster qui commute d'un mode sur l'autre si besoin, en assurant la détection et la rétrosignalisation)Le fantasme est autorisé sur son réseau personnel, si ça permet de se faire plaisir, mais les problèmes qui pourraient en résulter ne seront pas toujours à partager.
Le choix d'un optocoupleur avec diodes tête bêche, permet d'utiliser ce schéma aussi bien en analogique (dans les deux sens du train) qu'en numérique (...)pas aussi bien, en analogique le courant est coupé à l'arrêt, ce détecteur ne fonctionne pas
de + la chute de tension de 1,4v peut s'avérer gênante
... pour dire que si quelqu'un a une solution pour palier, je suis (on est) preneur
je n'ai pas pu ou su récupérer le schéma de montage proposé par Pierre ( est ce possible de me le renvoyer)
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
}
}
Pour faire communiquer plusieurs modules, il est sûrement plus simple d'utiliser une communication basée sur le protocole UDP plutôt que TCP.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.
J'ai juste besoin de faire passer l’état d'une variable d'un ESP à un autre.
Dans mon cas pour un BAL: Si le BAL et sémaphore ou carré alors envoyer au BAL précédent "un truc" qui lui dit de se mettre au jaune , c'est tout.
ce que j'aimerai faire, c'est de remplacer une liaison série TX RX qui véhicule les variables d’état entre 2 Arduino par une liaison wifi.
// LCD 320x240
// 16 bit/pixel color order (R:5-bit, G:6-bit, B:5-bit), 65,536 colors
IPAddress ip; // adresse ip du serveur
#include <WiFi.h>
#include <M5Stack.h>
#include "Affichage.h"
char ssid[]="WIFI MAC"; // nom du reseau
char pass[]="Ma phrase de securite"; // mot de passe WPA
WiFiServer server(22); // serveur sur le port 22
int status=WL_IDLE_STATUS; // etat connexion wifi
void setup() {
M5.begin();
afficher(false,false);
while (status!=WL_CONNECTED) { // connexion wifi
status=WiFi.begin(ssid, pass);
delay(5000);
}
server.begin(); // demarrage du serveur (config)
ip=WiFi.localIP(); // obtention de l'adresse ip du serveur
afficher(true,false);
}
void loop() {
WiFiClient client=server.available(); // test si client connecte
if (client) { byte data; int color; // client connecte
afficher(true,true);
while (client.connected()) { // boucle de traitement
data=M5.BtnA.read()*4+M5.BtnB.read()*2+M5.BtnC.read(); // lecture des boutons
client.write(data); // envoi au client
boutons(data);
delay(100);
}
afficher(true,false);
client.stop(); // client deconnecte
}
}
void afficher(boolean b1,boolean b2) { // affichage des messages
M5.Lcd.setTextColor(BLACK);
M5.Lcd.setTextFont(4);
M5.Lcd.fillScreen(WHITE);
M5.Lcd.setCursor(25,50);
if (!b1) {
M5.Lcd.print("Connexion WIFI ...");
return;
}
else {
M5.Lcd.print("Serveur : ");
M5.Lcd.print(ip);
}
if (b2) {
M5.Lcd.setTextColor(RED);
M5.Lcd.setCursor(25,100);
M5.Lcd.print("Client connecte");
}
}
void boutons(byte data) { int color; // affichage des boutons
if ((data&4)!=0) color=BLACK; else color=WHITE;
M5.Lcd.fillRoundRect(35,165,60,40,4,color);
if ((data&2)!=0) color=BLACK; else color=WHITE;
M5.Lcd.fillRoundRect(35+35+60,165,60,40,4,color);
if ((data&1)!=0) color=BLACK; else color=WHITE;
M5.Lcd.fillRoundRect(35+35+35+60+60,165,60,40,4,color);
}