sábado, 10 de junio de 2017

Tutorial #1 - Expansor de Puerto I2C PCF8574P con ESP8266 (NodeMCU)

En este tutorial explico cómo obtener más entradas y/o salidas a partir de 2 pines del NodeMCU (placa de IOT internet de las cosas basada en el ESP8266) usando el expansor de puertos I2C PCF8574P.



Código Fuente:

#include <Wire.h> // Librería de Arduino por defecto para comunicarse con I2C 

uint8_t address;

void WriteIo(uint8_t bits)
{
  Wire.beginTransmission(address);
  Wire.write(bits);
  Wire.endTransmission();
}

uint8_t ReadIo()
{  
  WriteIo(B11111111); // PCF8574 requiere que pongamos en alto “1” todas sus salidas antes de hacer una lectura
  
  Wire.beginTransmission(address);
  Wire.requestFrom((int)address, 1); // Pregunta por el primer byte del esclavo
  uint8_t bits = Wire.read(); // Lee ese primer byte
  Wire.endTransmission();
  
  return bits;
}

void setup() {
  Wire.begin(); // SDA=GPIO4,SCL=GPIO5
  address = 0x20;
  Serial.begin(115200);
}

void loop() {
  uint8_t bits = ReadIo();
  Serial.println(bits);
  delay(250);
}

3 comentarios:

  1. Hola, estoy haciendo mis primeras armas en el tema, y te quiero hacer la siguiente consulta.
    Como conecto a arduino dos componentes I2C y que además funcionan a distinta tensión. El caso es un barómetro MB180 (3v) y un LCD (5v). Vi que habría que poner unas resistencias pullup, pero te agradecería el diagrama en fritzing, si es que los sabes. Muchas Gracias.

    ResponderEliminar
  2. No uso Fritzing. Te comento el problema que tenés es muy común y se lo resuelve con un adaptador de niveles lógicos bidireccional, se venden muy baratos en mercadolibre y si querés también podés armarte uno vos con 2 transistores mos.

    ResponderEliminar
  3. Si te interesa saber cómo funciona acá está bien explicado: https://nomadaselectronicos.wordpress.com/2015/02/25/traductor-de-niveles-logicos-de-voltaje-level-translator/
    http://www.servisystem.com.ar/NEOTEO/I2C_Aislador/I2C_aislador.htm

    ResponderEliminar