Commander une broche Arduino 5V depuis un Raspberry-Pi 3.3v

Un petit article faisant suite à une demande de support:
Comment commander une entrée 5V d'un Arduino depuis un Raspberry-Pi 3.3V ?
 La réponse courte est:
  1. Configurer l'entrée Arduino en Pull-Up
  2. Utiliser un transistor P2N2222 pour commuter l'entrée Arduino à la masse.
  3. Commander le transistor avec le GPIO du Raspberry-Pi
 
Entrée PullUp Arduino
En activant la résistance pullUp d'une entrée Arduino avec pinMode( 8, INPUT_PULLUP ) , la tension de l'entrée est rappelée à +5V si rien ne s'y passe.
Par défaut, l'entrée est au niveau HAUT.
Il suffit alors d'utiliser un simple bouton pour brancher l'entrée directement sur la masse... et forcer l'entrée au niveau BAS.

Utiliser un transistor comme bouton poussoir
En utilisant un simple transistor, nous pouvons commuter l'entrée Arduino à la masse. Etant donné que la résistance pull-up est assez important, le courant de commuté par le transistor restera assez faible .
Il ne reste plus qu'à commander le transistor depuis le Raspberry.

En utilisant une résistance de 5.6 KOhms, nous sommes assuré de ne pas dépasser 3.3v / 5600 = 0.00059 (soit 0.59mA, en omettant Vce).
Dans la réalité, le courant sera de 0.48mA, ce qui est bien inférieur à la limite du GPIO Raspberry Pi :-)

Le programme de test Arduino
Tout simple, il allume la LED sur la broche 13 lorsque l'entrée 8 est au niveau haut.
Cela permettra de vérifier le bon fonctionnement de l'interface avec le transistor.

void setup() {
  // put your setup code here, to run once:
  pinMode( 13, OUTPUT );
  pinMode( 8, INPUT_PULLUP );
}

void loop() {
  // put your main code here, to run repeatedly:
  int value = digitalRead( 8 );
  digitalWrite( 13, value );
  delay( 300 );
}

Attention, logique inversée!
Si l'on met le GPIO du Raspberry-Pi au niveau haut (3.3v), le transistor conduit et l'entrée Arduino est à la masse (donc niveau bas).

Bon week-end à tous,
Dominique