4 solutions pour ajouter des E/S à un projet Arduino, ESP8266, ESP32, ESP8266, Raspberry Pi. ADS1115, MCP23017, PCF8574, PCA9685 • Domotique et objets connectés à faire soi-même

Les circuits intégrés ADS1115, MCP23017, PCF8574 et PCA9685 sont 4 solutions pour augmenter très facilement le nombre d’entrées / sorties numériques, PWM, analogiques via le bus I2C. Cela permettra de conserver le code source de votre projet et de gagner du temps de développement en évitant de devoir migrer vers une autre plateforme telle que le STM32 ou l’ESP32. C’est par exemple le cas du micro-contrôleur ESP8266 dispose d’une seule entrée analogique et 8 E/S numériques.

Toutes ces cartes d’extension utilisent le bus I2C pour communiquer. Par conséquent, elles sont utilisables par toutes les plateformes compatibles y compris les nano PC Raspberry Pi, Orange Pi, Odroid…

ADS1115 (ADSxxxx), 4 entrées A/N 16 bits

Le circuit intégré ADS1115 permet d’ajouter 4 entrées analogiques

Principales caractéristiques techniques

  • Fabricant : Texas Instrument
  • Alimentation électrique :
    • de 2,0V à 5V
    • consommation en continu : 150 μA
  • Convertisseur Analogique / numérique
    • Résolution : 16-bits
    • Fréquence d’échantillonnage de 8 à 860 échantillons / seconde (SPS)
  • Adresses I2C
    • Principale : 0x48
    • Alternative : 0x4B
  • Vitesse du bus I2C supportées : 100kHz, 400kHz et 3.4MHz
  • Autres références
  • Broches
    • VDD Alimentation (2,7V à 5,5V)
    • GND masse électrique
  • Librairies
  • Disponibilité
    • Carte d’extension
    • HAT pour Raspberry PI (toute génération)
  • Documentation technique
 

Voir plus d’offres

MCP23017, 16 I/O numériques I2C. MCP23S17 (version SPI)

Le circuit intégré MPC23017 permet d’ajouter 16 entrées / sorties numériques supplémentaires via le bus I2C.

Le MCP23S17 est une version adaptée au bus SPI jusqu’à 10 MHz.

Principales caractéristiques techniques

  • Fabricant : Microchip
  • Alimentation électrique :
    • de 2,7V à 5,5V
    • courant de veille : 1 μA max.
  • Courant de sortie : 20mA par sortie sans dépasser 150mA au total sur VSS
  • Adresses I2C
    • Principale : 0x20
    • Alternative : 0x27
    • Autre : utiliser les broches A0, A1 et A2 pour attribuer une adresse
  • Vitesse du bus I2C supportées : 100kHz, 400kHz et 1.7MHz
  • Broches
    • VDD Alimentation (2,7V à 5,5V)
    • VSS GND, masse électrique
    • A0, A1, A2 : sélection de l’adresse I2C
  • Librairies
  • Disponibilité
    • Boitier DIP28 à souder au pas de 2,54mm
    • Boitier SO28 à souder
    • Carte d’extension
  • Documentation technique

Voir plus d’offres

Branchement de base pour les circuits intégrés

Attention, pour pouvoir utiliser la version en boitier DIP28 ou SO28, il faut connecter les broches suivantes

  • Broches I2C SDA et SCL au 3,3V à l’aide d’une résistance de pull-up de 4.7 KΩ.
  • Broches A0, A1 et A2 au GND
  • RESET au 3,3V
  • VDD au 3,3V
  • VSS au GND

Exemple de code permettant d’allumer une LED

#include 
#include "Adafruit_MCP23017.h"

// Basic pin reading and pullup test for the MCP23017 I/O expander
// public domain!

// Connect pin #12 of the expander to Analog 5 (i2c clock)
// Connect pin #13 of the expander to Analog 4 (i2c data)
// Connect pins #15, 16 and 17 of the expander to ground (address selection)
// Connect pin #9 of the expander to 5V (power)
// Connect pin #10 of the expander to ground (common ground)
// Connect pin #18 through a ~10kohm resistor to 5V (reset pin, active low)

// Input #0 is on pin 21 so connect a button or switch from there to ground

Adafruit_MCP23017 mcp;
  
void setup() {  
  mcp.begin();      // use default address 0

  mcp.pinMode(0, INPUT);
  mcp.pullUp(0, HIGH);  // turn on a 100K pullup internally

  pinMode(13, OUTPUT);  // use the p13 LED as debugging
}

void loop() {
  // The LED will 'echo' the button
  digitalWrite(13, mcp.digitalRead(0));
}

PCF8574, 8 entrées/sorties numériques

Le circuit intégré PCF8574 de Texas Instrument permet d’ajouter 8 entrées / sorties numériques supplémentaires. Sont fonctionnement est très similaire au MCP23017 de Microchip vu précédemment

Principales caractéristiques techniques

  • Fabricant : Texas Instrument
  • Alimentation électrique :
    • de 2,5V à 6V
    • courant de veille : 10 μA max
  • Courant de sortie : 25mA par sortie
  • Adresses I2C
    • Principale : 0x38
    • Alternative : 0x3F
    • Autre : utiliser les broches A0, A1 et A2 pour attribuer une adresse
  • Vitesse du bus I2C supportées : 100kHz, 400kHz et 1MHz
  • Broches
    • VCC Alimentation (2,5V à 6V)
    • GNG masse électrique
    • A0, A1, A2 : sélecteur d’adresse I2C. Inutile de relier au GND ou VCC si adresse par défaut
  • Librairies
  • Disponibilité
    • Boitier DIP16 à souder au pas de 2,54mm
    • Carte d’extension
  • Documentation technique

Voir plus d’offres

PCA9685, 16 canaux PWM 12 bits pour LED

Le circuit intégré PCA9685 permet d’ajouter 16 canaux PWM 12-bits qui permettra de piloter des LED ou des servo-moteurs de faible puissance. Le PCA9685 est parfaitement adapté pour piloter des bras robotique.

Principales caractéristiques techniques

  • Fabricant : NXP
  • Alimentation électrique :
    • de 2,3V à 5,5V
    • protection contre la sur-tension
    • courant de veille : 1 μA max.
  • Courant de sortie : 20mA par sortie sans dépasser 150mA au total sur VSS
  • Sorties PWM
    • 16 sorties 12-bits (4096 niveaux) pour LED
    • Fréquence de 24 Hz à 1526 Hz
  • Adresses I2C
    • Principale : 0x40 
    • Alternative : 0x7F
    • Autre : utiliser les broches A0 à A5 pour attribuer une adresse manuellement. 64 adresses possibles
  • Vitesse du bus I2C supportées : 1MHz
  • Broches
    • VDD Alimentation (2,3V à 5,5V)
    • VSS GND, masse électrique
    • A0 à A5 : jusqu’à 62 adresses I2C permettant de piloter jusqu’à 992 LED en combinant plusieurs PCA9685
  • Librairies
  • Disponibilité
  • Documentation technique

Repérage des broches du PCA9685

Voir plus d’offres

Le test complet de la carte d’extension Geekcreit avec du code Arduino ou MicroPython

Autres projets

Exemple de code Arduino pour piloter un servomoteur

Un petit exemple qui fait varier la position d’un servo-moteur sur 180° développé à l’aide de la librairie de Sumotoy.

/*
  Test PCA9685 driver Doit.am 16 servos I2C shield
  Compatible Arduino Uno / Espduino / ESP8266
*/

#include 
#include 

#define MAX_SERVOS 16

/*
 * ESP8266 I2C - pins
 * SDA: 4 - D2
 * SCL: 5 - D1
 */

servo_PCA9685 servo = servo_PCA9685();

uint8_t servonum = 0;

void setup() {
#if defined(ESP8266)
  Serial.begin(115200);
#else
  Serial.begin(38400);
#endif
  Serial.println("\nservo start");
  servo.begin();
}
int angle = 0;

void loop() {
  if ( angle == 180 ) {
    angle = 0;
  }  
  servo.moveServo(0,angle);
  Serial.println("Move to "+angle);
  angle++;
  delay(200);
}

Adresses I2C des cartes ADS1115, MCP23017, PCF8574, PCA9685

Si vous rencontrez des difficultés à initialiser l’équipement vous pouvez utiliser le scanner I2C proposé dans ce tutoriel.

A LIRE AUSSI :

Adresses I2C des capteurs et actionneurs les plus courants

Chaque équipement dispose d’une adresse I2C alternative. En fonction du fabricant de la carte d’extension, la sélection de l’adresse alternative se ferra via un jumper, un pont à souder ou directement par programmation. Consultez la documentation technique du fabricant pour savoir comment choisir l’adresse I2C.

Mises à jour

8/10/2020 Publication de l’article

English Version

Avez-vous aimé cet article ?

[Total: 2 Moyenne: 4.5]