C# dans le monde des microcontrôleurs : une percée inattendue dans l'embarqué

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi C# dans l'embarqué n'est pas une blague

\n\n

Si vous pensez encore que le monde des microcontrôleurs et du matériel est le domaine exclusif du C pur ou de l'assembleur, accrochez-vous à votre clavier. Imaginez : vous écrivez du code pour ESP32 ou STM32 en utilisant des requêtes LINQ, async/await et un ramasse-miettes. Et ce n'est pas de la science-fiction — c'est la réalité de 2024. Le développement embarqué en C# a cessé d'être une expérience de geeks pour devenir un outil de travail.

\n\n

Bien sûr, personne n'a annulé le C++ pour les pilotes gourmands en ressources ou les tâches critiques en temps. Mais si vous avez besoin de prototyper rapidement un appareil IoT, d'écrire un serveur web directement sur la carte ou d'utiliser le riche écosystème .NET, le C# dans l'embarqué est votre choix. Dans cet article, nous verrons comment fonctionne exactement le C# pour microcontrôleurs, quels frameworks utiliser et où se cachent les pièges.

\n\n

Où C# bat C et C++ dans l'embarqué

\n\n

Soyons honnêtes : C++ est puissant, mais douloureux. Gestion manuelle de la mémoire, macros, maux de tête avec l'éditeur de liens. La programmation embarquée en C# apporte ce qui manque tant au développement embarqué classique : la rapidité de développement et la sécurité des types.

\n\n

Des avantages difficiles à ignorer

\n\n
    \n
  • Un ramasse-miettes ? Oui, il existe, mais optimisé pour le temps réel. Dans NanoFramework, le GC fonctionne de manière prévisible et ne bloque pas l'exécution longtemps.
  • \n
  • Async/await — plus de machines d'état cauchemardesques à faire à la main. L'asynchrone sur les microcontrôleurs devient élégant.
  • \n
  • LINQ — le traitement des données des capteurs devient similaire au travail avec des collections ordinaires.
  • \n
  • Base de code unifiée — vous pouvez réutiliser la logique entre une application de bureau et un firmware.
  • \n
\n\n

Mais il y a aussi un revers : le C# pour les systèmes embarqués nécessite plus de RAM (au moins 256 Ko de flash et 64 Ko de RAM), et le démarrage de l'environnement d'exécution prend des fractions de seconde. Pour les horloges temps réel, c'est critique, pour une ampoule intelligente, non.

\n\n

Aperçu des outils : NanoFramework, Mono et .NET IoT

\n\n

Pour commencer le développement embarqué en C#, vous devez choisir le bon framework. Il y a trois acteurs principaux sur le terrain.

\n\n

.NET NanoFramework — le héros principal

\n\n

Ce n'est pas un .NET réduit, mais un environnement d'exécution entièrement réécrit de zéro pour les microcontrôleurs. Il prend en charge ARM Cortex-M, ESP32, TI CC32xx et même RISC-V. L'installation est simple : téléchargez l'extension nanoFramework pour VS, connectez la carte via USB et écrivez du code.

\n\n
using System;\nusing System.Device.Gpio;\nusing System.Threading;\n\nclass Program\n{\n    static void Main()\n    {\n        GpioController gpio = new GpioController();\n        GpioPin led = gpio.OpenPin(2, PinMode.Output);\n        \n        while (true)\n        {\n            led.Write(PinValue.High);\n            Thread.Sleep(500);\n            led.Write(PinValue.Low);\n            Thread.Sleep(500);\n        }\n    }\n}\n
\n\n

Ce code fait clignoter une LED sur un ESP32. Notez que nous utilisons System.Device.Gpio — les mêmes API que sur Raspberry Pi sous .NET. La portabilité du code est une fonctionnalité tueuse.

\n\n

Mono pour embedded Linux

\n\n

Si vous avez un BeagleBone ou un Raspberry Pi sous Linux, mais que vous voulez écrire en C# — utilisez Mono. Ce n'est pas tout à fait de l'embarqué au sens classique, mais pour les passerelles IoT et les caméras intelligentes, c'est idéal. Mono permet d'exécuter des applications ASP.NET Core complètes sur ARM.

\n\n

Bibliothèques .NET IoT — pour les cartes monocarte

\n\n

Des bibliothèques de Microsoft pour travailler avec GPIO, SPI, I2C. Elles fonctionnent sur .NET Core/5+ sous Linux. Parfaites pour le prototypage, mais nécessitent un système d'exploitation complet.

\n\n

Écrivons un projet réel : lire la température d'un DHT22

\n\n

Passons à la pratique. Supposons que nous devions lire les données d'un capteur de température et d'humidité DHT22 sur un STM32F4

Blogs

Book Recommendations