Pi-WiringPi-Exemple-Quick2Wire-GPIOExtension

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Carte d'extension GPIO à 16 broches

Vous pouvez ignorer cette section si vous ne disposez pas encore de module Quick2Wire.

Pi-WiringPi-Exemple-Quick2Wire-21.jpg
Source: wiringPi.com
La carte d'extension Quick2Wire à 16 broches digitale. Le port Port A, bit 0 connecté sur une LED à l'aide d'une résistance de 220Ω.

La carte d'extension GPIO utilise un circuit intégré MCP23017. Ce fournit 16 broches d'entrée/sortie additionnelles que vous pouvez utiliser dans vos propres programmes de la même façon que si vous utiliser une broche du GPIO de votre Raspberry-Pi.

Pas de résistance de protection

A l'opposé de la carte d'extension 8 entrée/sortie de Quick2Wire, les IO (entrées/sorties) de la carte utilisé dans cet exemple ne disposent pas de résistance de protection ni de protection contre les surtensions.

Si vous désirez utiliser des périphériques en logique 5v, vous pouvez ajouter un convertisseur de niveau logique comme celui-ci ou celui-là.

Raccordements

Pour faire quelques tests, nous allons commencer par raccorder une LED connectée que le Port A, bit 0.

Le circuit ci-dessus utilise une LED connectée sur le MCP23017, une résistance 220Ω pour limiter le courant... et finalement l'autre patte de la LED (la plus courte) est branchée sur le GND/0v de la carte principale.

Les commandes

Les commandes suivantes allume et eteint la LED.

gpio -x mcp23017:100:0x20 mode 100 out
gpio -x mcp23017:100:0x20 write 100 1
gpio -x mcp23017:100:0x20 write 100 0

Vérifiez le cablage si cela ne fonctionne pas correctement, que la LED est raccordée dans le bon sens, que le MCP23017 apparait sous l'adresse 0×20 dans le résultat de la commande gpio i2cd. (Si le résultat est différent de 0x20 alors substituez 0x20 par cette cette autre valeur dans les commandes ci-dessus).

Que font les commandes?

Que font les différentes commandes gpio?

Le flag -x informe la commande gpio d'utiliser un module d'extension... le mcp23017 dans notre cas.

Les paramètres (séparés par les ":") pour le module mcp23017 sont:

  1. Le nouveau numéro de base pour le brochage (base number) qui est 100 dans notre cas
  2. l'adresse du circuit intégré sur le le bus I2C. 0×20 dans cet exemple.

A partir de ce point, il est possible d'utiliser la plupart des commandes standard gpio de façon totalement transparente.

Script de test

Nous pouvons utiliser une variante du script utilisant le bouton de la carte principale pour tester le module MCP23017.

gpio mode 0 in
while true; do gpio -x mcp23017:100:0x20 write 100 `gpio read 0`; done

Le LED du module doit s'allumer lorsque l'on presse le bouton de la carte principale. Rappelons que le bouton est raccordé sur la broche 0 du GPIO du Raspberry Pi si le cavalier est bien en place (voir installation de la carte principale pour plus d'information)

Programme Blink

Le sous répertoire q2w/examples/ (exemple) dans le répertoire de wiringPi contient le programme blink-io.c – c'est une version du programme blink.c adapté pour utiliser la carte GPIO expander (à 16 entrées/sorties) de QuickToWire. Ce programme fait clignoter la LED de la carte principale en même temps que la LED connectée sur la carte GPIO.

Comparer ce programme avec blink.c pour comprendre le fonctionnement.

Utiliser les commandes suivantes pour le compiler et l'exécuter:

gcc -Wall -oblink-io blink-io.c -lwiringPi
sudo ./blink-io

Test Avancé

Pour un test avancé, nous utilsons une petite carte avec 10 LED et un petit bouton poussoir.

Pi-WiringPi-Exemple-Quick2Wire-22.jpg
Source: wiringPi.com

Voici une variante du programme utilisé dans wiringPi v2 pour tester sa capacité à manipuler le mcp23017 GPIO expander:

/*
 * binary.c:
 *      Utilisation de la carte d'extension GPIO 16 bit de Quick 2 wire
 *
 * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
 ***********************************************************************
 * (fr) Traduction Francaise par Meurisse D. pour MCHobby.be. Crédit de traduction MCHobby.be
 *      Tutoriel WiringPi traduit disponible sur http://mchobby.be/wiki/index.php?title=Pi-WiringPi
 *
 * (en) French translation by Meurisse D. for MCHobby.be. Translation credit to MCHobby.be
 *      Translated WiringPi's tutorial available at http://mchobby.be/wiki/index.php?title=Pi-WiringPi   
 */

#include <stdio.h>
#include <wiringPi.h>
#include <mcp23017.h>

#define Q2W_BASE        100

int main (void)
{
  int i, bit ;

// Activer le GPIO sur de la carte

  wiringPiSetup () ;

// Ajouter le mcp23017 sur la carte q2w

  mcp23017Setup (Q2W_BASE, 0x20) ;

  printf ("Raspberry Pi - Quick2Wire MCP23017 Test\n") ;

// Le bouton de la carte principale définit comme entrée ("input" en anglais).
// Ce bouton est raccordé sur la broche 0 du GPIO du Raspberry Pi

  pinMode (0, INPUT) ;

// Déclarer les 10 première de la carte q2w comme sortie ("output" en anglais):

  for (i = 0 ; i < 10 ; ++i)
    pinMode (Q2W_BASE + i, OUTPUT) ;

// La dernière broches de la carte q2c comme entrée et activer la 
// résistance Pull-Up interne

  pinMode         (Q2W_BASE + 15, INPUT) ;
  pullUpDnControl (Q2W_BASE + 15, PUD_UP) ;

  for (;;)
  {
    for (i = 0 ; i < 1024 ; ++i)
    {
      for (bit = 0 ; bit < 10 ; ++bit)
        digitalWrite (Q2W_BASE + bit, i & (1 << bit)) ;

      while (digitalRead (0) == HIGH)           // tant que bouton est enfoncer.  
        delay (1) ;

      if (digitalRead (Q2W_BASE + 15) == HIGH)  // tant que bouton n'est pas enfoncé
        delay (100) ;
    }
  }
  return 0 ;
}

Ce programme se nomme binary.c et est disponible dans le répertoire q2w/examples des sources de wiringPi.

Utilisez les commandes suivantes pour le compiler et l'exécuter:

gcc -Wall -o binary binary.c -lwiringPi
sudo ./binary

Poussez le bouton de la carte principle pour arrêter le conteur et poussez le bouton de la carte à LED pour augmenter la vitessele programme.

La carte à LED est simplement composé de 10 LEDs et 10 résistances en série + un simple bouton poussoir raccordé sur la masse/0v/GND/ground.

Notez que ce programme utilise deux boutons – celui de la carte principal de Quick2Wire et un bouton branché sur la petite carte de test. Celui sur la carte principale Q2W retourne 0 (ou LOW) quand il n'est pas pressé et 1 (ou HIGH) quand il est pressé, tandis que le bouton sur la carte d'extension fonctionne à l'opposé et 1 lorsqu'il n'est pas pressé et 0 lorsqu'il est pressé.

Conclusion

Utiliser le module d'extension MCP23017 de Quick2Wire avec wiringPi est aussi simple que d'utiliser directement le GPIO du Raspberry. Assignez un nouveau numéro de base (valeur de Q2W_BASE) pour l'identification des broches.

Pour les les 16 I/O du GPIO cela revient à numéroter les sorties entre Q2W_BASE+0 et Q2W_BASE+15 (donc de 100 à 100+15).

Ensuite, il ne reste plus qu'a utiliser les fonction digitalRead(), digitalWrite(), pinMode() comme avant.


Source: WiringPi.com. WiringPi est une libraire sous licence GPL écrite par Gordon Henderson. Crédit: wiringpi.com

Traduit de l'anglais par Meurisse D. pour MCHobby.be

Traduit avec l'accord de Gordon Henderson, créateur de wiringPi - Translated with authorization of Gordon Henderson, creator of wiringPi

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.