Envie de se faire plaisir le soir ? Envie de faire vibrer des canards ? Envie de développer quelque chose de WAF et super Geek ? Alors, cette session est pour toi :-) .NET Microframework est une technologie open source permettant de réaliser des robots, des modules intelligents, le tout sans aucun OS. Cette session montra par des exemples concerts comment réaliser des automates et les piloter à travers des interfaces web. Exemple concret avec un arrosage automatique entièrement pilotable depuis l'autre bout du monde.
.NET Microframework: du code, de l’électronique, de la robotique
1. Donnez votre avis !
Depuis votre smartphone, sur :
http://notes.mstechdays.fr
De nombreux lots à gagner toutes les heures !!!
Claviers, souris et jeux Microsoft…
http://notes.mstechdays.fr
Merci de nous aider à améliorer les TechDays
2. .NET Microframework : du code, de
l'électronique, de la robotique
2013-02-12
Laurent Ellerbach
Audience Marketing Director
Microsoft Central and Eastern Europe
3. Agenda
• .NET Microframework
• Démo « Hello Led »
• Démo « Mon premier serveur HTTP »
• Démo « Gérer mon arrosage automatique »
• Démo « Piloter un train Lego en infrarouge et
gérer des servos moteurs »
4. .NET Micro Framework
.NET pour les processeurs à bas .NET Microframework pour
coûts
• Directement sur du métal
• Petite et configurable empreinte
• ARM7 @ 20-40 Mhz
• ARM9 @ 200 Mhz
• ~ 300 Ko de RAM
• 1 Mo de mémoire Flash/ROM
Compatibilité .NET
• Différentes versions
• Sélections des classes clientes
• Support spécifique pour l’embarqué
• Un jeu de classe limité mais très
riche
5. NETMF Modèle Open Source
• Open Source collaboratif
• Release History
– V. 4.0 (Nov 2009) entièrement Microsoft
– V. 4.1 (Juin 2010) petites contributions communautaires
– V 4.2 (Eté 2011) > 30% contributions communautaires
– Site hébergé sur un domaine non-Microsoft – netmf.com
– Partenaires communautaires
• tinyclr.com, netduino.com
• Portages de Atmel, NXP, Renasas, TI, ST Micro…
6. Namespaces Partial implementation
Same as .NET Fx
System.Windows System.Windows.Controls
Window Border ListView
System.Windows.Input Button RadioButton System.Data
Keyboard/GPIO CheckBox ScrollViewer
Mouse Panel StackPanel System.XML
Stylus Image TextBox Reader
ListBox UIElement Writer
System.Forms
System.Drawing System
Collections Globalization Diagnostics
System.Service.Model
Security Reflection Runtime
DPWS Discovery Remoting
Threading IO Serialization
DPWS Eventing
Resources NET/HTTP Compiler Svcs
DPWS Addressing
Managed Drivers
DPWS Transfer
SerialPort I2C/SPI A/D Power Mgmt
Proxy Discovery
USB GPIO PWM Watchdog
7. Par où commencer?
• 1 board tel que Netduino
– Prendre la version Netduino Plus avec
suport réseau et SD pour 50€ environ
• Le SDK
– Gratuit
• Visual Studio Express (C#) Processeur et mémoire
– Gratuit Atmel 32-bit microcontroller
Vitesse : 48MHz, ARM7
• …et surtout une bonne idée Espace de stockage pour le
pour construire quelque chose code: 64 KB, sans réseau: 128
de sympa
KB
RAM: 28 KB, sans réseau: 60
KB
9. Un peu de Hard
• Tout ce qu’il y a connaître : U = R x I
• Utiliser une led sur un output pin (3,3V sur Netduino)
• 1 led = 2 V environ, courant 0,02A
• R = (3,3 – 2)/0,02 = 65 Ohms
11. Plus de Hard
• Réutilisation d’un capteur
compte tour sur un vieux
disque dur d’il y a 15 ans
• Faire clignoter la led quand le
capteur de lumière est obturé
2V (red) Digital IO (yellow)
Ground (black)
12. Example d’entrée analogique
• Capteur de lumière agit
comme une résistance
1M Ω (noir complet) à
100 Ω (lumière intense)
+3.3V
• R = √(1M x 100) = 10K Ω
10K R
• Entrée analogique = Ω Entrée
3.3/(1+R/RL) analogiq
ue
• Varie de 0.0323V RL
(lumière intense) à 3.23V
Ground
(noir)
15. Implémenté un serveur Web
• Partir de l’exemple Web Server
Comment ça fonctionne
• 1 thread par protocole = 1 pour http
• 1 handler pour processer toutes les requêtes (GET et POST)
• 1 fonction pour processer GET
• 1 fonction pour processer POST
• 1 fonction pour retourner un fichier du stockage (par morceau car la taille des
buffers est limitée)
• 1 fonction d’upload de fichier vers le stockage (par morceau car la taille des
buffers est limitée)
• Plein d’autres fonctions pour faire fonctionner le tout
• Très bon exemple complet qui implémente beaucoup de bonnes pratiques
17. Simplifier le serveur Web
• Enlever le code lié à https
• Enlever le code lié à POST si GET uniquement utilisé
• Enlever le code lié au transfère de fichier si non utilisé
• Enlever le code lié à la gestion des répertoires et stockage si
pas besoin d’accès aux fichiers
• Enlever ce genre de choses
• Ajouter une fonction qui permet de lire les paramètres passer
en URL
• Ajouter du code pour gérer les pages en GET
• Ajouter du code pour gérer vos propres pages
18. Finalement, je réécris mon serveur web
• Ecouter ce qu’il se passe sur un port (80 par défaut) avec des
Socket
• Lire les données quand il y a quand il y a quelque chose à lire
• Interpréter les headers du protocole HTTP
• Créer une réponse
• Renvoyer le tout
• Le code minimum = 10 lignes
• Quelques try, catch, événement et 2 trois trucs pour faire joli
• Une trentaine de lignes de code pour un serveur web robuste
23. Comment ça marche?
Netduino
http
Client utilisant 2 Pages pour gérer le
un simple calendrier et la
navigateur programmation
1 Page pour ouvrir/fermer
Utilisation en les arroseurs
production tout l’été 1 Page pour gérer la
programmation
Timer pour lancer les arrosages
25. Données…
Comment faire pour avoir un signal propre? 1 acquisition par minute
26. Les 2 options
Hard Soft
• Bon capteur = bonne donnée • Donnée non exacte
• Coût de production plus élevé • Temps de développement
• Complexité matérielle • Complexité logicielle, temps de
traitement
Quoi choisir ???
33. Envoyer des infos en infrarouge
• Les protocoles infrarouge sont compliqués
• Utilisation d’un « hack » avec SPI pour créer l’onde et l’envoyer telle
quelle
35. Piloter des servo moteur
• Servo moteur se pilotent en envoyant des
trains d’onde pour atteindre un angle
spécifique
• Utilisation de PWM pour créer les bons
trains d’onde
• Multiplexage pour en piloter plein
37. Trucs et astuces
• Try catch partout…
• Les buffers sont limités (1024 in most small ARM)
• System.Threading.Thread.Sleep(100);
• Compromis entre joli code et code efficace: la taille, ça compte
• La sécurité, c’est important, à prendre en compte dès le design
• U=RI
• if (Microsoft.SPOT.Hardware.SystemInfo.IsEmulator)
strDefaultDir = "WINFS";
else
strDefaultDir = "SD";
• localhost:81 utilisé par l’émulateur pour un serveur web
40. Développeurs Pros de l’IT
http://aka.ms/generation-app Formez-vous en ligne www.microsoftvirtualacademy.com
http://aka.ms/evenements-
developpeurs Retrouvez nos évènements http://aka.ms/itcamps-france
Les accélérateurs
Faites-vous accompagner
Windows Azure, Windows Phone,
gratuitement
Windows 8
Essayer gratuitement nos http://aka.ms/telechargements
solutions IT
La Dev’Team sur MSDN Retrouver nos experts L’IT Team sur TechNet
http://aka.ms/devteam Microsoft http://aka.ms/itteam