습도, 온도 및 압력은 기상 관측소를 구축하고 환경 조건을 측정하기위한 세 가지 기본 매개 변수입니다. 이전에 Arduino를 사용하여 미니 기상 관측소를 구축했으며 이번에는 Raspberry Pi로 기상 관측소를 확장합니다. 이 IoT 기반 프로젝트는 Raspberry Pi를 사용하는 인터넷 서버뿐만 아니라 LCD에 현재 습도, 온도 및 압력 매개 변수 를 표시하여 Raspberry Pi 기상 관측소로 만드는 것을 목표로합니다. 이 설정은 어디서나 설치할 수 있으며 인터넷을 통해 전 세계 어디에서나 해당 장소의 날씨 상태를 모니터링 할 수 있으며 현재 데이터를 표시 할뿐만 아니라 그래프 형태로 과거 값을 표시 할 수도 있습니다.
우리가 사용한 DHT11 습도 및 온도 센서 의 온도와 감지 BM180 압력 센서 모듈 기압을 측정. 이 섭씨 눈금 온도계 및 백분율 눈금 습도계는 LCD 디스플레이를 통해 주변 온도와 습도를 표시하고 기압은 밀리바 또는 hPa (헥토 파스칼)로 표시됩니다. 이 모든 데이터는 인터넷을 통해 전 세계 어디서나 실시간 모니터링을 위해 ThingSpeak 서버로 전송됩니다. 이 튜토리얼의 끝에 있는 데모 비디오 및 Python 프로그램을 확인하십시오.
Working 및 ThingSpeak 설정:
이 IoT 기반 프로젝트에는 4 개의 섹션이 있습니다. 먼저 DHT11 센서는 습도 및 온도 데이터를 감지하고 BM180 센서는 대기압을 측정합니다. 둘째, Raspberry Pi 는 단일 와이어 프로토콜을 사용하여 DHT11 센서 모듈의 출력을 읽고 I2C 프로토콜을 사용하여 BM180 압력 센서의 출력을 읽고 두 센서 값을 백분율 (습도), 섭씨 눈금 (온도), hectoPascal 또는 밀리바 (압력) 단위로 적절한 숫자로 추출합니다.. 셋째, 이러한 값은 Raspberry Pi 3 의 내장 Wi-Fi를 사용하여 ThingSpeak 서버로 전송됩니다. 마지막으로 ThingSpeak 는 데이터를 분석하여 그래프 형식으로 표시합니다. LCD는 또한 이러한 값을 로컬로 표시하는 데 사용됩니다.
ThingSpeak 는 IoT 기반 프로젝트를위한 매우 좋은 도구를 제공합니다. ThingSpeak 웹 사이트를 사용하면 ThingSpeak에서 제공하는 채널 및 웹 페이지를 사용하여 인터넷을 통해 데이터를 모니터링하고 시스템을 제어 할 수 있습니다. ThingSpeak 는 센서에서 데이터를 '수집' 하고 데이터를 '분석 및 시각화' 하고 반응을 트리거하여 '행동' 합니다. 이전에 ThingSpeak에 데이터를 보내는 방법에 대해 자세히 설명 했으므로 여기서 확인할 수 있습니다. 여기에서는이 Raspberry Pi 기상 관측소에 ThingSpeak를 사용하는 방법에 대해 간략하게 설명합니다.
먼저 ThingSpeak 웹 사이트에서 계정을 생성하고 그 안에 '새 채널'을 생성해야합니다. 새 채널에서는 모니터링 할 데이터에 대한 일부 필드를 정의해야합니다.이 프로젝트에서는 습도, 온도 및 압력 데이터에 대한 세 개의 필드를 만들 것입니다.
이제 'API 키'탭을 클릭 하고 쓰기 및 읽기 API 키를 저장합니다. 여기서는 쓰기 키만 사용합니다. 이 키를 코드의 'key'변수에 복사해야합니다.
그런 다음 '데이터 가져 오기 / 내보내기'를 클릭하고 다음과 같은 업데이트 채널 피드 GET 요청 URL을 복사합니다.
api.thingspeak.com/update?api_key=30BCDSRQ52AOI3UA&field1=0
이제 "api.thingspeak.com"을 열고이 피드 요청을 쿼리 문자열로 사용하여 데이터를 전송하려면 Python 코드에이 'Feed Get Request URL'이 필요합니다. 그리고 데이터를 보내기 전에 사용자는 프로그램의 변수를 사용하여이 쿼리 문자열에 온도, 습도 및 압력 데이터를 입력해야합니다.이 기사 끝에있는 코드를 확인하십시오.
URL = 'https://api.thingspeak.com/update?api_key=%s'% key finalURL = URL + "& field1 = % s & field2 = % s"% (humi, temp) + "& field3 = % s"% (압력)
DHT11의 작동은 DHT11에서 데이터를 가져 오기위한 단선 직렬 통신을 기반으로합니다. 여기에서는 DHT11을 Raspberry Pi와 인터페이스하기 위해 AdaFruit DHT11 라이브러리를 사용 했습니다. 여기에서 Raspberry Pi는 DHT11의 습도 및 온도 데이터와 BMP180 센서의 대기압을 수집하여 16x2 LCD 및 ThingSpeak 서버로 보냅니다. ThingSpeak는 다음과 같은 그래프 형태로 데이터를 표시합니다.
여기에서 DHT11 센서 및 Arduino와의 인터페이스 에 대해 자세히 알아볼 수 있습니다.
회로도:
Raspberry Pi 구성 및 Python 프로그램:
우리가 사용하는 파이썬 언어 여기에 프로그램을. 코딩하기 전에 사용자가 Raspberry Pi를 구성해야합니다. Raspberry Pi 시작하기 및 Pi에서 Raspbian Jessie OS 설치 및 구성에 대한 이전 자습서를 확인할 수 있습니다.
먼저 Raspberry Pi에서이 프로젝트를 실행하려면 Adafruit Python DHT 센서 라이브러리 파일을 설치해야합니다. 이렇게하려면 주어진 명령을 따라야합니다.
sudo apt-get install git-core sudo apt-get update git clone https://github.com/adafruit/Adafruit_Python_DHT.git cd Adafruit_Python_DHT sudo apt-get install build-essential python-dev sudo python setup.py install
그 후 사용자는 RPi 소프트웨어 구성으로 이동하여 Raspberry Pi I2C 를 활성화 해야합니다.
sudo raspi-config
그런 다음 '고급 옵션'으로 이동하여 'I2C'를 선택하고 '활성화'하십시오.
이 프로젝트의 프로그래밍 부분 은 모든 작업을 수행하는 데 매우 중요한 역할을합니다. 먼저 필요한 모든 라이브러리를 포함하고 변수를 초기화하고 LCD 및 DHT11에 대한 핀을 정의합니다.
import sys import RPi.GPIO as GPIO import os import Adafruit_DHT import urllib2 import smbus import time from ctypes import c_short #Register Address regCall = 0xAA……………..
에서는 DEF의 main () 함수, 아래의 코드는 연속적으로 데이터를 서버로 전송하고, LCD를 통해 표시하기 위해 사용되는 반면 루프.
def main (): print 'System Ready…'URL = 'https://api.thingspeak.com/update?api_key=%s'% key print "Wait…."while True: (humi, temp) = readDHT () (압력) = readBmp180 () lcdcmd (0x01) lcdstring ("Humi # Temp # P (hPa)") lcdstring (humi + '%'+ "% sC % s"% (temp, pressure)) finalURL = URL + "& field1 = % s & field2 = % s"% (humi, temp) + "& field3 = % s"% (pressure) print finalURL s = urllib2.urlopen (finalURL); print humi + ""+ temp + ""+ 압력 s.close () time.sleep (10)
LCD의 경우 def lcd_init () 함수를 사용하여 LCD를 4 비트 모드로 초기화하고 def lcdcmd (ch) 함수를 사용하여 LCD에 명령을 보내고 def lcddata (ch) 함수를 사용하여 LCD에 데이터를 보내고 def lcdstring (Str ) 기능은 데이터 문자열을 LCD로 보내는 데 사용됩니다. 나중에 주어진 코드에서 이러한 모든 기능을 확인할 수 있습니다.
주어진 def readDHT () 함수는 DHT11 센서를 읽는 데 사용됩니다.
def readDHT (): humi, temp = Adafruit_DHT.read_retry (Adafruit_DHT.DHT11, DHTpin) return (str (int (humi)), str (int (temp)))
def readBmp180 함수는 BM180 센서에서 압력을 읽는 데 사용됩니다. BM180 센서는 온도를 제공 할 수도 있지만 여기서는 압력 계산에만 사용했습니다.
def readBmp180 (addr = deviceAdd): value = bus.read_i2c_block_data (addr, regCall, 22) # 교정 데이터 읽기 # 바이트 데이터를 워드 값으로 변환 AC1 = convert1 (value, 0) AC2 = convert1 (value, 2) AC3 = convert1 (값, 4) AC4 = convert2 (값, 6)……………………..
따라서 이것은 기본 Raspberry Pi 기상 관측소 이며, 풍속, 토양 온도, 조도 (럭스), 강우량, 공기질 등과 같은 다양한 날씨 관련 매개 변수를 측정하도록 추가로 확장 할 수 있습니다.