Allumer une LED sur un Raspberry Pi 2 avec du Windows 10 IoT Core

Cet article fait partie d'une série concernant Windows 10, le Raspberry Pi 2 et l'IoT en général.

Maintenant que nous avons installé Windows 10 sur le Raspberry Pi 2, il va falloir configurer un peu Visual Studio avant de pouvoir s'amuser à allumer des LEDs.

Voici les autres articles de la série :

Pré-requis

Logiciels

Matériel

Autres

  • Quelques notions d’électronique

Allumer une LED en C#

Configurer Visual Studio

Après avoir installé Visual Studio 2015 Preview sur votre Windows 10, il va falloir activer le mode développeur.
Pour cela c'est plutôt simple :

  • On va d'abord lancer Regedit
  • On va ensuite placer les valeurs de ces deux DWORD à "1"
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock\AllowAllTrustedApps
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock\AllowDevelopmentWithoutDevLicense

Vous pouvez maintenant lancer le fichier qui se trouvait dans le zip contenant l'image de Windows 10 IoT

WindowsDeveloperProgramForIoT.msi   

Réaliser le montage

Avant de programmer, il va falloir encore faire un petit quelque chose : le montage :-D

Je vais partir du fait que vous avez un Breadboard et un Cobbler, si pas, ce sera juste un peu plus compliqué pour le câblage.

Nous allons donc simplement placer une LED sur notre Breadboard (sans oublier la résistance qui va avec, afin de ne pas la faire brûler) et la relier à un port GPIO du RasPi.

Nous allons donc brancher les éléments comme cela :

  • Une résistance pour la LED (560 Ohm dans mon cas, celle fournie avec votre LED devrait faire l'affaire) sur le 3.3V
  • La grande Pin de la LED sur la sortie de la résistance
  • La petite Pin de la LED sur un port GPIO (numéro 6 dans mon cas)

Voici à quoi devrait ressembler le montage :

Placement des éléments sur le Breadboard

Commencer à coder

Maintenant, il va falloir allumer cette fameuse LED, on va tout simplement faire un petit programme qui lance la LED au démarrage et ... c'est tout ... rien de bien compliqué pour commencer, le but est de surtout voir comment utiliser les ports GPIO en C#.

Tout d'abord, nous allons créer un projet C# Universal App :
Création d'un projet Universal App dans Visual Studio

Il faut aussi penser à ajouter les références vers le Windows IoT Extension SDK :

Ajout des références vers le Windows IoT Extension SDK

Ensuite, nous allons nous rendre dans le fichier MainPage.xaml.cs (on remarquera qu'il nous est possible de faire des interfaces qui seront affichées à l'écran du RasPi) et nous allons commencer à coder, mais d'abord ajoutons le using pour l'utilisation des Gpio :

using Windows.Devices.Gpio;

D'abord, il nous faut quelques variables pour retenir l'état de la LED, son port, et accéder facilement à son Gpio :

private int greenLedStatus = 0;
private const int GREEN_LED_PIN = 6;
private GpioPin greenPin;

Nous allons maintenant simplement créer une fonction qui initialise tout ce qui est relié aux Gpio :

public MainPage()
{
  this.InitializeComponent();
  AllumerLed();
}
void AllumerLed()
{
  // On initialise le contrôleur Gpio
  var gpio = GpioController.GetDefault();

  // Si jamais un problème s'est déclaré, on arrête tout
  if (gpio == null)
  {
    greenPin = null;
    return;
  }

  // On va ouvrir le port que nous avons fixé tout à l'heure (le 6)
  greenPin = gpio.OpenPin(GREEN_LED_PIN);

  // Encore quelques précautions en cas d'erreur
  if (greenPin == null)
  {
    return;
  }

  // On passe la LED en Off et on set le Drive Mode
  // High = off, Low = on
  greenPin.Write(GpioPinValue.High);
  greenPin.SetDriveMode(GpioPinDriveMode.Output);

  // Led On
  FlipGreenLED();
}

Une petite fonction pour switcher l'état de la LED

private void FlipGreenLED()
{
  if (greenLEDStatus == 0)
  {
    if (greenPin != null)
    {
      greenLEDStatus = 1;
      // Encore une fois, pour allumer une LED il faut la passer sur Low
      greenPin.Write(GpioPinValue.Low);
    }
  }
  else
  {
    if (greenPin != null)
    {
      greenLEDStatus = 0;
      // Et pour l'éteindre : High
      greenPin.Write(GpioPinValue.High);
    }
  }
}

On prévoit aussi de quoi libérer la pin de la LED quand le programme se coupe

private void MainPage_Unloaded(object sender, object args)
{
  greenPin.Dispose();
}

Et voilà, nous avons un code qui devrait fonctionner, il ne reste qu'à le déployer et à voir ce que ça donne sur le RasPi.

Déployer sur le Raspberry Pi 2

Avant de déployer, n'oublier pas de passer votre projet en ARM.
Maintenant il suffit de sélectionner "Remote Machine" dans le menu et de lancer le déploiement, une fenêtre devrait s'ouvrir afin de rentrer l'adresse IP de votre RasPi ainsi que les identifiants (attention, il faut choisir le mode d'identification "none" si vous n'avez pas modifié la configuration de base).

Déployer l'application sur le Raspberry Pi

Vous pouvez maintenant déployer votre application et vérifier que tout fonctionne :
La LED s'est bien allumée ... ça marche :-D

Et ça fonctionne \o/

Pour vous entraîner un peu, vous pourriez simplement ajouter un bouton dans l'interface qui permet de switcher l'état de la LED (on/off), ou encore la faire clignoter, vous pourriez aussi en ajouter une 2ème (n'oubliez pas de la placer sur un Gpio différent) et les faire clignoter alternativement ...

La suite de cette série sera consacrée à la partie récupération de données depuis un Gpio, vous verrez, c'est tout aussi simple.

Quelques liens utiles