Différences entre versions de « Pi-WiringPi-Exemple-ShieldRGB »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
 
(7 versions intermédiaires par le même utilisateur non affichées)
Ligne 2 : Ligne 2 :
  
 
== Intro ==
 
== Intro ==
Le [http://mchobby.be/PrestaShop/product.php?id_product=253 Shield LCD RGB pour Pi d'Adafruit] (aussi appelé ''RGB LCD plate'' et [http://mchobby.be/PrestaShop/product.php?id_product=253 disponible chez MCHobby]) est ... is a nice little display which adds 5 push-buttons to the display board, and sits on-top of the Raspberry Pi. The RGB part refers to the backlight which, as you’ve guessed can be set to various colours by combining the red, green and blue backlights.
+
 
 +
{{bloc-etroit|text=Le {{pl|253|Shield LCD RGB pour Pi d'Adafruit}} (aussi appelé ''RGB LCD plate'' et {{pl|253|disponible chez MCHobby}}) est un chouette carte équipé d'un afficheur, de 5 boutons et s'installe sur le GPIO du Raspberry Pi. L'afficheur RGB dispose d'un rétro-éclairage RGB – qui, comme vous pouvez le deviner, permet de combiner plusieurs couleurs de base rouge, vert et bleu pour le rétro-éclairage. }}
  
 
{{ADFImage|RASP-LCD-RGB-Intro-02.jpg|480px}}
 
{{ADFImage|RASP-LCD-RGB-Intro-02.jpg|480px}}
  
Gordon chose it to use as a bit of a test-bed to make sure that one of the existing devLibs – the [[Pi-WiringPi_dev-lib_lcd-library|LCD character driver]] should work not only with the Pi’s on-board GPIO, but through a GPIO expander chip – the Adafruit display uses the MCP23017 I2C GPIO expander chip.
+
Gordon à choisi ce produit pour tester la devLibs existante le [[Pi-WiringPi_dev-lib_lcd-library|pilote afficheur LCD]] qui ne devrait pas seulement fonctionner avec les afficheur LCD brancher le port GPIO, mais également par l'intermédiaire d'un circuit GPIO expander. L'afficher d'AdaFruit utilise justement le circuit intégré GPIO Expander MCP23017 qui fonctionne en I2C.
  
 
== Brancher & analyser ==
 
== Brancher & analyser ==
  
It comes as a kit to be soldered and there weren’t any real issues – although the one thing that I find annoying was that the holes in the PCB for the 3 resistors were slightly wider than the resistor with the legs bent close to it – necessitating some small adjustments! A minor niggle though.
+
L'afficheur est livré en kit qu'il faut souder (voir [[RASP-LCD-RGB|nos instructions en Français]]), cela ne représente généralement pas de problèmes.
 
 
So with that in-mind, a quick modification to my existing lcd.c test program and it was running almost immediately without any hitches.
 
  
Once I’d soldered it and checked to make sure no solder bridges, etc. I plugged it in and loaded up the I2C driver to see if I could see it:
+
Avec cela en tête, une rapide modification au fichier lcd.c du programme de test et tout fonctionnait rapidement presque sans aucun soucis.
  
To see the output of this, you would need to connect a single LED to the GPIO connector of the Raspberry Pi as follows:
+
Une fois la platine soudé et après vérification qu'il n'y avait pas de "pont de soudure", etc. Gordon à branché le LCD sur son Rapsberry Pi et chargé le pilote I2C pour voir comment il serait perçu par le système:
  
 
  <nowiki>gpio load i2c
 
  <nowiki>gpio load i2c
 
gpio i2cd</nowiki>
 
gpio i2cd</nowiki>
  
and I saw the MCP23017 at its default address of 0×20. (There are solderable jumpers under the board to change this if required)
+
Où il est possible de voir le MCP23017 à son adresse par défaut qui est 0×20 (Il existe des pastilles/jumpers à souder pour modifier cette adresse par défaut si cela est nécessaire)
  
 
  <nowiki>    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
 
  <nowiki>    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
Ligne 33 : Ligne 32 :
 
70: -- -- -- -- -- -- -- --</nowiki>
 
70: -- -- -- -- -- -- -- --</nowiki>
  
I consulted the schematic to work out the pin assignments on the device – the display is connected up on 4-bit mode and the display control signals, buttons, and the LED outputs taking up almost all the other 16 GPIO pins.
+
Après consultation du schéma pour vérifier l'utilisation des broches du MCP23017 pour commander l'afficheur sur la carte. L'afficheur est connecter en mode 4-bit et utilise les signaux de contrôle de l'afficheur. LE MCP23017 est également utilisé pour les boutons et les sorties pour les LEDs du retro-éclairage. Avec tout cela, les 16 broches broches du GPIO Expander (MCP23017) sont presque toutes utilisées.
  
Some quick testing using the GPIO command to verify I’d interpreted it OK:
+
Quelques tests rapides en utilisant la commande GPIO pour s'assurer que tout fonctionne comme attendu:
  
 
  <nowiki>gpio -x mcp23017:100:0x20 mode 106 out
 
  <nowiki>gpio -x mcp23017:100:0x20 mode 106 out
 
gpio -x mcp23017:100:0x20 write 106 0</nowiki>
 
gpio -x mcp23017:100:0x20 write 106 0</nowiki>
  
and the Red backlight LED came on. (It seems the backlight uses negative logic) Similarly for the green and blue:
+
Et la LED rouge du rétro éclairage s'allume (Le rétro-éclairage utilise une logique inversée).
 +
 
 +
De façon similaire pour la LED verte et bleue du rétro-éclairage:
  
  <nowiki>gpio -x mcp23017:100:0x20 mode 107 out # Green
+
  <nowiki>gpio -x mcp23017:100:0x20 mode 107 out # Vert (green)
 
gpio -x mcp23017:100:0x20 write 107 0
 
gpio -x mcp23017:100:0x20 write 107 0
gpio -x mcp23017:100:0x20 mode 108 out # Blue
+
gpio -x mcp23017:100:0x20 mode 108 out # Bleu (blue)
 
gpio -x mcp23017:100:0x20 write 108</nowiki>
 
gpio -x mcp23017:100:0x20 write 108</nowiki>
  
Next, a quick modification to my existing lcd.c test program and it was running almost immediately without any hitches.
 
  
So to make it work with wiringPi v2, it’s just a matter of setting up the mcp23017 as an extension module, then using the new pins defined for the display itself:
+
== L'assignation des broches ==
 +
Ensuite, une modification rapide du programme de test lcd.c et tout fonctionnait presque immédiatement sans problème.
  
  <nowiki>// Defines for the Adafruit Pi LCD interface board
+
Donc, pour le faire fonctionner avec wiringPi v2, il suffit de définir le mcp23017 comme module d'extension et d'utiliser ensuite la nouvelle assignation des broches (''pin assignment'') pour commander l'afficheur lui-même:
 +
 
 +
  <nowiki>// Définition d'interface pour l'afficheur LCD d'AdaFruit (shield pour Raspberry)
  
 
#define AF_BASE        100
 
#define AF_BASE        100
Ligne 72 : Ligne 75 :
 
#define AF_UP          (AF_BASE +  3)
 
#define AF_UP          (AF_BASE +  3)
 
#define AF_LEFT        (AF_BASE +  4)</nowiki>
 
#define AF_LEFT        (AF_BASE +  4)</nowiki>
 +
 +
Pour rappel:
 +
* AF_RED commande le rétro éclairage rouge ("Green" pour vert et "Blue" pour bleu)
 +
* AF_E, AF_RW, AF_RS sont les signaux de contrôle de l'afficheur LCD
 +
* AF_DB4, AF_DB5, AF_DB6, AF_DB7 compose le bus de donnée de l'afficheur (à 4 bits)
 +
* AF_SELECT pour le bouton de sélection
 +
* AF_RIGHT pour le bouton de droite et les correspondance suivante: AF_DOWN=bas, AF_LEFT=gauche, AF_UP=Haut
  
 
== Configurer ==
 
== Configurer ==
 +
 +
<small>Note de MCHobby:<br/>Comme il y a une base (AF_BASE) définie pour permettre l'association et l'identification du MCP23017 à l'adresse 0x20 sur le bus I2C, lcdInit sera capable d'adresser l'afficheur par l'intermédiaire du MCP23017.
 +
En effet, a titre d'exemple, AF_RS contient la valeur de base + un numéro de broche du MCP23017... ce qui indique à lcdInit qu'il y a un intermédiaire de communication entre l'afficheur et le Raspberry Pi. Cet intermédiaire peut être facilement retrouvé car il est déclaré avec mcp23017Setup... qui est dans notre cas un mcp23017 (donc un circuit-intégré pour bus I2C) à l'adresse 0x20 (sur le bus I2C) :-)</small>
 +
 +
Revenons donc au code de Gordon:
  
 
  <nowiki>  mcp23017Setup (AF_BASE, 0x20) ;
 
  <nowiki>  mcp23017Setup (AF_BASE, 0x20) ;
 
   lcd = lcdInit (2, 16, 4, AF_RS, AF_E, AF_DB4,AF_DB5,AF_DB6,AF_DB7, 0,0,0,0) ;</nowiki>
 
   lcd = lcdInit (2, 16, 4, AF_RS, AF_E, AF_DB4,AF_DB5,AF_DB6,AF_DB7, 0,0,0,0) ;</nowiki>
  
That’s enough to get the display going, but we really need to turn the backlight on and put the button pins into input mode with the internal pull-ups enabled the buttons short to 0v.
+
Voila, c'est suffisant pour commander l'afficheur. Mais, bien entendu, nous voulons aussi commander le rétro-éclairage et placer les broches des boutons en mode INPUT (entrée) en activant les résistances Pull-Up du MCP23017 la pression sur un bouton ramène le potentiel de la broche à 0v.
  
Please do see the program source to see how the backlight is setup and the buttons read, but there is nothing special to reading them – e.g. I modified the code that waits for the Enter key to be pressed in the original to wait for the “Select” button on the display:
+
Référez vous au code source du programme pour voir comment est commandé le rétro-éclairage et la saisie de l'état des boutons... mais il n'y a pas grand chose de transcendantal à lire – Par exemple, Gordon a modifier le code pour attendre qu'un bouton "SELECT" soit pressé alors que le programme original attendait que vous frappiez la touche "Entrée".
  
 
  <nowiki>static void waitForEnter (void)
 
  <nowiki>static void waitForEnter (void)
Ligne 86 : Ligne 101 :
 
   printf ("Press SELECT to continue: ") ; fflush (stdout) ;
 
   printf ("Press SELECT to continue: ") ; fflush (stdout) ;
  
   while (digitalRead (AF_SELECT) == HIGH)      // Wait for push
+
   while (digitalRead (AF_SELECT) == HIGH)      // Attendre la pression du bouton SELECT
 
     delay (1) ;
 
     delay (1) ;
  
   while (digitalRead (AF_SELECT) == LOW)        // Wait for release
+
   while (digitalRead (AF_SELECT) == LOW)        // Attendre que le bouton soit relaché
 
     delay (1) ;
 
     delay (1) ;
  
Ligne 95 : Ligne 110 :
 
}</nowiki>
 
}</nowiki>
  
(it could probably be done better and with some debouncing, but for this little demo, that’s more than sufficient – demonstrating that a simple digitalRead() function call is all you need to read the button via wiringPi which has the mcp23017 registered with it).
+
Note: Cette fonction peut être mieux réalisée en introduisant du [http://arduino103.blogspot.be/2011/12/boutons-contacts-et-deparatisage.html déparasitage logiciel]... mais pour cette démo c'est plus que suffisant. Ce code démontre qu'une simple fonction digitalRead() est tout ce dont vous avez besoin pour lire l'état d'un bouton raccordé sur un MCP23017. PiWiring à enregistré les informations nécessaire permettant d'accéder au bouton en toute transparence.
  
The demo program uses the up/down buttons to cycle through the LED colours – from Off to Red, Green, Yellow, Blue, Purple, Cyan and finally White.
+
Le programme de démonstration utilise les boutons haut/bas (''up/down'') pour changer la couleur dans l'ordre suivant: éteint à rouge, vert, jaune, bleu, pourpre, cyan et blanc pour terminer.
  
 
[[Fichier:Pi-WiringPi-Exemple-ShieldRgb-01.jpg|480px]]<br /><small>Source: [http://wirinPi.com wiringPi.com]</small>
 
[[Fichier:Pi-WiringPi-Exemple-ShieldRgb-01.jpg|480px]]<br /><small>Source: [http://wirinPi.com wiringPi.com]</small>
  
 
{{Pi-WiringPi-TRAILER}}
 
{{Pi-WiringPi-TRAILER}}

Version actuelle datée du 30 janvier 2014 à 21:27


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.

Intro

Le Shield LCD RGB pour Pi d'Adafruit (aussi appelé RGB LCD plate et disponible chez MCHobby) est un chouette carte équipé d'un afficheur, de 5 boutons et s'installe sur le GPIO du Raspberry Pi. L'afficheur RGB dispose d'un rétro-éclairage RGB – qui, comme vous pouvez le deviner, permet de combiner plusieurs couleurs de base rouge, vert et bleu pour le rétro-éclairage.

RASP-LCD-RGB-Intro-02.jpg
Crédit: AdaFruit Industries www.adafruit.com

Gordon à choisi ce produit pour tester la devLibs existante – le pilote afficheur LCD qui ne devrait pas seulement fonctionner avec les afficheur LCD brancher le port GPIO, mais également par l'intermédiaire d'un circuit GPIO expander. L'afficher d'AdaFruit utilise justement le circuit intégré GPIO Expander MCP23017 qui fonctionne en I2C.

Brancher & analyser

L'afficheur est livré en kit qu'il faut souder (voir nos instructions en Français), cela ne représente généralement pas de problèmes.

Avec cela en tête, une rapide modification au fichier lcd.c du programme de test et tout fonctionnait rapidement presque sans aucun soucis.

Une fois la platine soudé et après vérification qu'il n'y avait pas de "pont de soudure", etc. Gordon à branché le LCD sur son Rapsberry Pi et chargé le pilote I2C pour voir comment il serait perçu par le système:

gpio load i2c
gpio i2cd

Où il est possible de voir le MCP23017 à son adresse par défaut qui est 0×20 (Il existe des pastilles/jumpers à souder pour modifier cette adresse par défaut si cela est nécessaire)

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

Après consultation du schéma pour vérifier l'utilisation des broches du MCP23017 pour commander l'afficheur sur la carte. L'afficheur est connecter en mode 4-bit et utilise les signaux de contrôle de l'afficheur. LE MCP23017 est également utilisé pour les boutons et les sorties pour les LEDs du retro-éclairage. Avec tout cela, les 16 broches broches du GPIO Expander (MCP23017) sont presque toutes utilisées.

Quelques tests rapides en utilisant la commande GPIO pour s'assurer que tout fonctionne comme attendu:

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

Et la LED rouge du rétro éclairage s'allume (Le rétro-éclairage utilise une logique inversée).

De façon similaire pour la LED verte et bleue du rétro-éclairage:

gpio -x mcp23017:100:0x20 mode 107 out # Vert (green)
gpio -x mcp23017:100:0x20 write 107 0
gpio -x mcp23017:100:0x20 mode 108 out # Bleu (blue)
gpio -x mcp23017:100:0x20 write 108


L'assignation des broches

Ensuite, une modification rapide du programme de test lcd.c et tout fonctionnait presque immédiatement sans problème.

Donc, pour le faire fonctionner avec wiringPi v2, il suffit de définir le mcp23017 comme module d'extension et d'utiliser ensuite la nouvelle assignation des broches (pin assignment) pour commander l'afficheur lui-même:

// Définition d'interface pour l'afficheur LCD d'AdaFruit (shield pour Raspberry)

#define AF_BASE         100
#define AF_RED          (AF_BASE + 6)
#define AF_GREEN        (AF_BASE + 7)
#define AF_BLUE         (AF_BASE + 8)

#define AF_E            (AF_BASE + 13)
#define AF_RW           (AF_BASE + 14)
#define AF_RS           (AF_BASE + 15)

#define AF_DB4          (AF_BASE + 12)
#define AF_DB5          (AF_BASE + 11)
#define AF_DB6          (AF_BASE + 10)
#define AF_DB7          (AF_BASE +  9)

#define AF_SELECT       (AF_BASE +  0)
#define AF_RIGHT        (AF_BASE +  1)
#define AF_DOWN         (AF_BASE +  2)
#define AF_UP           (AF_BASE +  3)
#define AF_LEFT         (AF_BASE +  4)

Pour rappel:

  • AF_RED commande le rétro éclairage rouge ("Green" pour vert et "Blue" pour bleu)
  • AF_E, AF_RW, AF_RS sont les signaux de contrôle de l'afficheur LCD
  • AF_DB4, AF_DB5, AF_DB6, AF_DB7 compose le bus de donnée de l'afficheur (à 4 bits)
  • AF_SELECT pour le bouton de sélection
  • AF_RIGHT pour le bouton de droite et les correspondance suivante: AF_DOWN=bas, AF_LEFT=gauche, AF_UP=Haut

Configurer

Note de MCHobby:
Comme il y a une base (AF_BASE) définie pour permettre l'association et l'identification du MCP23017 à l'adresse 0x20 sur le bus I2C, lcdInit sera capable d'adresser l'afficheur par l'intermédiaire du MCP23017. En effet, a titre d'exemple, AF_RS contient la valeur de base + un numéro de broche du MCP23017... ce qui indique à lcdInit qu'il y a un intermédiaire de communication entre l'afficheur et le Raspberry Pi. Cet intermédiaire peut être facilement retrouvé car il est déclaré avec mcp23017Setup... qui est dans notre cas un mcp23017 (donc un circuit-intégré pour bus I2C) à l'adresse 0x20 (sur le bus I2C) :-)

Revenons donc au code de Gordon:

  mcp23017Setup (AF_BASE, 0x20) ;
  lcd = lcdInit (2, 16, 4, AF_RS, AF_E, AF_DB4,AF_DB5,AF_DB6,AF_DB7, 0,0,0,0) ;

Voila, c'est suffisant pour commander l'afficheur. Mais, bien entendu, nous voulons aussi commander le rétro-éclairage et placer les broches des boutons en mode INPUT (entrée) en activant les résistances Pull-Up du MCP23017 – la pression sur un bouton ramène le potentiel de la broche à 0v.

Référez vous au code source du programme pour voir comment est commandé le rétro-éclairage et la saisie de l'état des boutons... mais il n'y a pas grand chose de transcendantal à lire – Par exemple, Gordon a modifier le code pour attendre qu'un bouton "SELECT" soit pressé alors que le programme original attendait que vous frappiez la touche "Entrée".

static void waitForEnter (void)
{
  printf ("Press SELECT to continue: ") ; fflush (stdout) ;

  while (digitalRead (AF_SELECT) == HIGH)       // Attendre la pression du bouton SELECT
    delay (1) ;

  while (digitalRead (AF_SELECT) == LOW)        // Attendre que le bouton soit relaché
    delay (1) ;

  printf ("OK\n") ;
}

Note: Cette fonction peut être mieux réalisée en introduisant du déparasitage logiciel... mais pour cette démo c'est plus que suffisant. Ce code démontre qu'une simple fonction digitalRead() est tout ce dont vous avez besoin pour lire l'état d'un bouton raccordé sur un MCP23017. PiWiring à enregistré les informations nécessaire permettant d'accéder au bouton en toute transparence.

Le programme de démonstration utilise les boutons haut/bas (up/down) pour changer la couleur dans l'ordre suivant: éteint à rouge, vert, jaune, bleu, pourpre, cyan et blanc pour terminer.

Pi-WiringPi-Exemple-ShieldRgb-01.jpg
Source: wiringPi.com


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.