Introduction
Dans le monde de l'électronique embarquée, nous nous retrouvons souvent limités par le nombre de broches d'entrée/sortie disponibles sur nos microcontrôleurs. C'est là qu'interviennent les extenseurs d'E/S comme le PCF8575. Ce composant polyvalent vous permet d'ajouter 16 broches d'E/S supplémentaires à votre projet MicroPython via une simple interface I2C. Dans cet article, nous explorons comment implémenter cette solution et résoudre les problèmes courants d'intégration.
Qu'est-ce que le PCF8575 ?
Le PCF8575 est un extenseur d'entrées/sorties 16 bits qui communique via le protocole I2C. Fabriqué principalement par Texas Instruments et NXP, ce composant permet d'ajouter 16 broches GPIO supplémentaires à votre microcontrôleur en n'utilisant que deux broches (SDA et SCL) pour la communication I2C.
Caractéristiques principales :
- 16 broches d'E/S bidirectionnelles
- Interface I2C (jusqu'à 400 kHz)
- Tension d'alimentation de 2,5V à 5,5V
- Courant de sortie jusqu'à 25mA par broche
- Adresse I2C configurable (généralement 0x20-0x27)
Mise en œuvre avec MicroPython
Le Code de Base
Pour interagir avec le PCF8575 en MicroPython, nous avons développé cette classe qui offre toutes les fonctionnalités nécessaires :
from machine import I2C, Pin
import time
class PCF8575:
def __init__(self, i2c, address=0x20):
"""
Initialise le PCF8575
Args:
i2c: objet I2C MicroPython
address: adresse I2C du PCF8575 (défaut: 0x20)
"""
self.i2c = i2c
self.address = address
self.buffer = bytearray(2)
# Initialiser toutes les broches comme entrées (1 = entrée, 0 = sortie)
self.write_all(0xFFFF)
def write_all(self, value):
"""
Écrit une valeur 16 bits sur toutes les broches
Args:
value: valeur 16 bits (0-65535)
"""
self.buffer[0] = value & 0xFF
self.buffer[1] = (value >> 8) & 0xFF
self.i2c.writeto(self.address, self.buffer)
def read_all(self):
"""
Lit l'état de toutes les broches
Returns:
Valeur 16 bits représentant l'état des 16 broches
"""
data = self.i2c.readfrom(self.address, 2)
return data[0] | (data[1] << 8)
def read_pin(self, pin):
"""
Lit l'état d'une broche spécifique
Args:
pin: numéro de la broche (0-15)
Returns:
État de la broche (0 ou 1)
"""
if not 0 <= pin <= 15:
raise ValueError("Le numéro de broche doit être entre 0 et 15")
value = self.read_all()
return 1 if value & (1 << pin) else 0
https://www.amazon.fr/dp/B08SJY1YLW?&linkCode=ll1&tag=sciencesapp-21&linkId=a34c35c1489374fd9b165b21bff78fc8&language=fr_FR&ref_=as_li_ss_tl
Utilisation Typique
Voici comment utiliser cette classe dans un projet concret :
# Initialiser I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
# Créer une instance PCF8575
pcf = PCF8575(i2c, address=0x20)
# Lire l'état de toutes les broches
pins_state = pcf.read_all()
print(f"État de toutes les broches: 0x{pins_state:04X} (binaire: {pins_state:016b})")
# Lire une broche spécifique
pin5_state = pcf.read_pin(5)
print(f"État de la broche 5: {pin5_state}")
Diagnostiquer les Problèmes Courants
L'un des défis fréquents lors de l'intégration du PCF8575 est l'erreur OSError: [Errno 19] ENODEV
qui indique que le périphérique n'est pas détecté. Pour résoudre ce problème, suivez ces étapes :
1. Scanner le Bus I2C
Avant toute chose, vérifiez quels périphériques sont présents sur votre bus I2C :
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=10000)
devices = i2c.scan()
print("Périphériques I2C trouvés:", [hex(device) for device in devices])
2. Vérifier les Connexions Physiques
- Alimentation : Assurez-vous que le PCF8575 est correctement alimenté (Vcc et GND)
- Lignes I2C : Vérifiez les connexions SDA et SCL
- Résistances pull-up : Les lignes SDA et SCL nécessitent des résistances de pull-up (typiquement 4,7kΩ)
3. Adresse I2C Correcte
L'adresse par défaut du PCF8575 est généralement 0x20, mais elle peut varier en fonction de la configuration des broches d'adressage A0, A1 et A2. Les adresses possibles vont de 0x20 à 0x27.
4. Diminuer la Fréquence I2C
Si les connexions sont longues ou si vous avez des problèmes de communication, essayez de réduire la fréquence I2C :
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=10000) # 10kHz au lieu de 100kHz
Applications Pratiques
Le PCF8575 peut être utilisé dans de nombreux projets :
- Extension de clavier matriciel - Connectez un grand clavier avec un minimum de broches
- Contrôle de multiples LED - Pilotez jusqu'à 16 LED avec seulement deux broches du microcontrôleur
- Lecture de capteurs multiples - Connectez plusieurs capteurs numériques comme des interrupteurs ou des détecteurs
- Interface pour écrans LCD - Utilisez-le pour contrôler les broches de données d'un écran LCD
Conclusion
L'intégration du PCF8575 avec MicroPython ouvre de nombreuses possibilités pour vos projets IoT et d'électronique. En suivant les conseils de dépannage présentés dans cet article, vous pourrez surmonter les défis d'intégration et tirer pleinement parti de cet extenseur d'E/S polyvalent.
N'hésitez pas à partager vos projets utilisant le PCF8575 dans les commentaires ci-dessous !