아두이노 I2C통신하기
아두이노

아두이노 I2C통신하기

반응형

아두이노간 유선통신을 하는 방법은 다양하지만 가장 쉽고 간편한 방법은 I2C통신이다.

I2C 통신은 아두이노의 SCL, SDA 핀을 이용하며, 연결이 간단하고 1:N 통신도 쉽게 구현가능하다는 장점이 있지만 통신속도가 약간 느리다는 단점이 있다. 물론 체감상 느리다는 느낌은 별로 받지 못했고 일반적인 작업을 하기 위한 통신속도로는 충분하다.


  출처 : https://www.arduino.cc/en/Tutorial/MasterReader


연결은 위의 그림과 같이하면 되는데, 아두이노 우노의 경우는 A4, A5를 연결해도 되지만 대부분의 아두이노 보드들은 직접 SCL, SDA 핀끼리 연결하면 된다. (SCL은 SCL끼리, SDA는 SDA끼리 연결)


데이터를 보내는 쪽에는 아래의 코드를 업로드 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <Wire.h>
 
void setup() {
  Wire.begin(8);                // join i2c bus with address #8
  Wire.onRequest(requestEvent); // register event
}
 
void loop() {
  delay(100);
}
 
// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent() {
  Wire.write("hello "); // respond with message of 6 bytes
  // as expected by master
}
cs


데이터를 받는 쪽에는 아래 코드를 업로드한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <Wire.h>
 
void setup() {
  Wire.begin();        // join i2c bus (address optional for master)
  Serial.begin(9600);  // start serial for output
}
 
void loop() {
  Wire.requestFrom(86);    // request 6 bytes from slave device #8
 
  while (Wire.available()) { // slave may send less than requested
    char c = Wire.read(); // receive a byte as character
    Serial.print(c);         // print the character
  }
 
  delay(500);
}
cs


이제 데이터를 받는 쪽 아두이노의 시리얼 모니터를 확인하면 hello가 반복되서 출력될것이다.


반응형
    # 테스트용