Net 10 et MAUI: App pour tester une clé dynamométrique

Net 10 et MAUI: App pour tester une clé dynamométrique

Cette semaine, on va réaliser une petite application qui utilise le ban de test pour clé dynamométrique que l'on avait fabriqué il y a quelques semaines. Cette application va permettre à l'utilisateur de vérifier le couple appliqué par la clé et exporter les résultats au format CSV.





L'application nous permet à la fois d'avoir un exemple d'utilisation de nos modules intéressant à vous proposer, mais aussi elle va nous permettre de tester les nouvelles versions des outils Microsoft. En effet, il y a quelques mois, Microsoft a sorti .Net version 10 et Visual Studio 2026.

Le code

Nous allons réaliser cette application en C# avec Visual Studio 2026 en utilisant le Framework MAUI. Lors de la création du projet, on sélectionne .Net 10.

Une fois le projet créé, on ajoute la librairie Yoctopuce comme décrit dans notre article sur le sujet. La procédure est identique avec Visual Studio 2026, tout fonctionne comme prévu, nous n'avons pas détecté de changement qui impacterait l'utilisation de notre librairie.

Pour le code, la première chose à faire consiste à initialiser notre API à l'aide de YAPI.RegisterHub. Le meilleur endroit pour faire ça est dans la classe AppShell.

Il faut implémenter les méthodes OnAppearing et OnDisappearing de l'application comme ceci:

 public partial class AppShell : Shell
 {
     private string url = "";

     public AppShell()
     {
         InitializeComponent();
     }

     protected override void OnAppearing()
     {
         base.OnAppearing();
         string errmsg = "";
         int res = YAPI.RegisterHub("usb", ref errmsg);
         if (res != YAPI.SUCCESS) {
             string error = "Unable to acces USB port : " + errmsg;
             Debug.WriteLine(error);
             MainThread.BeginInvokeOnMainThread(async () =>
             {
                 await Task.Delay(1000);
                 await Shell.Current.DisplayAlert("Error", error, "Quit");
                 Application.Current.Quit();
             });
         }
     }

     protected override void OnDisappearing()
     {
         base.OnDisappearing();
         YAPI.UnregisterHub(url);
     }
 }



Ce code appelle les méthodes RegisterHub et UnregisterHub pour utiliser les modules Yoctopuce présents sur les ports USB de la machine. Si le port est déjà utilisé par une autre application (comme VirtualHub), un message d'erreur est affiché et l'application s'arrête.

Il reste ensuite à implémenter la page principale de l'application. On commence par la méthode OnAppearing de la page. Cette méthode est appelée au chargement de la page et énumère tous les capteurs YWeighScale connectés et demande à l'utilisateur lequel doit être utilisé.

private List<string> GetSensors()
{
        List<string> res = new List<string>();
        YWeighScale scale = YWeighScale.FirstWeighScale();
        while (scale != null) {
         res.Add(scale.get_hardwareId());
         scale = scale.nextWeighScale();
        }
        return res;
}


protected async override void OnAppearing()
{
        base.OnAppearing();
        List<string> sensors = GetSensors();
        await Task.Delay(500);
        string sensor_selected = await DisplayActionSheetAsync("Select WeighScale sensor", "Cancel", null, sensors.ToArray());
        Hwid = sensor_selected;
    ...
}



L'application liste les capteurs disponibles
L'application liste les capteurs disponibles



Le reste du code est principalement de la gestion d'interface XML et ne mérite pas trop d'attention.

La seule particularité est l'utilisation du capteur Yoctopuce. Pour avoir une interface réactive, nous utilisons le capteur en mode callback (voir notre article sur le sujet). Cela veut dire qu'il faut appeler périodiquement la méthode YAPI.HandleEvents et enregistrer une fonction qui est appelée quand la valeur du capteur change.

Pour la méthode YAPI.HandleEvents nous utilisons un IDispatcherTimer qui est programmé pour se déclencher deux fois par seconde.

private readonly IDispatcherTimer _timer;

public MainPage()
{
    InitializeComponent();
    _timer = Application.Current.Dispatcher.CreateTimer();
    _timer.Interval = TimeSpan.FromMilliseconds(500);
    _timer.Tick += (sender, e) => PeriodicHandler();
    ...
}

protected async override void OnAppearing()
{
    base.OnAppearing();
    ...
    _timer.Start();
}

protected override void OnDisappearing()
{
    base.OnDisappearing();
    _timer.Stop();
}

private void PeriodicHandler()
{
    string errmsg = "";
    int err = YAPI.HandleEvents(ref errmsg);
    if (err != 0)
    {
        Trace.WriteLine(errmsg);
    }
}



Il faut enregistrer la méthode de callback qui doit être appelée par la librairie quand la valeur du capteur change. Pour ceci, on utilise la méthode
registerValueCallback de notre objet YWeighScale.

private YWeighScale _scale;

...

public string Hwid
{
   get => _hwid;
   set
   {
       if (value == _hwid)
           return;
       _hwid = value;
       _scale = YWeighScale.FindWeighScale(value);
       _scale.registerValueCallback(ValueChangeCallBack);
       OnPropertyChanged();
   }
}

private void ValueChangeCallBack(YWeighScale func, string value)
{
        // update interface with current value
        ...
}



Nous avons décrit uniquement les parties du code qui interagissent avec la librairie Yoctopuce, mais le code source complet de cette application est disponible sur GitHub : https://github.com/yoctopuce-examples/yTorqueChecker

L'application

Une fois démarrée, l'application commence par demander à l'utilisateur quel capteur doit être utilisé. Ensuite, l'utilisateur peut choisir la plage de couples à tester. Par exemple, effectuer des tests de 2 Nm à 20 Nm avec une mesure tous les 2Nm.

L'application
L'application



Une fois le test lancé, un couple de référence est affiché. L'utilisateur doit régler sa clé sur cette valeur et appliquer ce couple sur le capteur. L'application affiche la valeur maximale mesurée. L'utilisateur peut soit recommencer la mesure soit passer à la suivante.


Une fois tous les tests effectués, l'utilisateur peut exporter des données dans un fichier CSV.

Conclusion

Cette application fournit une méthode simple pour vérifier une clé dynamométrique à l’aide d’un Yocto-Bridge. Elle illustre surtout un exemple concret d’utilisation des modules Yoctopuce avec .Net et MAUI.

Le code source complet de l'application est disponible sur GitHub si vous avez besoin de l'adapter à vos besoins.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.