Arduino와 ESP32 (M5Camera 등) 간의 I2C 통신 방법
Click here for English commentary and sample code.
전제
아래에 대해서는 설명을 생략합니다.
- Arduino IDE에서 ESP32(M5Camera 포함) 개발 환경 구축
- C 언어의 기초 지식
※ Arduino간에 I2C 통신하는 방법을 먼저 읽으면 이해하기 쉽습니다.
해결할 과제
Arduino와 ESP32 (M5Camera라든지)를 연결 (이번에는 I2C)하여 데이터를 교환하고 싶다!
대응 후의 이미지

왼쪽이 Master(이후, Main)의 ESP32(M5Camera)
오른쪽이 Slave(이후 Sub)인 Arduino(M0 PRO)
사이에서 데이터를 송수신하는 모습
절차 개요
Arduino와 ESP32 (M5Camera라든지)를 연결 (이번에는 I2C)하여 데이터를 교환하고 싶다!
대응 후의 이미지

왼쪽이 Master(이후, Main)의 ESP32(M5Camera)
오른쪽이 Slave(이후 Sub)인 Arduino(M0 PRO)
사이에서 데이터를 송수신하는 모습
절차 개요
절차 상세
1. 두 개의 마이크로 컴퓨터를 I2C로 연결

둘 다 USB를 통해 PC에 연결됩니다.
ESP32 M5Camera
Arduino M0 PRO
GND
GND
5V
Vin
SDA (13)
SDA (16)
SCL (4)
SCL (17)
2. 스케치 예를 참고하여 ESP32에 대응
Master Writer/Slave Receiver
Master Reader/Slave Sender
3. 스케치를 환경에 맞게 편집
3-1. 업로드할 마이크로 컴퓨터에 맞추기
위의 3개 파일 모두에 다음과 같은 정의가 있으므로,
#define MICON_ESP32 // undefined if Arduino
Arduino의 경우, 코멘트 아웃한다.
// #define MICON_ESP32 // undefined if Arduino
3-2. 서브 마이크로 컴퓨터의 주소 변경
I2C_Sub.ino의 다음 정의를 변경합니다.
#define ADDRESS 0x8
4. I2C를 통한 데이터 전달 확인
4-1. I2C로 연결되어 있는지 확인
I2C_Sub.ino에 정의 된 주소를 찾으면 OK
(Main) ESP32 M5Camera
(Sub) Arduino M0 PRO
I2C_Scanner.ino
I2C_Sub.ino

Main측의 시리얼 모니터 출력 발췌
I2C device found at address 0x08 ! ← Sub
I2C device found at address 0x28 ! ← Main
4-2. 마이크로 컴퓨터 간에 데이터를 전달할 수 있는지 확인
(Main) ESP32 M5Camera
(Sub) Arduino M0 PRO
I2C_Main.ino
I2C_Sub.ino
Arduino IDE의 코드와 시리얼 모니터의 모습

Main측의 시리얼 모니터 출력 발췌
writer: ← write("x is 16");
reader: hello ← read();
Sub측의 시리얼 모니터 출력 발췌
receiveEvent: x is 16 ← read();
requestEvent: ← write("hello\n");
요약
Main과 Sub, 각 1 파일로 하기의 대응을 실시했다.
1. Arduino와 ESP32 모두 지원
2. Writer/Receiver와 Reader/Sender 양쪽에 대응
단, ESP32는 표준 라이브러리(TwoWire)에 I2C Slave 기능이 탑재되어 있지 않기 때문에1, 대응은 하지 않는다2.
아무래도 사용하고 싶은 경우는, 하기 라이브러리를 이용하면 좋다.
ESP32 I2C 슬레이브
2020/08/15 시점 ↩
컴파일 오류가 출력됨 ↩
Reference
이 문제에 관하여(Arduino와 ESP32 (M5Camera 등) 간의 I2C 통신 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/saka-guti/items/20a9000491c93214ce01텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)