Notre librairie
Cette semaine, on vous propose donc d'écrire avec WinDEV une petite application Windows toute simple qui change dynamiquement l'état d'un relais en fonction de la température. Vous aurez donc besoin d'un module avec une fonction température et d'un module avec une fonction relay. Si vous n'en avez pas sous la main, vous pourrez facilement adapter le code présenté ici pour d'autres modules Yoctopuce. Cet article suppose aussi que si vous prenez la peine de le lire, c'est que vous en savez plus que nous sur WinDev, on ne s'est donc pas trop attardé les détails de manipulation de l'environnement.
Installation
Téléchargez simplement la librairie .NET Proxy depuis notre site web et dézippez-la où bon vous semble. Les répertoires intéressants sont:
- Documentation qui contient l'aide de référence, au format HTML.
- Binaries qui contient la librairie, sous forme de DLL.
On lance WinDEV et on crée un projet de type "application Windows", puis on utilise la fonction "Project > Importer > un assemblage .NET" pour importer la DLL DotNetProxyLibrary.dll de la librairie. C'est tout, la librairie est maintenant accessible depuis notre projet.
Initialisation
La première chose à faire consiste initialiser la librairie, le meilleur endroit pour ça est la partie initialisation de l'application. Pour faire apparaître cette section, sélectionnez le nœud ".Projet" dans l'explorateur de projet puis appuyez sur la touche F2.
L'initialisation consiste simplement à appeler la fonction statique "RegisterHub" de la classe "YAPIProxy" (à ne pas confondre avec la classe "YAPI"). On utilise "usb" comme paramètre pour indiquer que l'on désire utiliser les modules branchés en USB, mais on aurait aussi pu indiquer l'adresse IP d'un VirtualHub ou d'un YoctoHub. Pendant qu'on y est, on en profite aussi pour appeler "YAPIProxy.FreeAPI()" quand l'application se termine.
Initialisation de l'application
Le problème de yapi.dll
DotNetProxyLibrary.dll est une DLL .NET, mais elle utilise yapi.dll qui, elle, est une DLL traditionnelle. Malheureusement on n'a pas réussi à faire comprendre à WinDEV qu'il en avait aussi besoin. C'est pourquoi vous devrez copier à la main les fichiers "yapi.dll" et "amd64\yapi.dll" dans le sous-répertoire "Exe" de votre projet. Si vous connaissez un moyen pour que WinDEV le fasse automatiquement, n'hésitez pas à nous le signaler dans les commentaires.
Fenêtre principale
Initialisation
On ajoute ensuite à notre projet une fenêtre contenant deux "champs libellés": "Etat capteur" et "Etat relais".
Définition de la fenêtre principale
Dans le code d'initialisation de la fenêtre, on déclare deux variables "r" et "t" qui correspondent au relais et au capteur de température que l'on initialise grâce à "YRelayProxy.FindRelay" et "YTemperatureProxy.FindTemperature". Ici aussi, veillez à ne pas confondre avec "YTemperature.FindTemperature" et "YRelay.FindRelay". Comme on utilise une chaîne vide comme paramètre, les fonctions Findxxx rendront la première fonctionnalité disponible, mais on aurait pu utiliser un nom matériel ou un nom logique.
Initialisation de la fenêtre
Rafraîchissement
Le cœur de l'application est une procédure "rafraîchissement" qui va
- Lire la valeur du capteur de température
- L'afficher
- Mettre à jour l'état du relais en fonction de la température
- Afficher l'état du relais
Rafraîchissement de la fenêtre
Enfin on va configurer cette procédure de rafraîchissement pour qu'elle se ré-exécute automatiquement quatre fois par seconde.
Configuration du rafraîchissement en boucle
Résultat
Notre application est terminée, il ne reste plus qu'à la lancer pour contempler le résultat.
Et en plus, ça marche !
Non seulement ça fonctionne, mais en plus les connexions/déconnexions sont gérées en toute transparence par l'API Proxy: vous pouvez brancher ou débrancher vos modules pendant l'exécution de l'application sans que cela ne pose de problème particulier.
Considérations générales
Pour conclure, voici quelques remarques générales à propos de l'utilisation de l'API Proxy avec WinDEV:
- Le code présenté ici utilise au maximum les propriétés des différents objets plutôt que leurs méthodes. Par exemple, on a utilisé t.CurrentValue plutôt que t.get_currentValue(). C'est parce que ces propriétés sont automatiquement gérées en arrière plan alors que les méthodes correspondantes génèrent une communication explicite avec le module concerné à chaque fois qu'elles sont appelées.
- Les constantes de l'API Proxy commencent toutes par un souligné.
- Il semblerait que WinDEV fasse peu de cas des namespaces dans les assemblages .NET. Veillez donc à ne pas confondre et mélanger les classes Yxxx et leur version Proxy YxxxProxy, sinon vous allez vite avoir des problèmes.
- Vous l'avez probablement remarqué, l'API Proxy fonctionne parfaitement avec la version d'évaluation Express de WinDEV.
- Par contre, si on ne vous a présenté qu'une application Windows, c'est parce qu'il y n'a pratiquement aucune chance pour que vous puissiez générer avec WinDEV une application Linux, Android ou iOS qui utilise la librairie .NET Proxy. A tel point qu'on n'a même pas pris la peine d'essayer.