Retour aux projets
10 avr. 2026 • Projet

HeroLink : Hub Logistique IoT

Application desktop en C# pour automatiser la mesure et le pesage de colis via des capteurs laser et une balance connectée.

C#.NET 10AvaloniaUIIoTHardware
Contexte
En entrepôt, les dimensions et le poids des colis étaient saisis à la main, avec des erreurs qui coûtent en frais d'expédition.
Mon rôle
Développement de l'app desktop C# : pilotage des capteurs, interface, échanges avec l'ERP, build et release automatisés.
Résultat
En production : une balance et trois lasers pilotés en même temps, mesures envoyées à l'ERP dès le scan du code-barres.
Représentation par IA de l'interface de HeroLink

Illustration générée par IA pour représenter le wireframe de l'interface, respectant le design réel

Le besoin

Dans la logistique e-commerce, saisir manuellement les dimensions et le poids des colis prend du temps et génère des erreurs de frappe, ce qui finit par coûter cher en surcharges d’expédition.

L’objectif de HeroLink était de créer une station “Plug-and-Play”. L’application gère 4 périphériques en simultané (1 balance + 3 lasers) pour récupérer les dimensions d’un colis dès qu’un code-barres est scanné, puis envoie les données à un ERP via une API.

Choix techniques

Pourquoi .NET 10 & Avalonia UI ?

La Stack Matérielle

Tout repose sur System.IO.Ports pour la communication série (COM) :

Le problème : des ports série instables

Pendant les tests, la connexion avec la balance n’était pas stable. Après une dizaine de minutes, elle cessait de répondre. Cela bloquait parfois l’interface utilisateur, obligeant à redémarrer le logiciel.

La solution : revoir le multithread

Pour régler ça, j’ai revu la gestion des accès aux ports :

L’API

J’ai utilisé Refit pour transformer l’API en une interface C# simple à utiliser :

Ce que j’ai appris

Rétrospective

Le projet a été déployé récemment, mais si je devais le refaire, j’essaierais d’isoler la gestion hardware dans un Service Windows (Background Worker) séparé. L’interface ne ferait que l’affichage, ce qui rendrait le système encore plus robuste en cas de crash de l’interface graphique.