소개
I2C communications 가 사실상의 방법이 간의 통신에 마이크로컨트롤러는 마이크로컴퓨터의 다양한 집적회로 및 센서입니다. 그것은 1982 년부터 주변에 있었고 원래 텔레비전 수신기에서 사용하기 위해 개발되었습니다.
지만 우리가 사용하고 많은 I2C 센서 및 표시하사 우리가 실제로 보였으로 I2C 어떻게 작동할 수 있는 방법을 사용하여 간의 통신에 마이크로 제어기.
오늘 우리는 올바른 것입니다에 대한 자세 I2C. 우리는 또한 어떻게 사용할 수 있는 정보를 교환 사이에 두 개의 Arduinos 할 수 있는 방법을 사용할 수 있 Arduino 을 제어하는 또 다른 하나입니다.
이 첫 번째가 될 것입니다 네 개의 기사에 I2C. 에서 미래의 기사를 우리가 우리가 어떻게 구축할 수 있습이 우리 자신의 I2C 장치,어떻게 인터페이스 라즈베리 파이고 아두이노를 이용 I2C 어떻게 일부 고급 I2C 구성 포함하여 사용하여 여러 마스터 중 하나에 I2C bus……..
시작하자!
I2C Communications
I2C 는 저속 2 선 인터페이스에서 사용되는 직렬 프로토콜입니다. 그것은 원래 텔레비전 수신기 내의 집적 회로가 서로 통신 할 수 있도록 1982 년 필립스에 의해 개발되었습니다.
시간이 바뀌었고 Phillips 는 이제 NXP 이며 I2C 는 거의 모든 주요 반도체 제조업체에서 지원하는 통신 표준이되었습니다.
I2C 는”Inter-Integrated Circuit”의 약자입니다. “IIC”또는’I squared C”라고도합니다.
용도 및 제한 사항
I2C 는 Arduino 와 같은 마이크로 컨트롤러와 Raspberry Pi 와 같은 마이크로 컴퓨터와 함께 사용됩니다. 많은 표시 및 센서 인터페이스를 자신의 호스트 컨트롤러를 사용하여 I2C.
I2C 는 몇 가지 제한 사항이 그러나입니다. 의도 된 용도의 대부분을 위해 충분히 빠르지 만 특히 빠르지는 않습니다.
I2C 만 사용할 수 있습을 통해 짧은 거리를 모든 후,그것은 원래 의미하는 간의 통신에 집적 회로에서 동일한 인쇄 회로 기판입니다. 의 최대 거리 신뢰할 수 있는 감소 전송 속도가 증가함에 따라,에서 가장 느린 속도를(100Kbaud 또는 시계 속의 100KHz)최대 거리에 관한 미터입니다.
I2C 속도
원래 I2C 버스의 최대 속도는 100khz 였습니다. 대부분의 일반적인 응용 프로그램은 여전히 센서에서 간단한 디스플레이로 데이터를 전송하는 데 매우 충분하므로이 속도를 사용합니다.
I2C 및 일부 더 높은 속도 모드가 있습니다. 모든 I2C 장치는 이러한 모드 지원
- 빨리 모드–이것은 최종 속도의 약 400KHz.
- 안녕-속도 모드 최대 시계 주파수 fo3.4MHz
- 매우 빨리 모드–계 최대의 주파수 5MHz
는 I2C 버스 마스터는 결정합니다.
I2c 작동 방식
I2C 버스에는 전원 및 접지 연결과 함께 두 개의 신호가 있습니다.
두 가지 신호 라인은 다음과 같습니다:
- SDA–이 양방향 데이터 라인입니다.
- SCL–이 클럭 신호입니다.
각 신호선에 연결된 두 개의 풀업 저항이 있으며,비활성 상태 일 때 공급 전압까지 버스를 끌어 당깁니다.공급 전압은 표준이 아니며 3.3 볼트 또는 5 볼트가 될 수 있습니다. 또한 일부 고속 I2C 구현의 경우 더 낮은 전압이 될 수 있습니다.
이러한 공급 전압의 차이는 서로 다른 로직 레벨을 사용하는 i2c 장치를 인터페이싱 할 때 문제를 일으킬 수 있습니다. 나는 어떻게 라즈베리 파이를 인터페이스하는 방법을 보여줄 때 우리는 미래의 기사에서 더 논의 할 것이다(3.Arduino Uno(5 볼트 로직)로 3 볼트 로직).
I2C 버스에 인터페이스 할 수있는 장치에는 마스터와 슬레이브의 두 가지 유형이 있습니다.
마스터 장치는 버스를 제어하고 클럭 신호를 공급합니다. 슬레이브의 데이터를 개별적으로 요청합니다. 버스에 둘 이상의 마스터 장치가있을 수 있지만 주어진 순간에 하나만 활성 마스터가 될 수 있습니다.
마스터 장치에는 주소가 할당되어 있지 않습니다.
슬레이브 장치에는 주소가 있으며이 주소는 버스에서 고유해야합니다. 그들은 7 비트 주소 지정 체계를 사용하므로 최대 128 개의 슬레이브가 하나의 I2C 버스에있을 수 있습니다. 실생활에서이 큰 장치 컬렉션은 결코 사용되지 않으며 한 버스에서 12 개가 넘는 I2C 장치를 보는 것은 드뭅니다.
더 새로운 10 비트 주소 지정 체계가 구현되었으며 기존의 7 비트 주소 지정 방법과 역 호환됩니다.
상업용 I2C 장치는 버스 사양을 유지하는 NXP 에 의해 i2c 주소를 할당합니다. I2c 는 2006 년부터 오픈 소스 였지만 nxp 에서 슬레이브 주소를 얻는 데 요금이 부과됩니다. 마스터 장치 또는 상업적 제조를위한 것이 아닌 장치에 대해서는 수수료가 필요하지 않습니다.
일부 I2C 장치에는 여러 개의 주소가 할당되며 일반적으로 하위 주소 비트의 분산이 지정됩니다. 이러한 장치이 될 수 있습으로 구성하는 다양한 주소로 할 수 있도록,여러 장치를 동일한 유형의에서 사용할 수 있는 단일 I2C bus……..
기타 I2C 유도체
있는 버스에서 유래되었 I2C bus,고 있는 많은 방법에 있는 호환 I2C.
- TWI–트윈 와이어 인터페이스는 i2c 버스와 거의 동일합니다. 이것은 실제로 버스는 Arduino 사용 TWI 개발되었을 때 I2C 버스가 오픈 소스 Atmel 하고 싶지 않았 위험 trade 이름 위반이 발생합니다. TWI 와 I2C 의 유일한 주요 차이점은 TWI 가”시계 스트레칭”이라는 고급 기술을 지원하지 않는다는 것입니다.
- SMBus 는 Intel 에서 개발 한 또 다른 I2C 동등한 버스입니다. TWI 와 마찬가지로 대부분의 I2C 기능을 지원합니다.
향후 기사에서는 I2C 버스의 데이터가 어떻게 구성되는지 설명 할 것입니다. 그러나 이제 우리는 실험을 시작하기에 충분한 몇 가지 기본적인 I2C 정보를 가지고 있습니다.
Arduino Wire Library
Arduino 에는 Wire Library 라는 I2C 작업을위한 라이브러리가 내장되어 있습니다. 그것은 매우 쉽게 i2c 버스에서 통신 할 수 있습니다,그것은 마스터 또는 슬레이브 중 하나가 될 아두 이노를 구성 할 수 있습니다.
와이어 라이브러리에는 I2C 작업에 유용한 몇 가지 기능이 있습니다.
- begin()–이 라이브러리를 시작하고 Arduino 를 마스터 또는 슬레이브로 설정합니다.
- requestFrom()–이 함수는 마스터가 슬레이브에서 데이터를 요청하는 데 사용됩니다.
- beginTransmission()–이 함수는 마스터가 지정된 슬레이브로 데이터를 보내는 데 사용됩니다.
- endTransmission()–이 함수는 마스터가 beginTransmission 함수로 시작한 전송을 종료하는 데 사용됩니다.
- write()–마스터와 슬레이브 모두에서 I2C 버스에서 데이터를 전송하는 데 사용됩니다.
- 사용할 수 있()–의해 사용되는 마스터하고 노예의 수를 결정하는 바이트에서 데이터 수 있습니다.
- read()–I2C 버스에서 데이터의 바이트를 읽습니다.
- SetClock()–마스터가 특정 클럭 주파수를 설정하는 데 사용됩니다.
- onReceive()–슬레이브에서 데이터가 마스터로부터 수신 될 때 호출되는 함수를 지정하는 데 사용됩니다.
- onRequest()–슬레이브에서 마스터가 데이터를 요청했을 때 호출되는 함수를 지정하는 데 사용됩니다.
우리는 스케치에서 이러한 기능 중 일부를 사용할 것입니다.
Arduino I2C 연결
I2C 용 SDA 및 SCL 연결은 Arduino 모델마다 다릅니다. 실험 내가 당신을 보여 수행되었을 사용하여 두 개의 아두이노 장기이식센터,하지만 당신은 다른 사용할 수 있습니다 모델 Arduino 제공 변경이 핀다.
나는 당신이 그것을 알아내는 데 도움이되는 차트를 함께 넣었습니다. 그것은 몇 가지 일반적인 아두 이노 보드뿐만 아니라 이산 칩의 몇 가지가 포함되어 있습니다. 내가 나열하는 칩(ATTiny 및 ATmega328P)의 핀아웃은 표면 실장 패키지가 아닌 DIP 패키지와 함께 제공됩니다.
Arduino Board or Chip | SDA | SCL |
Uno | A4 | A5 |
Mega2560 | 20 | 21 |
Nano | A4 | A5 |
Pro Mini | A4 | A5 |
Leonardo | 2 | 3 |
Due (has two I2C) | 20 + SDA1 | 20 + SCL1 |
ATTiny85 & ATTiny45 | 5 | 7 |
ATmega328P | 27 | 28 |
일부 Arduino Uno 클론 별도의 SDA and SCL 핀을 사용할 수 있습니다 그들을 대신의 두 아날로그 핀 원하는 경우. 그들은 내부적으로 같은 장소에 연결되어 있습니다.Arduino Due 에는 실제로 두 개의 I2C 포트가 있습니다.또한,프로 미니에 대한 인터넷에 몇 가지 잘못된 인맥 다이어그램이 있음을 유의하십시오. 위의 표와 같이 두 개의 아날로그 핀인 A4 와 A5 를 사용하십시오.
I2C2 사이에서 아두이노의
에 대한 우리의 첫 실험을 우리는 것입니다 hoo 두 Arduinos 함께과 데이터를 교환한다. 하나의 Arduino 는 마스터가 될 것이고 다른 하나는 슬레이브가 될 것입니다.
두 개의 Arduino Unos 를 사용하고 있지만 두 개의 Unos 가없는 경우 다른 Arduino 를 대신 할 수 있습니다. 연결에 이전 차트를 사용하십시오.
2Arduino 의
다음은 두 Arduino Unos 를 함께 연결 한 방법입니다:
그것은 아주 간단한 연결 시설,기본적으로 당신은 그냥 타이 땅에 두 I2C 핀다.
중 하나는 것을 알고 있는 다이어그램을 표시하지 않의 사용 pull-up resistors,내가 찾는 모든 것을 듯 제대로 작동하려면 빠질 수 없게 되었습니다. 그러나 특히 오류나 간헐적 인 작동이 발생하는 경우이를 포함시키는 것이 좋습니다.
일부 풀업 저항을 연결하려면 SDA 및 SCL 라인에 몇 개의 10k 저항을 부착하십시오. 다른 쪽 끝을 Arduino 중 하나의 5 볼트 출력에 부착하십시오.
마스터 데모 스케치
여기에 스케치에 사용되는 아두이노가 있으로 지정되고 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
/*
I2C 마스터 데모
i2c-마스터 데모입니다.ino
Demonstrate use of I2C bus
Master sends character and gets reply from Slave
DroneBot Workshop 2019
https://dronebotworkshop.com
*/
// Include Arduino Wire library for I2C
#include <Wire.h>
// Define Slave I2C Address
#define SLAVE_ADDR 9
// Define Slave answer size
#define ANSWERSIZE 5
void setup() {
// Initialize I2C communications as Master
Wire.begin();
//설치 시리얼 모니터
시리얼.나는 이것을 할 수 없다.println(“I2c 마스터 데모”);
}
void loop(){
delay(50);
Serial.이 작업을 수행하려면 슬레이브에 데이터를 쓰는 방법을 알아야합니다.beginTransmission(SLAVE_ADDR);
와이어.쓰기(0);
와이어.endTransmission();
직렬.println(“데이터 수신”);
//슬레이브
에서 응답 읽기//5 자
와이어를 다시 읽습니다.나는 이것이 내가 할 수있는 유일한 방법이라고 생각한다.; 문자열에 문자 추가
문자열 응답=””;
while(Wire.사용 가능()){
char b=와이어.이 작업을 수행하려면 직렬 모니터로 인쇄해야합니다.system.out.println(응답);
}
|
으로 모든 I2C 스케치,우리가 시작을 포함하여 와이어 라이브러리입니다.
다음에 정의 약간 상수를 나타내는 I2C 의 주소가 슬레이브와 숫자의 바이트의 데이터는 우리가 기대하에서 검색니다.
설정에서 우리는 마스터로 I2C 통신을 초기화합니다. 시작 함수에 주소 매개 변수가 없으므로 마스터임을 알고 있습니다. 우리는 또한 직렬 모니터를 설정하고 그것에 텍스트 줄을 인쇄합니다.이제 루프에.
우리는 시작과 함께 작은 시간 지연,대부분을 충분히 할 수 있도록 우리는 읽기 전시에 시리얼 모니터링합니다.
다음으로 beginTransmission 함수를 사용하여 데이터를 슬레이브로 보냅니다. 이 경우 우리가 보내는 데이터는 단지 숫자 0 입니다. 우리는 끝에 대한 호출로 전송을 마칩니다.전송 함수.
다음으로 requestFrom 함수를 사용하여 슬레이브에서 일부 데이터를 다시 요청합니다.
그 후 우리는 슬레이브에서 한 번에 바이트 인 데이터를 읽음으로써 응답 문자열을 공식화합니다.
우리는 우리가하고있는 일과 우리가받는 데이터의 세부 사항을 직렬 모니터에 인쇄합니다. 그리고 나서 우리는 루프를 끝내고 모든 것을 다시합니다.
슬레이브 데모 스케치
이제 슬레이브가 사용하는 스케치에.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
/*
I2C Slave Demo
i2c-slave-demo.ino
Demonstrate use of I2C bus
Slave receives character from Master and responds
DroneBot Workshop 2019
https://dronebotworkshop.com
*/
// Include Arduino Wire library for I2C
#include <Wire.h>
//정의 슬레이브 I2C 주소
#define SLAVE_ADDR9
//정의 슬레이브에 대답 크기
#define ANSWERSIZE5
//정의 문자열과 대응하는 마스터
문자열답=”Hello”;
void setup(){
//초기화 I2C 통신으로 슬레이브
와이어입니다.begin(SLAVE_ADDR);
//master
와이어에서 데이터를 요청할 때 실행하는 함수.onRequest(requestEvent);
//Master
와이어에서 데이터를 수신 할 때 실행하는 함수.onReceive(receiveEvent);
//설치 시리얼 모니터
시리얼.나는 이것을 할 수 없다.system.out.println(“I2C Slave 시범”);
}
void receiveEvent(){
//Read 하는 동안 데이터를 받아
동안(0<와이어입니다.사용 가능()){
바이트 x=와이어.직렬 모니터로 인쇄 할 수 있지만 직렬 모니터로 인쇄 할 수는 없습니다.println(“Receive event”);
}
void requestEvent(){
//올바른 크기의 설정 바이트 변수
바이트 응답; (byte i=0;i<ANSWERSIZE;i++){
response=(바이트)답변.charAt(i);
}
//마스터
와이어로 응답을 다시 보냅니다.이 작업을 수행하려면 직렬 모니터로 인쇄해야합니다.loop 의 시간 지연(50);
|
다시 한번 우리는 와이어 라이브러리를 포함하여 시작합니다. 앞의 스케치 우리는 또한을 정의합 I2C 주소가 슬레이브뿐만 아니라의 바이트 수를 우리는 보낼 계획을 마스터입니다.
다음으로 우리는 마스터에게 다시 보낼 문자열을 정의합니다.이 경우”Hello”라는 단어 만 있습니다. 이것을 변경하기로 결정한 경우 두 스케치에서 ANSWERSIZE 상수를 올바르게 조정했는지 확인하십시오.
설정에서 우리는 시작 기능으로 I2C 버스에 대한 연결을 초기화합니다. 이것이 우리가 사용하려고하는 i2c 주소를 지정하는 슬레이브이기 때문에 우리가이 작업을 수행하는 다른 방법에 유의하십시오. 이렇게함으로써 와이어 라이브러리는 우리가 슬레이브 모드에서 작동하기를 원한다는 것을 알고 있습니다.
이제 우리는 우리를 정의할 필요가의 이름이 기능하는 우리는 전화할 때는 두 개의 이벤트가 발생할–데이터 요청을 받은 마스터로부터 데이터로부터 받은 마스터입니다. 또한 직렬 모니터에 설정하고 인쇄합니다.
우리가 마스터로부터 데이터를 수신 할 때 함수 receiveEvent 가 호출됩니다. 이 함수에서 우리는 데이터를 읽는 동안 데이터를 사용할 수 있 및 할당 바이트(기억,데이터 받은 한 번에 한 바이트).
마스터로부터 데이터에 대한 요청을받을 때마다 requestEvent 함수가 호출됩니다. 우리는 우리의 문자열”안녕하세요”를 마스터에게 다시 보내야합니다. 한 번에 한 바이트 씩 데이터를 보내야하므로”Hello”의 문자를 배열의 개별 항목으로 나눈 다음 하나씩 보냅니다.
우리는 두 기능 모두에서 우리의 모든 진행 상황을 직렬 모니터에보고합니다.
이 스케치의 루프는 마스터 스케치에 사용 된 것과 일치하는 시간 지연을 추가합니다.
데모 스케치 실행
이 스케치를 실행하려면 각 Arduino 에서 직렬 모니터를 볼 수 있어야합니다. Arduino IDE 가 설치된 두 대의 컴퓨터가있는 경우 훨씬 쉽게 만들 수 있습니다.
Microsoft Windows 에서는 Arduino IDE 의 두 인스턴스를 열 수 있습니다. 그렇게하면 동일한 화면에 두 직렬 모니터를 나란히 표시 할 수 있습니다.
교대로 한 대의 컴퓨터를 사용하고 자체 전원 공급 장치로 두 번째 Arduino 에 전원을 공급할 수 있습니다. 두 Arduino 사이에서 컴퓨터와 전원을 전환해야합니다.이렇게하면 두 화면을 하나씩 모니터링 할 수 있습니다.
Arduino Remote I2c 를 사용하여
다음 데모에서는 전위차계를 마스터 Arduino 에 연결하고 led 를 슬레이브에 연결합니다. 우리는 전위차계를 사용하여 led 의 깜박임 속도를 제어 할 것입니다.
이것은 또 다른 간단한 데모이며,더 실용적인 것을 만들기 위해 그 위에 구축 할 수 있습니다.
원격 데모 인맥
여기이 실험을 함께 넣어하는 방법입니다.
그것은 본질적으로 동일한 인맥으로 이전 실험의 추가와 전위차계에서 마스터 및 주도에서는 노예.
슬레이브의 LED 가 핀 13 에 부착되어 있음에 유의하십시오. Arduino Uno 는 핀 13 에 led 가 내장되어 있으므로 원하는 경우 LED 와 그 낙하 저항을 제거 할 수 있습니다.
풀업 저항에 대한 언급은이 인맥에도 적용됩니다.
원격 데모 마스터 스케치
스케치에 대한 마스터의 측면을 이 실험은 매우 간단한 어떤 면에서는 I2C 측도보다 더 간단에 사용되는 첫 번째 데모입니다. 왜냐하면 우리는 단지 슬레이브에 데이터를 보내고 있으며 어떤 것을 다시 얻을 것으로 기대하지 않기 때문입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
/*
I2C 마스터 컨트롤 데모
i2c-마스터 데모제입니다.ino
Demonstrate use of I2C bus
Master sends potentimeter position data
DroneBot Workshop 2019
https://dronebotworkshop.com
*/
// Include Arduino Wire library for I2C
#include <Wire.h>
// Define Slave I2C Address
#define SLAVE_ADDR 9
// Analog pin for potentiometer
int analogPin = 0;
// Integer to hold potentiometer value
int val = 0;
void setup(){
//I2c 통신을 마스터
와이어로 초기화합니다.begin();
}
void 루프(){
지연기(50);
//읽기 냄비 값
//지도 범위의 1-255flash 평가
val=map(analogRead(analogPin), 0, 1023, 255, 1);
//쓰기 charatre 슬레이브
와이어입니다.beginTransmission(SLAVE_ADDR);
와이어.쓰기(val);
와이어.endTransmission();
}
|
항상 우리에게 필요를 포함 와이어 라이브러리의 시작 부분에서 스케치합니다. 우리는 또한 슬레이브 주소를 보유 할 상수를 정의 할 것입니다.
우리는 전위차계를 사용하고 있기 때문에 그것이 연결된 핀과 그 값을 보유 할 변수를 모두 정의해야합니다.
우리가 설정에서하는 모든 일은 i2c 연결을 마스터로 초기화하는 것입니다.
루프에서 우리는 전위차계 값을 읽고 01-255 의 범위로 매핑합니다. 우리는 한 바이트의 정보를 보내고 있으며이 많은 값을 단일 바이트에만 보유 할 수 있으므로 그렇게해야합니다.
참고 우리는 반대로 번호 매기기 시퀀스에서 Arduino 지도 함수를 이행하도록 시스템이 작동 방법을 우리는 그것을 기대를 돌고 전위차계를 오른쪽으로 증가하는 플래시율이다. “플래시 속도”가 시간 지연에 의해 지정됨에 따라 전송되는 더 큰 숫자는 더 긴 플래시 속도와 동일합니다.
또한 우리는 단지 하나의 상태에서 LED 를 보유 할 값 0 을 보내지 않는다는 점에 유의하십시오. 우리는 대신 1 로 끝나도록 범위를 설정했습니다.
이제 바이트를 슬레이브로 보내고 루프를 다시 반복하는 문제 일뿐입니다.
원격 데모 수신 스케치
슬레이브 측은 마스터로부터 데이터를 수신하고 LED 를 플래시하는 데 사용해야합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
/*
I2C 슬레이브 제어모
i2c-슬레이브 데모제입니다.ino
Demonstrate use of I2C bus
Receives potentimeter position data
Controls LED blink rate
DroneBot Workshop 2019
https://dronebotworkshop.com
*/
// Include Arduino Wire library for I2C
#include <Wire.h>
// Define Slave I2C Address
#define SLAVE_ADDR 9
// Define LED Pin
int LED = 13;
// Variable for received data
int rd;
// Variable for blink rate
int br;
void setup(){
pinMode(LED,출력);
//초기화 I2C 통신으로 슬레이브
와이어입니다.begin(SLAVE_ADDR);
//master
와이어에서 데이터를 수신 할 때 실행하는 함수.이 경우 직렬 모니터가 작동하지 않습니다.나는 이것을 할 수 없다.i2c 슬레이브 데모”);
}
void receiveEvent(){
//i2c
rd=Wire 에서 한 문자를 읽습니다.읽기();
//들어오는 데이터의 인쇄 값
직렬.println(rd);
}
void 루프(){
지연기(50);
//Calculate 깜박 값
br=map(rd, 1, 255, 100, 2000);
digitalWrite(LED,고);
지연(br);
digitalWrite(주도,저렴한);
지연(br);
}
|
우리가 시작으로 일반적인 포함 와이어 라이브러리뿐만 아니라 정의 노예 주소입니다. 우리는 또한 LED 에 대한 핀을 정의합니다.
의 몇 가지 추가적인 변수를 정의 중 하나를 들고 수신한 데이터는 다른 전달한 시간 지연 값을 깜박 평가.
설정에서 우리는 출력으로 LED 에 대한 I/O 핀을 설정하고 i2c 버스를 초기화합니다. 우리가 시작 함수에서 슬레이브 주소를 사용함에 따라 와이어 라이브러리는 우리가 슬레이브로 행동하고 있음을 알고 있습니다.
우리는 단지 onReceive 함수를 정의 할 필요가,마지막 데모와 달리 우리는 마스터의 요청을 기대하지 않습니다. 우리는 또한 설정하고 직렬 모니터에 인쇄,우리는 들어오는 데이터를 볼 수있는 모니터를 사용합니다.
receiveEvent 함수는 들어오는 데이터를 읽고 I 변수에 할당합니다. 또한 직렬 모니터에 값을 인쇄합니다.
마지막으로 루프에서 들어오는 데이터를 사용하여 LED 를 깜박입니다. 다시 한번 우리는 맵 함수를 사용하여이를 수행하여 1-255 의 들어오는 값을 더 넓은 범위로 변경합니다. 이 범위를 변경하여 원하는 경우 LED 가 깜박이도록 더 빠르게 또는 느리게 실험 할 수 있습니다.
마지막 몇 문장은 본질적으로 변장의 Arduino Blink 스케치입니다! 우리는 마지막 단계에서 결정한 기간 동안 LED 를 켜고 끕니다.그런 다음 루프를 반복합니다.
실행하는 원격 데모
로드 코드와 힘을 모두 아두이노니다. 당신이 사용할 수 있습 시리얼 모니터에 슬레이브에는 아두이노 뷰 들어오는 데이터입니다.
전위차계를 돌려 이제 다 LED 깜박 평가에서 슬레이브.
결론
이 결론은 우리의 처음에 대한 상세한 I2C. 다음 호에서는,우리는 더 많은 것을 배우의 구조에 대해하는 데이터 교환했다. 우리는 또한 일반 센서를 가져 와서 I2C 센서로 바꿀 것입니다.
행복한 소통!
Resources
스케치-이 기사에서 사용 된 모든 I2C 스케치.
I2C 정보에 대한 정보 I2C 프로토콜