RPi Lecture #4 - Circuitpython 라즈베리파이 I2C 온습도 센서





안녕하세요~ 매드 입니다.
이번시간에는 CircuitPython을 이용해서 I2C 통신을 해보도록 할께요.

센서들과 통신하는 가장 보편적인 방법이 I2C, SPI 통신이니까 이 두가지만 잘 학습해두시면 여러가지 센서들을 다루시는데 문제 없으실 거에요.

기존 아두이노 센서들의 경우 I2C 통신 전압이 5V로 출력되는 경우가 있으니 라즈베리파이와 연결하시기 전에 3.3V가 출력되는지 반드시 확인해주세여~ 그렇지 않으면 소중한 라즈베리파이가 망가질 수 있습니다. ㅠ

<출처 : https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/i2c-sensors-and-devices>

  • 센서보드 Vcc(Vin)에 라즈베리파이 3.3V 전원을 연결
  • 센서보드 GND에 라즈베리파이 GND를 연결
  • 센서보드 SDI 핀에 라즈베리파이 SDA를 연결
  • 센서보드 SCK 핀에 라즈베리파이 SCL을 연결

위와 같이 연결한 후 센서보드와 라즈베리파이 통신이 잘되는지를 확인하기 위해 라즈베리파이에서 아래와 같이 명령을 줍니다.

sudo i2cdetect -y 1



화면에 나타난 77(센서마다 다름) 이라는 숫자가 센서보드의 I2C 주소값이에요!

여기까지 되었다면 우선 통신은 잘 되는거네요.

이제 센서보드에 맞는 라이브러리를 설치해야되요.

pip3 install adafruit-circuitpython-센서보드이름

보통 위와 같이 적으면 센서보드의 Circuitpython 라이브러리를 설치하실 수 있어요.

위와 같이 했는데도 그런게 없다고 나온다면 아쉽게도 센서 전용 라이브러리가 없다고 보시면 될 것 같네요 .ㅠ

공식 홈페이지에서는 bme280이라는 센서를 사용하였으니 우선 거기에 맞는 순서로 진행해볼께요.


pip3 install adafruit-circuitpython-bme280

설치가 완료된 후에 text 에디터를 사용하여 코드를 작성해 줍니다.

  1. import time
  2.  
  3. import board
  4. import busio
  5. import adafruit_bme280
  6.  
  7. # Create library object using our Bus I2C port
  8. i2c = busio.I2C(board.SCL, board.SDA)
  9. bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)
  10.  
  11. # OR create library object using our Bus SPI port
  12. # spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
  13. # bme_cs = digitalio.DigitalInOut(board.D10)
  14. # bme280 = adafruit_bme280.Adafruit_BME280_SPI(spi, bme_cs)
  15.  
  16. # change this to match the location's pressure (hPa) at sea level
  17. bme280.sea_level_pressure = 1013.25
  18.  
  19. while True:
  20. print("\nTemperature: %0.1f C" % bme280.temperature)
  21. print("Humidity: %0.1f %%" % bme280.humidity)
  22. print("Pressure: %0.1f hPa" % bme280.pressure)
  23. print("Altitude = %0.2f meters" % bme280.altitude)
  24. time.sleep(2)

핵심코드는 아래 두줄이에요.

    1. i2c = busio.I2C(board.SCL, board.SDA)
    2. bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)

I2C 센서를 사용하고 라이브러리를 사용한다면 이 두가지 구문만 센서에 맞게 작성해서 사용하면 됩니다. 

코드는 센서로부터 온도 습도 기압 고도를 표시하는 코드네요.

bme280_simpletest.py 라는 이름으로 저장하고 콘솔에서 다음과 같이 실행시켜 봅니다.

python3 bme280_simpletest.py

여기까지 잘되셨으면 다행이고 잘 안되시면 아래 유튭을 참조하세여~ :)








댓글 쓰기

0 댓글