Auteur Sujet: projet centrale "LaBox" wifi DCC++ Can  (Lu 555074 fois)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : Re : projet centrale wifi DCC++ Can
« Réponse #270 le: août 30, 2020, 05:22:11 pm »
Pour le 12V :
Il semble que ce que j’ai constaté aussi (GPIO0 HIGH) soit un bug du bootloader non corrigé :
https://www.esp32.com/viewtopic.php?t=2205
Et qu’il peut être évité avec :
REG_WRITE(GPIO_FUNC0_OUT_SEL_CFG_REG, SIG_GPIO_OUT_IDX);

Lu sur le site d'Espressif : "Sometimes to program ESP32 via serial you must keep GPIO0 LOW during the programming process"
https://github.com/espressif/arduino-esp32
Cordialement,
Dominique

Pyk35

  • Full Member
  • ***
  • Messages: 110
    • Voir le profil
Re : projet centrale wifi DCC++ Can
« Réponse #271 le: août 30, 2020, 08:39:34 pm »
Dominique, la détection de l’intensité de court-circuit fonctionne ?
A+
Cédric

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Re : projet centrale wifi DCC++ Can
« Réponse #272 le: août 30, 2020, 10:14:11 pm »
R4=3,3K, R3 = 10K

VS = (1 + R3/R4) VE
R3 = 10K
R4 = 3,3K
donc R3/R4 = 3
VS = 4 VE (gain de 4)

Avec une résistance équivalente de 0.25 ohm et ce gain de 4, on a la valeur classique de détection de la BaseStation de 1 V / A ( Ok pour ~ 5A permanent en limite)

On peut également utiliser 10K / 10K, G=2 avec une résistance de 0.5 ohm 3W ( Ok pour 2,5A permanent en limite)
Cordialement

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Re : Re : projet centrale wifi DCC++ Can
« Réponse #273 le: août 30, 2020, 10:22:27 pm »
Pour le 12V :
Il semble que ce que j’ai constaté aussi (GPIO0 HIGH) soit un bug du bootloader non corrigé :
https://www.esp32.com/viewtopic.php?t=2205
Et qu’il peut être évité avec :
REG_WRITE(GPIO_FUNC0_OUT_SEL_CFG_REG, SIG_GPIO_OUT_IDX);

Lu sur le site d'Espressif : "Sometimes to program ESP32 via serial you must keep GPIO0 LOW during the programming process"
https://github.com/espressif/arduino-esp32

La formule magique est à inclure dans le setup, donc n'intervient pas dans la phase programmation (qui suivant la direction du vent nécessite ou non d'appuyer et relâcher BOOT ou ENABLE pour se lancer)
Cordialement

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : Re : projet centrale wifi DCC++ Can
« Réponse #274 le: août 30, 2020, 11:58:14 pm »
Dominique, la détection de l’intensité de court-circuit fonctionne ?

OUI Cédric,

Dans ma version, je détecte les court-circuits dans la loop de mon programme, sans passer par DCCpp.
C'est la fonction readCurrent, ligne 185 : il n'y a pas de filtrage en cas de court-circuit, c'est plus rapide !
// A voir ce que l'on fait de cette fonction par rapport à celle de la HMI
void readCurrent() {
  float c=0.0;

// TODO TODO TODO TODO
// Short-circuit détection
  if (analogRead(PIN_CURRENT_MES) > 3000) {          // 2,41A ??? A définir, c'est juste pour mettre la condition
    shortCircuit(); 
    }
  // Filtre sur la mesure de courant
  for(int j=0;j<300;j++){
     c=(analogRead(PIN_CURRENT_MES)*0.2)+(c*0.8);
  }
  current = c;
  if (current > topCurrent) {
    topCurrent = current;
    Serial.print("topCourant ");Serial.println(topCurrent);
  }
}
Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : projet centrale wifi DCC++ Can
« Réponse #275 le: août 31, 2020, 04:19:50 pm »
Attention aux afficheurs OLED !!!

J'ai acheté 2 écrans ici et les pins VCC et GND sont inversées  :-[ :( >:(
https://www.ebay.fr/itm/0-96-I2C-IIC-Serial-128-64-OLED-LCD-Screen-LED-Display-Module-for-Arduino-fr/123074727750?

D'autres ont les pins SDA et SCL inversées !!

Je regarde si ce cas est isolé ou non. Sinon il faudra prévoir une inversion des fils par straps sur le PCB.
Ou restreindre les choix des offres.


Avant que je m'en aperçoive, il a bien chauffé mais n'est pas mort !
« Modifié: août 31, 2020, 04:25:42 pm par Dominique »
Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : projet centrale wifi DCC++ Can
« Réponse #276 le: août 31, 2020, 04:57:14 pm »
J'ai déposé un prototype de La Box chez Thierry cet après-midi, pour lui permettre de tester in situ.

J'atteste qu'il a vraiment beaucoup d'occupations, en plus de son boulot et sa famille, avec sa nouvelle belle maison où il y a des travaux de finition, comme toujours :P).

Mais il est très confiant quand aux qualités de cette Box à venir. Nous allons donc être patients et respectueux.

A part nous trois (Michel, Thierry et moi) : Marcel, Denis, Christophe : avez-vous fait des tests ?



Cordialement,
Dominique

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Re : projet centrale wifi DCC++ Can
« Réponse #277 le: septembre 01, 2020, 10:57:30 am »
Avant que je m'en aperçoive, il a bien chauffé mais n'est pas mort !

Expérience vécue : le boitier s'en sort avec une cloque ! On note.
Cordialement

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : projet centrale wifi DCC++ Can
« Réponse #278 le: septembre 05, 2020, 06:33:24 pm »
Bonjour à tous.

Suite à la visite de Dominique et grâce à sa centrale, j'ai suffisamment avancé sur l'intégration du HMI de Cédric dans Labox pour en pousser un premier jet sur Github aujourd'hui. Voici les différentes modifications apportées au code:

- Isolement HMI/Reste du code
L'interface utilisateur (le HMI) qui a été ajoutée au codage de Dominique pour WiThrottle, est aussi ajoutée à Labox pour donner la possibilité de signaler à l'utilisateur ce qu'il se passe sur la centrale via un écran. La présence de boutons permet aussi de faire des réglages, ou de changer le type d'affichage à l'aide d'un menu. Pour éviter de retrouver du code HMI au milieu de DCCpp ou des Throttles, j'ai décidé d'ajouter une interface qui déconnecte complètement les deux parties. Une nouvelle classe HmiInterface virtuelle pure a été définie côté DCCpp. Cette classe est dite pure parce qu'elle a au moins une fonction dont elle ne donne pas d'implémentation. La classe qui décidera de dériver d'elle, comme ici 'hmi', devra fournir obligatoirement ces fonctions. Elles sont peu nombreuses, au nombre de deux seulement : HmiInterfaceLoop() qui va traiter les événements envoyés par Labox, et HmiInterfaceRefreshDrawing() qui rafraîchira l'écran pour tenir compte des derniers événements. J'ai bien sûr codé la version de hmi dans HmiInterface.cpp. Grâce à cette interface, on pourrait tout à fait remplacer l'écran actuel par un écran LCD 4 lignes par exemple, sans toucher au reste de Labox !

- Gestion du multi-cœur
Maintenant que la partie DCCpp de Labox s'exécute sur le second cœur de l'ESP32, il faut s'assurer que la partie HMI s'exécute sur le bon cœur, sinon des risques de collisions de données sont possibles. Donc le numéro du cœur est enregistré pendant le begin de Hmi lancé par le setup() et qui s'exécute sur le même cœur que le fichier ino. La plupart des fonctions de Hmi ont étés sécurisées pour qu'elles sortent tout de suite si l'exécution n'est pas sur le bon cœur... Pour bien isoler le fonctionnement des deux cœurs, un CircularBuffer (bien amélioré au passage) a été implémenté pour discuter entre les deux. Ce buffer circulaire va recevoir les événements envoyés par les fonctions DCCpp (cœur 1), et réceptionnées par le HmiInterfaceLoop() (cœur 0) dont j'ai parlé plus tôt pour mettre à jour l'écran.

- Pour éviter les problèmes de nommage, j'ai renommé toutes les macros DEBUG de Hmi en HMIDEBUG...

- Tout comme le programme de Dominique, maintenant la première Throttle qui se connecte provoque l'allumage de la tension DCC. Cela ne se reproduit plus ensuite, même si toutes les throttles se déconnectent, puis se reconnectent. Je rappelle au passage que toutes les Throttles compatibles WiThrottle (comme WiThrottle sur iPhone ou EngineDriver sous Android) ou Z21 (comme les applis de Roco et Fleischmann toujours sous Android) fonctionnent. Que la centrale Labox est câblée par défaut (dans labox.ino) pour accepter trois connexions WiThrottle/EngineDriver plus trois connexions Z21. Que chaque connexion peut piloter plusieurs locos... On est donc très ouverts !

- Cette version intègre également les modifications de Dominique pour la lecture/écriture de CVs sur ESP32. A tester !


Que reste t-il à faire ?

Le tableau tab_trains de Hmi me semble faire double usage avec les Locomotives de Labox qui contiennent les mêmes données et sont mise à jour par les connexions successives de Throttles... A creuser.

Les fonctions semblent bizzarement gérées dans EngineDriver : par exemple l'allumage des feux est immédiatement éteint ! Tout se passe comme si l'allumage était déclaré comme une fonction transitoire, comme un klaxon sur une loco sonore, et pas comme une fonction qui reste dans l'état demandé... En Z21, pas de problème.

La sauvegarde des données dans un fichier json sur l'ESP32 est toujours à faire...

Il y a encore des ajustements à faire sur le Hmi, par exemple lorsque l'on veut lire/écrire des CVs.

Pour les développeurs, travailler en parallèle dans la librairie Labox et l'IDE est tout à fait possible facilement. Il suffit d'avoir ouvert simultanément l'IDE, et un éditeur multi fichiers comme Visual Studio Code ou Visual Studio Community. C'est également possible avec des éditeurs de texte plus basiques comme SublimeText ou Notepad++, mais Visual offre une navigation facilitée dans les sources, un contrôle en temps réel de ce qui est tapé et beaucoup d'autres facilités, comme l'intégration de Github. Quel que soit l'éditeur, il suffit de modifier ce que l'on veut, de tout sauvegarder, puis d'aller dans l'IDE et de lancer la compilation.

Voilà. J'espère des retours pour corriger les problèmes et améliorer le traitement des Throttles et des locos.
« Modifié: septembre 05, 2020, 06:35:45 pm par Thierry »

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : projet centrale wifi DCC++ Can
« Réponse #279 le: septembre 05, 2020, 06:48:55 pm »
Super ! Énorme travail !
Voilà du pain sur la planche aux Contamines  :D
Je teste asap  ;)
Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : projet centrale wifi DCC++ Can
« Réponse #280 le: septembre 06, 2020, 03:40:13 pm »
Premiers tests de la version de la bibliothèque LaBox version 0.6 (version indiquée ligne 61 du sketch LaBox.ino) du 5 Septembre 2020. Elle se trouve sur le git Locoduino :
https://github.com/Locoduino/LaBox


Mais partir de 1.0.0 me semblerait une bonne chose.

Après installation de la bibliothèque (transfert à la main dans le dossier "libraries", les exemples n'apparaissent pas encore dans le menu exemples de l'IDE. Faire "ouvrir Exemples/LaBox/LaBox.ino". Puis choisir la carte ESP32 Dev Module.

A la première compilation et le premier téléversement, il n'y a aucune erreur.

Attention il y a une modification du sketch pour s'adapter à la carte en cours de développement :
A la ligne 91, il faut changer les numéros des pins :
DCCpp::beginMain(UNDEFINED_PIN, 33, 32, 36);
Car la pin 33=DCC(Dir), la pin 32=pwm/enable, la pin 36-SVP= current sense.

Thierry me signale à l'instant que ces modifications sont maintenant intégrées dans la version 0.6.1 disponible sur le Git.

Sur ma carte j'ai changé la pin de mesure de tension en reliant la pin IO0 à la pin IO34 :
   *  #define PIN_VOLTAGE_MES         34Cette dernière modification est à faire dans le fichier hmiConfig.h, ligne 22
ainsi que le coefficient de mesure de tension ligne 24 de ce fichier :
#define HMI_VoltageK            0.10        // Voltage scaling coefficient

J'avais trouvé précédemment que la mesure de tension ne marchait pas sur IO0, mais je vais refaire ce test pour éviter une modification du circuit imprimé.

J'ai également changé la fonction de mesure de tension dans le fichier hmi.cpp, ligne 728 :
  voltage = ((analogRead(PIN_VOLTAGE_MES) - 2740) * HMI_VoltageK) - 24 ;
La nombre 2740 est la valeur lue lorsque la tension est 0V. Le résultat n'est pas parfait et demande plus d'investigations.

Après toutes ces modifications, tout marche nickel :
- la connexion de mon iPhone en mode point d'accès (La Box - Locoduino), sur l'adresse IP 192.168.4.1, port 44444
- la sélection d'une loco (adresse DCC)
- la commande des vitesses et des fonctions de la loco.

Sur ces images, on voit les différents cas :


- L'écran d'accueil après démarrage du wifi : indique l'adresse IP de LaBox
- la connexion avec succès d'un smartphone (ici Withrottle sur iPhone), avec l'alimentation des rails (voir la photo ci-dessous)
- quelques commandes de vitesse et de fonction (ici la lumière fonctionne et les autres fonctions apparaissent dans un petit carré)


Bravo à Thierry : on n'applaudira jamais assez  ;D ;D

Et à suivre...
« Modifié: septembre 06, 2020, 03:58:31 pm par Dominique »
Cordialement,
Dominique

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : projet centrale wifi DCC++ Can
« Réponse #281 le: septembre 06, 2020, 03:47:54 pm »
Pour info, j'ai poussé il y a deux minutes une nouvelle version avec juste les bonnes pins dans Labox.ino, et le numéro de version propre à Labox qui continuera d'évoluer : 0.6.1 . En développement, on ne met la version 1.0 que lors de la première distribution publique à fonctionnalités complètes du produit. On en est pas tout à fait là, même si on s'en approche.

Donc WiThrottle semble mieux gérer les fonctions que EngineDriver qui ne laisse pas les lumières allumées... En tout cas c'est ce que laisse présager la photo avec l'écran qui signale la fonction activée et la lumière allumée de la loco.


Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : Re : projet centrale wifi DCC++ Can
« Réponse #282 le: septembre 06, 2020, 04:09:58 pm »
Pour info, j'ai poussé il y a deux minutes une nouvelle version avec juste les bonnes pins dans Labox.ino, et le numéro de version propre à Labox qui continuera d'évoluer : 0.6.1 . En développement, on ne met la version 1.0 que lors de la première distribution publique à fonctionnalités complètes du produit. On en est pas tout à fait là, même si on s'en approche.
En effet, d'ailleurs je n'ai pas trouvé la fonction de recherche d'adresse DCC dans les menus HMI.
Aussi, de nombreuses commandes du menu HMI ne fonctionnent pas (j'ai testé le reset sui marche).

Citer
Donc WiThrottle semble mieux gérer les fonctions que EngineDriver qui ne laisse pas les lumières allumées... En tout cas c'est ce que laisse présager la photo avec l'écran qui signale la fonction activée et la lumière allumée de la loco.
Ce n'est pas totalement certain car j'ai constaté que la lumière s'est éteinte et ne s'est pas rallumée alors que le symbole * est sur l'écran. J'ai mis cela sur le compte des faux contacts et le fait que les commandes de fonction ne sont pas répétées en permanence.
De même, le retour des commandes de fonctions sur Withrottle qui inverse le bouton sur l'écran ne fonctionne pas pour le moment. J'avais obtenu ce résultat dans une ancienne version mais il faut que je retrouve les messages à retourner au smartphone en cas de commande.
« Modifié: septembre 06, 2020, 04:15:21 pm par Dominique »
Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : Re : Re : projet centrale wifi DCC++ Can
« Réponse #283 le: septembre 07, 2020, 07:56:19 pm »
Pour info, j'ai poussé il y a deux minutes une nouvelle version avec juste les bonnes pins dans Labox.ino, et le numéro de version propre à Labox qui continuera d'évoluer : 0.6.1 . En développement, on ne met la version 1.0 que lors de la première distribution publique à fonctionnalités complètes du produit. On en est pas tout à fait là, même si on s'en approche.
En effet, d'ailleurs je n'ai pas trouvé la fonction de recherche d'adresse DCC dans les menus HMI.
Aussi, de nombreuses commandes du menu HMI ne fonctionnent pas, sauf le redémarrage qui marche, mais avec une phase  en tension continue - non DCC - (donc la loco part à fond la caisse) puis DCC off jusqu'à le connexion d'un throttle.
Je confirme le bon fonctionnement de la nouvelle version 0.6.1 avec les bonnes pin ...

Sauf la mesure de tension qui ne fonctionne que sur le pin 34 (voir les modifications plus haut des fichiers hmiConfig.h et hmi.cpp).

En ce qui concerne les commandes de vitesses, msport a signalé - et je confirme - que la mise de la vitesse à zéro (ou avec bouton STOP) est affichée 002 sur l'Oled au lieu de 000. En déconnectant le smartphone, la vitesse passe alors bien à 000.

Citer
Donc WiThrottle semble mieux gérer les fonctions que EngineDriver qui ne laisse pas les lumières allumées... En tout cas c'est ce que laisse présager la photo avec l'écran qui signale la fonction activée et la lumière allumée de la loco.
Quand la lumière est allumée elle reste bien allumée, sauf faux contact.
Par contre on ne peut plus éteindre la lumière !
Si la lumière s'est éteinte à cause d'un faux contact, elle ne se rallume pas alors que le symbole * est sur l'écran.
Le problème est connu car les commandes de fonction ne sont pas répétées comme les commandes de vitesse/direction.
La commande de lumière sur Withrottle ne commande pas l'extinction de la lumière de la loco, ni le symbole *.
Confirmation aussi, le retour visuel des commandes de fonctions sur Withrottle qui inverse le bouton sur l'écran ne fonctionne pas pour le moment. Je vais regarder dans le code Withrottle.

En ce qui concerne la mesure de tension sur la pin 34, c'est pas trop mal mais pas précis et ça fluctue (ou mon alimentation est bizarre).
Par ailleurs la mesure de courant doit être améliorée (un peu-beaucoup faible). Je regarde aussi.

Bon travail en tout cas !

Cordialement,
Dominique

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : projet centrale wifi DCC++ Can
« Réponse #284 le: septembre 08, 2020, 05:24:54 pm »
Bravo à tous !

C'est quand même particulièrement réussi.
Petit, mais costaud  ;D

D'ici la semaine prochaine, je teste la toute première version sur un UNO avec un shield juste pour tester mon interface.
Puis je sors le fer à souder et je fabrique cette centrale : ça doit dépoter  8)

Denis
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)