행복한 하루

RaspberryPi Pico에 연결된 I2C 모듈의 주소 알아내기 본문

RaspberryPi

RaspberryPi Pico에 연결된 I2C 모듈의 주소 알아내기

변화의 물결 2021. 10. 13. 00:05

 

 

안녕하세요.

 

  RaspberryPi Pico에 연결된 모듈의 I2C 주소를 모를 경우 데이터를 가지고 올 수 없습니다. 만약 데이터 시트를 가지고 있다면 큰 문제가 되지 않지만, 모를 경우 간단한 코드로 확인할 수 있습니다.


1. 하드웨어 구성 및 핀 연결

 - 라즈베리 파이 피코와 I2C 모듈인 0.96인치 OLED를 가지고 테스트해보겠습니다. Pico 핀 맵을 보면 하늘색으로 I2C를 사용할 수 있도록 많은 핀에서 지원을 해주고 있습니다. 그래서 원하는 핀에서 연결해서 소프트웨어로 설정하면 가능하다는 것을 알 수 있습니다.

 - 테스트를 I2C0, I2C1 핀 위치만 주의하시면 됩니다. 여기서는 I2C0를 사용하여 GP0핀과 GP1핀을 이용해보겠습니다. 그리고 3.3V 출력 핀과 GND 핀을 연결해줍니다.

 

 

 - 브래드 보드에 OLED와 RaspberryPi Pico를 연결합니다.

2. 소스 확인

  - Pin, I2C Class를 임포트 해오고 i2c id가 0번, SCL 핀, SDA핀, SCL를 위한 주파수를 인자로 넣어 객체를 생성합니다.

  - i2c.scan() 함수를 호출하면 0x08 ~ 0x77 주소에 대해서 신호를 보내어 리턴되는 값을 배열에 저장합니다.

  - 현재 모듈을 하나 연결했기 때문에 첫 번째 배열의 값을 가지고 헥사 값으로 출력합니다. 

from machine import Pin, I2C

i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=200000)

print("I2C Address : " + hex(i2c.scan()[0]).upper())

3. 실행 결과

  - 정상적으로 연결되어 있다면 0x3C 값이 출력됩니다. 그러나 연결이 잘못했거나 장비가 고장 났다면 주소 값을 가져올 수 없고 배열에도 값이 없기 때문에 IndexError 에러가 발생합니다. 그럴 때는 핀 연결과 모듈 고장이 아닌지 확인이 필요합니다.

 

 

감사힙니다.

 

 

<참고 사이트>

1. Raspberry Pi PICO | Starting With MicroPython + Examples | I2C OLED, ADC, PWM

https://www.youtube.com/watch?v=zlKJ5hvfs6s

2. class I2C – a two-wire serial protocol

https://docs.micropython.org/en/latest/library/machine.I2C.html?highlight=i2c#machine.I2C  

 

 

Comments