Le développement pour l’Internet des Objets (IoT) est souvent dominé par des langages comme C++ (pour sa proximité avec le matériel) ou Python (pour sa simplicité). Cependant, C# et l’écosystème .NET offrent des outils puissants et modernes qui permettent de développer rapidement des applications IoT, tout en conservant des performances compétitives. Avec des frameworks comme .NET NanoFramework et .NET MAUI, C# s'intègre désormais dans des scénarios embarqués et multiplateformes.
Dans cet article, nous allons :
Explorer comment utiliser C# dans le développement IoT.
Comparer les avantages de C# avec d’autres langages couramment utilisés.
Proposer des exemples concrets pour illustrer son potentiel.
Le modèle orienté objet et les bibliothèques riches de C# simplifient la gestion de données, la communication réseau, et l’accès aux capteurs.
Comparativement à C++, le développement est souvent plus rapide grâce à des abstractions de haut niveau.
C# permet de communiquer facilement avec des bibliothèques natives en C++ via P/Invoke.
Les outils comme Python.NET permettent également l’utilisation de bibliothèques Python dans des projets .NET.
Conçu pour les microcontrôleurs, .NET NanoFramework permet de programmer des cartes embarquées comme les ESP32.
Alternative intéressante à Arduino (C++) ou MicroPython.
.NET MAUI (Multi-platform App UI) est une technologie qui permet de créer des interfaces utilisateur compatibles avec plusieurs plateformes (Windows, macOS, iOS, Android) à partir d'un seul code source. Dans un contexte IoT, .NET MAUI est particulièrement utile pour :
Concevoir des applications mobiles ou desktop affichant des données issues de capteurs connectés.
Développer des tableaux de bord interactifs permettant de surveiller et contrôler des appareils IoT en temps réel.
Utiliser des fonctionnalités natives de chaque plateforme (Bluetooth, Wi-Fi, notifications, etc.) sans réécrire le code pour chaque système d’exploitation.
Par exemple, une application .NET MAUI peut récupérer des mesures de température depuis un ESP32, les afficher en temps réel et permettre à l’utilisateur d’envoyer des commandes à distance. Grâce à XAML et C#, on peut concevoir une interface graphique fluide et réactive, avec une gestion efficace des mises à jour des données.
Une carte ESP32.
Un capteur de température DHT11 ou DHT22.
Quelques câbles.
Avant de pouvoir exécuter du code C# sur un ESP32, il est nécessaire d’installer le firmware .NET nanoFramework sur la carte. Suivez ces étapes pour préparer votre environnement :
Installer Visual Studio et les extensions
Téléchargez et installez Visual Studio depuis le site officiel de Microsoft.
Ajoutez l’extension .NET nanoFramework via le gestionnaire d’extensions de Visual Studio.
Installer l’outil de gestion de cartes
Téléchargez et installez nanoFramework NF Tool depuis nanoframework.net.
Connectez votre ESP32 à votre PC via un câble USB.
Flasher le firmware .NET nanoFramework sur l’ESP32
Ouvrir l’outil de flashage
Lancez nanoff (nanoFramework Firmware Flasher).
Sélectionnez le port série correspondant à votre ESP32.
Cliquez sur "Download latest firmware" pour récupérer la version la plus récente.
Une fois le téléchargement terminé, cliquez sur "Flash" pour installer le firmware sur votre carte.
Vérifier l’installation
Testez la connexion en exécutant la commande DeviceInfo() pour vérifier que l’ESP32 est bien détecté.
Déployer et exécuter.
Voici un exemple de code pour lire des données d'un capteur DHT11 avec un ESP32 en utilisant NanoFramework :
Une fois le firmware installé et le code prêt, voici comment l’exécuter sur l’ESP32 :
Connectez la carte via USB à votre ordinateur.
Lancez votre projet .NET nanoFramework.
Assurez-vous que la carte ESP32 est bien détectée dans l’onglet Device Explorer.
Sélectionnez votre carte ESP32 comme cible de déploiement.
Cliquez sur Build > Deploy Solution ou utilisez Ctrl + F5.
Les données s’affichent dans la console Output de Visual Studio.
Vous pouvez interagir avec l’ESP32 en modifiant les valeurs des capteurs en temps réel.
En plus du développement embarqué, C# excelle pour les systèmes connectés grâce à ASP.NET Core (backend) et Blazor ou .NET MAUI (frontend). Par exemple :
Une API REST en ASP.NET Core peut centraliser les données des appareils IoT.
Une application mobile ou desktop en .NET MAUI peut afficher les données des capteurs en temps réel.
Voici un extrait de code simple pour afficher les températures collectées dans une application .NET MAUI :
C# est idéal lorsque :
Vous avez besoin de créer des solutions complètes et intégrées, du matériel (embarqué) au logiciel (cloud, UI).
Vous souhaitez un écosystème homogène, avec une courbe d’apprentissage rapide.
Vous cherchez à capitaliser sur les outils avancés de Visual Studio pour debugger et tester.
C/C++ sont souvent privilégiés pour leur faible empreinte mémoire et leur efficacité énergétique. Mais il existe également d'autres langages émergent comme TinyGo et Rust. TinyGo permet d’exécuter du Go sur des microcontrôleurs avec une empreinte réduite, tout en bénéficiant de la simplicité et de la sécurité du langage Go. Rust, quant à lui, est reconnu pour sa gestion stricte de la mémoire et ses garanties de sécurité, ce qui en fait un choix également très pertinent pour les applications IoT critiques où la stabilité et la performance sont essentielles.
C# et .NET ouvrent de nouvelles opportunités dans le domaine de l’IoT, en offrant des solutions modernes, performantes et faciles à développer. Avec des outils comme .NET NanoFramework pour l’embarqué et MAUI pour les interfaces utilisateur, il est désormais possible de créer des systèmes IoT de bout en bout entièrement en C#.
Lien : NanoFramework samples