본문 바로가기

ESPRESSIF/ESP8266

ESP8266 I2C 테스트 - PCF8574 제어

ESP8266 데이터 시트를 보면 IO14(SCL), IO2(SDA) 로 설정되어 있다.

SPI 와 겹치기 때문에 다른 핀으로 할당 할 필요가 있다.

 

 

ESP8266 Arduino 핀 설정(pins_arduino.h)을 보면 디폴트로 IO5(SCL), IO4(SDA) 로 할당 되어 있다.

물론 소프트웨어 I2C라 변경 하능은 한데 디폴트를 사용하면 초기화 시 별도로 지정해 주지 않아도 된다.

#define PIN_WIRE_SDA (4)
#define PIN_WIRE_SCL (5)

static const uint8_t SDA = PIN_WIRE_SDA;
static const uint8_t SCL = PIN_WIRE_SCL;

 

 

 


ESP8266 I2C 초기화 

#include <Wire.h>

void setup() 
{
  Wire.begin();
}

 

 

I2C로 1바이트 전송하기

beginTransmission() 함수를 이용하여 I2C Address를 전송하고 write() 함수로 데이터 전송이 가능하다.

#define PCF_8574_ADDR      0x20

void write8(uint8_t Address, uint8_t Value)
{
   Wire.beginTransmission(Address);
   Wire.write(Value);
   Wire.endTransmission();
}

 

 

 

 

PCF8574 IO Expander PCF8574_SSM 보드를 I2C로 제어 하는 코드를 작성해 보았다.

 

 

#include <Wire.h>

#define PCF_8574_ADDR      0x20

void write8(uint8_t Address, uint8_t Value)
{
   Wire.beginTransmission(Address);
   Wire.write(Value);
   Wire.endTransmission();
}


void setup() 
{
  Wire.begin();

  write8(PCF_8574_ADDR, 0xff);
}


int cnt = 0;
void loop()
{
  if(cnt>8)cnt = 0;
  write8(PCF_8574_ADDR, ~(1<<cnt++));
  delay(100);
}

 

 

 

 

반응형