FW 심화 과정/[2] STM32심화실습

[RasPi] adafruit_dht 업데이트 이슈 & 온도,습도 모니터링 시스템

천숭이 2022. 7. 13. 23:37

라즈베리파이4, notepad++, ssh로 원격으로 실습 진행.

 

오늘 한 실습은 온습도 측정 센서를 이용해 thinkspeak 웹을 사용. mathworks 계정이 있다면 사용 가능.

thinkspeak 내 채널

채널을 추가하고 관측 원하는 field를 알맞은 이름과 함께 추가한다.

 

온습도 변화가 서버에 저장되는 원리는, 개인에게 주어지는 고유한 Key를 url과 결합해서 field 옵션이 변경될때마다 서버에 변수들이 갱신된다. 위 그림처럼 차트와 어플로 확인 가능.

 

 

** Adafruit_DHT 문제발생 해결 방법  **

구글링해보면 Adafruit_DHT 라이브러리로 개발된 코드가 많다. 하지만 해당 라이브러리 이름으로는 설치 자체가 안되어 개발자의 github를 살펴보니 라이브러리 이름이 "adafruit-circuitpython-dht" 로 변경됨.또한, 기존 핀번호를 설정해주는 용법에서 -> board를 import해서 핀번호를 설정해주는 방식으로 변경 (board.D21)

https://github.com/adafruit/Adafruit_CircuitPython_DHT

 

해당 라이브러리를 포함해서만으로도 안되는 문제가 발생한다.

RuntimeError: Timed out waiting for PulseIn message

위와 같은 runtime에러가 발생한다면 libgpiod2라이브러리를 하나 더 설치해준다

sudo apt install libgpiod2

 

 

< 최종 코드 >

import time
import urllib.request 
import adafruit_dht
import board
Key="개인 고유 key번호"
Url = 'https://api.thingspeak.com/update?api_key=%s' %Key

# 핀번호까지 설정해주고 온습도 하드웨어 객체(?) 생성
dhtDevice = adafruit_dht.DHT22(board.D21)

while True: 
	humidity= dhtDevice.humidity # 습도
	temp=dhtDevice.temperature   # 온도
    
    # 온도와 습도를 url 뒤에 옵션으로 추가해 값 갱신
	urllib.request.urlopen(Url + "&field1=%d&field2=%d" %(temp, humidity))
	
    # 출력
	s = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
	s = s + " 온도 = %d C, 습도 = %d %%" %(temp, humidity)
	
	print(s)
	time.sleep(15)