행복한 하루

라즈베리파이 제로 프로젝트(6) – 온도,습도 구하기-2편(HTU21D python 프로그래밍) 본문

RaspberryPi/Raspberry Pi Zero

라즈베리파이 제로 프로젝트(6) – 온도,습도 구하기-2편(HTU21D python 프로그래밍)

변화의 물결 2020. 10. 5. 00:44

 

 

안녕하세요.

 

  오늘은 라즈베리파이 제로를 통해 온도, 습도를 구할 있도록 프로그래밍을 해보도록 하겠습니다.

그러기 위해서는 I2C 관련된 작업이 필요하고 파이썬 프로그래밍 이해가 조금 필요합니다.

그렇지만, 따라 하시면서 ~ 정도로 보실 정도로 진행해 보겠습니다.

 

1. I2C 라이브러리 설치

  - 만약 Raspbian-full 버전을 설치하셨다면, 과정은 필요 없습니다. 그렇지 않다면 설치 프로그램으로 i2c-tools, python-embus 설치해주어야 합니다.

 

    pi@raspberrypi:~ $ sudo apt-get install i2c-tools python-smbus

이미 설치되어 있다면 아래와 같이 설치되었다고 나옵니다.

i2c-tool 설치된 경우

2. I2C 활성화해주기

  - 기본적으로는 I2C disabled 상태입니다. 그래서 활성화를 시켜주어야 합니다. 그러나 어렵지 않게 있습니다. 이전 암호 설정할 이용했던 설정 페이지로 들어갑니다.

    pi@raspberrypi:~ $  sudo raspi-config

 

  - InterfacingOptions 선택합니다.

raspi-config 설정화면

  - P5 I2C 선택합니다.

I2C 선택

  - 활성화하겠느냐? 에서 Yes 선택합니다.  

활성화 선택

  그러면 OK 선택하고 이제 사용할 있게 됩니다설정되었는지 확인해 있습니다.

    pi@raspberrypi:~ $ ls /dev/i2c*

 

  - i2c-1 나타난다면 설정된 것으로 보면 됩니다.

 

3. 연결된 모듈 주소 확인 

  - 물리적으로 핀들을 연결했다면 장치와 통신이 되는지 한번 확인도 해보아야 합니다라즈베리파이에는 i2c에는 연결된 장치들의 주소를 가져올 있는 명령어를 제공하고 있습니다. 보통 임베디드 장비에는 기본적으로 설치되어 있습니다. 여기서는 i2c-tool 설치했기 때문에 있다고 보면 됩니다.

  i2cdetect 를 하는데 1 연결된 장비들의 주소를 가져오도록 합니다.

    pi@raspberrypi:~ $ i2cdetect -y 1

 

  그러면 온도, 습도 센서의 주소 값을 확인할 수 있습니다. 현재 제품의 주소는 40으로 나타나고 있습니다. 40(세로 ) + 0(가로 ) = 주소 40

  동일한 주소를 가지는 모듈을 연결한다면 충돌이 나서 값을 제대로 가져올 없습니다. 그래서 하드웨어 적으로 주소를 변경시켜주거나 다른 모듈을 사용해야 합니다. 

i2cdetect

4. 프로그램 작성

  - 온도 습도를 가져오는 파이썬 프로그램을 작성해보겠습니다. 프로그래밍 방법은 vim 원격으로 접속해서 Thonny Python IDE 선택할 수 있습니다.

Thonny Python IDE 메뉴

  - vim으로 작성할 경우 기본적으로 설치되어 있지 않았기 때문에 설치해주어야 합니다.

    pi@raspberrypi:~ $ sudo apt-get install vim

  

  - HTU21D 프로그래밍을 복잡하게 작성할 수도 있지만, 인터넷에는 실력 좋으신 분들이 라이브러리 형태로 이미 만들어 놓았기 때문에 이것을 이용해서 이해하는 정도로 해보겠습니다.

 

  1) htu21df 라이브러리를 설치합니다.

  -  주의할 점:  pip install htu21df 로 할 경우 python2 사용되기 때문에 ModuleNotFoundError: No module named 'htu21' 를 볼 있습니다. 그러니 pip3으로 해주어야 사용하는 python3으로 사용할 있습니다.

    pi@raspberrypi:~ $ pip3 install htu21df

 

  2) 소스 파일을 만들고 프로그래밍합니다.

    pi@raspberrypi:~ $ vim htu21d.py

from htu21 import HTU21
from time import sleep

htu = HTU21()

while(True) :
 print(htu.read_temperature())
 print(htu.read_humidity())
 sleep(1)

 

  3) 결과 확인

    - 1초 단위로 온도와 습도를 가져오는 것을 확인할 수 있습니다. 결괏값은 표시는 소수점을 줄이고 단위 표시를 해서 좀 더 보기 좋게 처리할 수도 있습니다. 

 

왼쪽-Thonny IDE, 오른쪽 Putty CUI에서 실행

 

  라이브러리 만들어 놓으신 것을 사용하면 여러 가지 설정 등을 프로그래밍하지 않고도 감사하게 값을 가져올 있습니다. 그러나 실제로는 레지스터 세팅과 원래 값(RAW)을 받아서는 사용할 없어서 계산해주어야 합니다.

  참고 삼아 C 언어 소스와  실제로 작성할 경우 python 소스를 링크 걸어두도록 하겠습니다. 참고해서 프로그래밍 내부구조도 한 번쯤 확인해보시면 도움이 되실 거라 생각됩니다.

 

감사합니다.

 

 

<HTU21D 소스 참고 사이트>

 - C 언어로 작성한 소스

https://github.com/leon-anavi/rpi-examples/tree/master/HTU21D/c 

 - 파이썬으로 작성한 소스

https://s55ma.radioamater.si/2017/05/23/htu21d-raspberry-pi-python-script/  

 - 라이브러리 소스

https://github.com/MSeal/htu21df_sensor

 

 

 

Comments