======== PCF 8574 ========

=== Module PCF 8574 ===

{{:start:arduino:esp32:capture_du_2022-03-23_16-49-17.jpg?direct&400 |}}


Lorsque vous jouez avec des microcontrôleurs, il est parfois nécessaire d'ajouter plus d'E/S numériques que la puce ne prend en charge de manière native. 

Le module PCF8574 (PCF8574T) est l'un des moyens les plus populaires d'étendre les E/S car il utilise le bus I2C qui ne nécessite que 2 broches sur le microcontrôleur. Il fournit 8 E/S numériques supplémentaires qui peuvent facilement être connectées en série jusqu'à 64. 

Notez que le module dispose d'une interface I 2 C facile à utiliser qui peut être configurée via des cavaliers mobiles pour utiliser l'une des huit adresses I2C .

Les trois broches d'adresse matérielle permettent à huit de chaque appareil d'être sur le même bus I 2 C, il peut donc y avoir jusqu'à 16 de ces extenseurs d'E/S PCF8574/[[https://www.hobbytronics.co.uk/pcf8574an-i2c-port-expander|PCF8574A]] ensemble sur le même bus I2C, prenant en charge jusqu'à 128 I/Os.


{{ :start:arduino:esp32:capture_du_2022-03-24_10-38-57.jpg?direct&400 |}}

Voici les principales caractéristiques du module présenté ici :

    --8 lignes de données bidirectionnelles
    --La fonction de boucle permet l'extension jusqu'à 8 modules / 64 lignes de données
    --Interface I 2 C avec adresses réglables par cavalier
    --Capacité de sortie d'interruption
    --Compatibilité 3.3V et 5V.


=== Adresses I2C ===

Il y a trois sauts de sélection d'adresse (A0-A2) qui déterminent quelle adresse I 2 C utiliser. Tels qu'ils sont livrés, ces cavaliers sont tous réglés sur le côté BAS (GND) comme indiqué sur l'image ci-dessus. 

Cela place le module à l'adresse esclave par défaut/de base de 0x20 (hexadécimal 7 bits). Les cavaliers peuvent être déplacés de manière binaire pour changer l'adresse I 2 C (0x20 à 0x27) comme indiqué dans la carte d'adresses esclave ci-dessous.

{{ :start:arduino:esp32:capture_du_2022-03-23_16-59-26.jpg?direct&400 |}}



<note warning>
**ATTENTION  : le réperage A2 et A0 peut etre inversé sur la serigraphie**

</note>
{{ :start:arduino:esp32:capture_du_2022-03-23_17-03-02.jpg?direct&400 |}}


==== Bibliotheque PCF8574 pour ESP32 ====

Utiliser la librairie PCF8574 pour esp32 

{{ :start:arduino:esp32:capture_du_2022-03-23_17-03-02b.jpg?direct&400 |}}


==== Programmes exemple ====

<code c BlinkOnPin0.ino>
/*
 Blink led on PIN0
 by Mischianti Renzo <http://www.mischianti.org>

 https://www.mischianti.org/2019/01/02/pcf8574-i2c-digital-i-o-expander-fast-easy-usage/

 Permet de faire clignoter une LED sur la broche 0
*/

#include "Arduino.h"
#include "PCF8574.h"

// Set i2c address
PCF8574 pcf8574_1(0x20);// on peut en avoir 8 sur le bus I2C

void setup()
{
	Serial.begin(115200);
	delay(1000);

	// Set pinMode to OUTPUT
	pcf8574_1.pinMode(P0, OUTPUT);
	pcf8574_1.pinMode(P1, INPUT);

	Serial.print("Init pcf8574...");
	if (pcf8574_1.begin()){
		Serial.println("OK");
	}else{
		Serial.println("KO");
	}
}

void loop()
{
	pcf8574_1.digitalWrite(P0, HIGH);
	delay(1000);
	pcf8574_1.digitalWrite(P0, LOW);
	delay(1000);
}
</code>

<code c KeyPressedPin1.ino>
/*
 KeyPressed on PIN1
 by Mischianti Renzo <http://www.mischianti.org>

 https://www.mischianti.org/2019/01/02/pcf8574-i2c-digital-i-o-expander-fast-easy-usage/

 Test l'appui sur le Bouton poussoir broche 1
*/

#include "Arduino.h"
#include "PCF8574.h"

// Set i2c address
PCF8574 pcf8574_1(0x22);
unsigned long timeElapsed;
void setup()
{
	Serial.begin(115200);
	delay(1000);

	pcf8574_1.pinMode(P0, OUTPUT);
	pcf8574_1.pinMode(P1, INPUT);

	Serial.print("Init pcf8574_1...");
	if (pcf8574_1.begin()){
		Serial.println("OK");
	}else{
		Serial.println("KO");
	}
}

void loop()
{
	uint8_t val = pcf8574_1.digitalRead(P1);
	if (val==HIGH) Serial.println("Bouton Appuyer");
	delay(50);
}

</code>


==== Un schema ====

{{ :start:arduino:esp32:pcf8574_002_schema.jpeg?direct&600 |}}

<note warning>
**ATTENTION : A0 , A1 , A2 , peuvent etre inversé !!! **

</note>