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);
}
반응형