Quand on travaille avec Arduino, ESP8266 ou ESP32, on se heurte vite à une limite simple : le nombre de GPIO disponibles.
Plutôt que d’empiler des cartes ou de bricoler des multiplexeurs douteux, il existe une solution simple, robuste et industrielle : les registre à décalage.
Deux familles dominent :
- SIPO (Serial In / Parallel Out)
- PISO (Parallel In / Serial Out)
Pourquoi utiliser des registres à décalage ?
- Économiser des GPIO
- Simplifier le câblage
- Chaîner plusieurs circuits
- Compatible Arduino / ESP / Raspberry Pi
- Très utilisé en industrie, domotique, vending machines, LED panels
👉 3 broches suffisent pour piloter 8, 16, 32 sorties ou entrées.
SIPO – Serial In, Parallel Out

Principe
Tu envoies les données bit par bit en série, et le circuit les expose en parallèle sur ses sorties.
Circuit le plus courant
74HC595
- 8 sorties digitales
- Chaînable à l’infini
- Très stable jusqu’à plusieurs MHz
Broches clés
| Broche | Rôle |
|---|---|
| DS | Donnée série |
| SH_CP | Clock (shift) |
| ST_CP | Latch |
| Q0–Q7 | Sorties |
| OE | Enable (optionnel) |
| MR | Reset (optionnel) |
Exemple Arduino – piloter 8 LEDs
int dataPin = 11;
int clockPin = 13;
int latchPin = 10;
void setup() {
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
}
void loop() {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B10101010);
digitalWrite(latchPin, HIGH);
delay(500);
}
Cas d’usage SIPO
- LEDs
- Relais
- MOSFETs
- Afficheurs 7 segments
- Panneaux lumineux
- Cartes de puissance
PISO – Parallel In, Serial Out

Principe
Tu lis plusieurs entrées simultanément, puis tu récupères leur état en série.
Circuit classique
74HC165
- 8 entrées digitales
- Lecture rapide et fiable
- Chaînable comme le 74HC595
Broches clés
| Broche | Rôle |
|---|---|
| PL | Parallel Load |
| CP | Clock |
| Q7 | Sortie série |
| D0–D7 | Entrées |
Exemple Arduino – lire 8 boutons
int loadPin = 8;
int clockPin = 12;
int dataPin = 11;
void setup() {
pinMode(loadPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, INPUT);
}
byte readInputs() {
digitalWrite(loadPin, LOW);
delayMicroseconds(5);
digitalWrite(loadPin, HIGH);
return shiftIn(dataPin, clockPin, MSBFIRST);
}
void loop() {
byte state = readInputs();
}
SIPO vs PISO – comparaison directe
| Critère | SIPO (74HC595) | PISO (74HC165) |
|---|---|---|
| Fonction | Sorties | Entrées |
| GPIO utilisés | 3 | 3 |
| Chaînable | Oui | Oui |
| Vitesse | Très élevée | Très élevée |
| Usage typique | LEDs, relais | Boutons, capteurs |
Arduino vs ESP : points d’attention
Arduino (5V)
- Compatible direct avec HC / HCT
- Tolérant
- Simple
ESP8266 / ESP32 (3.3V)
- Utiliser 74HCT ou alimenter en 3.3V
- Attention aux niveaux logiques
- Éviter OE/MR flottants
👉 En pratique : 74HC fonctionne souvent, mais ce n’est pas garanti à 100%.
Chaînage : scaler sans limite
- Q7’ → DS pour les SIPO
- Q7 → DS pour les PISO
- Même clock, même latch
- 8 bits par circuit
Exemple :
- 4 × 74HC595 = 32 sorties
- 2 × 74HC165 = 16 entrées
Alternatives modernes
| Composant | Type | Avantage |
|---|---|---|
| MCP23017 | I²C GPIO | Interruptions |
| PCF8574 | I²C GPIO | Ultra simple |
| TLC5940 | PWM LED | Dimming précis |
| ULN2003 | Driver | Puissance |
👉 Mais SIPO/PISO reste imbattable pour la simplicité et la robustesse.
Quand utiliser SIPO / PISO ?
✅ Tu veux :
- réduire le câblage
- garder un timing maîtrisé
- éviter I²C / SPI complexes
- faire du hardware fiable
❌ Évite si :
- besoin d’analogique
- besoin d’interruptions par pin
- besoin de retours d’état complexes
Conclusion
Les registres SIPO et PISO sont des briques fondamentales de l’électronique embarquée.
Ils sont simples, rapides, économiques et parfaitement adaptés à Arduino et ESP.
Si tu construis :
- une carte maison
- un automate
- un distributeur
- une domotique custom