Arduino와 ESP32 (M5Camera 등) 간의 I2C 통신 방법

I2C communication method between Arduino and ESP32 (M5Camera etc.)
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)
사이에서 데이터를 송수신하는 모습

절차 개요


  • 두 개의 마이크로 컴퓨터를 I2C로 연결
  • 스케치 예를 참조하여 ESP32에 대응
  • 스케치를 환경에 맞게 편집
  • I2C를 통한 데이터 전달 확인

  • 절차 상세



    1. 두 개의 마이크로 컴퓨터를 I2C로 연결




    둘 다 USB를 통해 PC에 연결됩니다.
  • M5Camera는 Grove 커넥터 사용
  • M5Camera에서 Arduino에 전원 공급



  • ESP32 M5Camera
    Arduino M0 PRO


    GND
    GND

    5V
    Vin

    SDA (13)
    SDA (16)

    SCL (4)
    SCL (17)


    2. 스케치 예를 참고하여 ESP32에 대응


  • 참고로 한 라이브러리들
  • I2cScanner

  • Master Writer/Slave Receiver
  • File > Examples > Wire > master_writer
  • [File] > [Examples] > [Wire] > [slave_receiver]


  • Master Reader/Slave Sender
  • File > Examples > Wire > master_reader
  • [File] > [Examples] > [Wire] > [slave_sender]


  • 수정 (수행 레벨) 한 코드가 여기
  • I2C 스캔용: I2C_Scanner.ino
  • Main 마이크로 컴퓨터용: I2C_Main.ino
  • Sub 마이크로 컴퓨터용: I2C_Sub.ino


  • 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, Sub의 시리얼 모니터에 기대한 출력이 표시되면 OK



  • (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 슬레이브
  • I2C 슬레이브 기능이 공식적으로 지원되는지 논의하는 링크가 아래에 게시되었습니다
  • .




    2020/08/15 시점 

    컴파일 오류가 출력됨

    좋은 웹페이지 즐겨찾기