행복한 하루
라즈베리파이 제로 프로젝트(6) – 온도,습도 구하기-2편(HTU21D python 프로그래밍) 본문
라즈베리파이 제로 프로젝트(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
이미 설치되어 있다면 아래와 같이 설치되었다고 나옵니다.
2. I2C 활성화해주기
- 기본적으로는 I2C는 disabled 된 상태입니다. 그래서 활성화를 시켜주어야 합니다. 그러나 어렵지 않게 할 수 있습니다. 이전 암호 설정할 때 이용했던 설정 페이지로 들어갑니다.
pi@raspberrypi:~ $ sudo raspi-config
- InterfacingOptions를 선택합니다.
- P5 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
동일한 주소를 가지는 모듈을 연결한다면 충돌이 나서 값을 제대로 가져올 수 없습니다. 그래서 하드웨어 적으로 주소를 변경시켜주거나 다른 모듈을 사용해야 합니다.
4. 프로그램 작성
- 온도 습도를 가져오는 파이썬 프로그램을 작성해보겠습니다. 프로그래밍 방법은 vim과 원격으로 접속해서 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초 단위로 온도와 습도를 가져오는 것을 확인할 수 있습니다. 결괏값은 표시는 소수점을 줄이고 단위 표시를 해서 좀 더 보기 좋게 처리할 수도 있습니다.
라이브러리 만들어 놓으신 분 것을 사용하면 여러 가지 설정 등을 프로그래밍하지 않고도 감사하게 값을 가져올 수 있습니다. 그러나 실제로는 레지스터 세팅과 원래 값(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
'RaspberryPi > Raspberry Pi Zero' 카테고리의 다른 글
라즈베리파이 제로 프로젝트(7) – OLED 0.96인치(SSD1306) 사용해보기 (0) | 2020.10.24 |
---|---|
라즈베리파이 제로 프로젝트(6) – 온도,습도 구하기-번외 편(HTU21D python2 소스를 python3 버전으로 수정) (0) | 2020.10.08 |
라즈베리파이 제로 프로젝트(6) – 온도,습도 구하기-1편(H/W 구성HTU21D) (0) | 2020.10.02 |
라즈베리파이 제로 프로젝트(5) – 스위치 입력 받기 (0) | 2020.09.30 |
라즈베리파이 제로 프로젝트(4) – LED 제어 – 4 (밝기 조절) (0) | 2020.09.26 |