Вологість, температура та тиск - три основні параметри для побудови будь-якої метеостанції та вимірювання умов навколишнього середовища. Раніше ми побудували міні- метеостанцію за допомогою Arduino, і цього разу ми розширюємо метеостанцію за допомогою Raspberry Pi. Цей проект, заснований на IoT, має на меті показати поточні параметри вологості, температури та тиску на РК-дисплеї, а також на Інтернет-сервері за допомогою Raspberry Pi, що робить його метеостанцією Raspberry Pi. Ви можете встановити цю установку в будь-якому місці і можете контролювати погодні умови цього місця з будь-якої точки світу через Інтернет, вона не тільки відображатиме поточні дані, але також може відображати минулі значення у вигляді графіків.
Ми використовували датчик вологості та температури DHT11 для вимірювання температури та модуль датчика тиску BM180 для вимірювання барометричного тиску. Цей термометр шкали Цельсія та відсоток вимірювача вологості відображає температуру навколишнього середовища та вологість через РК-дисплей, а барометричний тиск відображається в мілібарах або гПа (гектопаскалях). Усі ці дані надсилаються на сервер ThingSpeak для моніторингу в реальному часі з будь-якої точки світу через Інтернет. Перевірте демонстраційне відео та програму Python, подану в кінці цього посібника.
Налаштування Work and ThingSpeak:
Цей проект на основі Інтернету речей має чотири розділи. По-перше, датчик DHT11 визначає дані вологості та температури, а датчик BM180 вимірює атмосферний тиск. По-друге, Raspberry Pi зчитує вихідні дані модуля датчика DHT11 за допомогою однопровідного протоколу та вихід датчика тиску BM180 за допомогою протоколу I2C і витягує значення обох датчиків у відповідне число у відсотках (вологість), шкала Цельсія (температура), гектопаскаль або мілібар (тиск). По-третє, ці значення надсилаються на сервер ThingSpeak за допомогою вбудованого Wi-Fi Raspberry Pi 3. І, нарешті, ThingSpeak аналізує дані та показує їх у формі Графіка. РК-дисплей також використовується для локального відображення цих значень.
ThingSpeak забезпечує дуже хороший інструмент для проектів на основі IoT. Використовуючи веб-сайт ThingSpeak, ми можемо відстежувати наші дані та контролювати нашу систему через Інтернет, використовуючи Канали та веб-сторінки, надані ThingSpeak. ThingSpeak "збирає" дані з датчиків, "аналізує та візуалізує" дані та "діє", викликаючи реакцію. Ми раніше детально пояснювали про надсилання даних до ThingSpeak, ви можете перевірити там. Тут ми коротко пояснюємо, як використовувати ThingSpeak для цієї метеостанції Raspberry Pi.
Спочатку потрібно створити обліковий запис на веб-сайті ThingSpeak і створити в ньому «Новий канал». У новому каналі ви повинні визначити деякі поля для даних, які ви хочете контролювати, як у цьому проекті ми створимо три поля для даних про вологість, температуру та тиск.
Тепер натисніть на вкладку "Ключі API" та збережіть ключі API Write and Read API, тут ми використовуємо лише ключ Write. Вам потрібно скопіювати цей ключ у змінну 'key' у Коді.
Після цього натисніть "Імпорт / експорт даних" і скопіюйте URL-адресу запиту на отримання каналу оновлення GET, а саме:
api.thingspeak.com/update?api_key=30BCDSRQ52AOI3UA&field1=0
Тепер нам потрібен цей „URL отримати запит URL” у нашому коді Python, щоб відкрити “api.thingspeak.com”, а потім надіслати дані, використовуючи цей запит на подачу, як рядок запиту. І перед тим, як надіслати дані, користувачеві потрібно ввести дані про температуру, вологість та тиск у цьому рядку запиту, використовуючи змінні в програмі, ознайомтесь із кодом в кінці цієї статті.
URL = 'https://api.thingspeak.com/update?api_key=%s'% ключ finalURL = URL + "& field1 =% s & field2 =% s"% (humi, temp) + "& field3 =% s"% (тиск)
Робота DHT11 заснована на однопровідному послідовному зв'язку для отримання даних з DHT11. Тут ми використовували бібліотеку AdaFruit DHT11 для взаємодії DHT11 з Raspberry Pi. Тут Raspberry Pi збирає дані про вологість і температуру від DHT11 та атмосферного тиску від датчика BMP180, а потім надсилає їх на РК-дисплей 16x2 та сервер ThingSpeak. ThingSpeak відображає дані у вигляді графіку, як показано нижче:
Ви можете дізнатись більше про датчик DHT11 та його взаємодію з Arduino тут.
Кругова діаграма:
Конфігурація Raspberry Pi та програма Python:
Для програми ми використовуємо мову Python. Перед кодуванням користувачеві потрібно налаштувати Raspberry Pi. Ви можете переглянути наші попередні підручники з Початок роботи з Raspberry Pi та Встановлення та налаштування ОС Raspbian Jessie в Pi.
Перш за все нам потрібно встановити файли бібліотеки сенсорів Adafruit Python DHT для запуску цього проекту на Raspberry Pi. Для цього нам потрібно слідувати заданим командам:
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-vital python-dev sudo python setup.py install
Після цього користувачеві потрібно ввімкнути Raspberry Pi I2C, також перейшовши до налаштування програмного забезпечення RPi:
sudo raspi-config
Потім перейдіть до «Advance Options», виберіть «I2C» та «Enable».
Частина програмування цього проекту відіграє дуже важливу роль для виконання всіх операцій. Перш за все, ми включаємо всі необхідні бібліотеки, ініціюємо змінні та визначаємо висновки для 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 (): print 'System Ready…' URL = 'https://api.thingspeak.com/update?api_key=%s'% key print "Почекай….", а 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"% (тиск) print finalURL s = urllib2.urlopen (finalURL); print humi + "" + temp + "" + тиск s.close () time.sleep (10)
Для РК функція def lcd_init () використовується для ініціалізації РК в чотирирозрядному режимі, функція def lcdcmd (ch) використовується для надсилання команди на РК, функція def lcddata (ch) використовується для надсилання даних на РК та def lcdstring (Str ) використовується для надсилання рядка даних на РК-дисплей. Ви можете перевірити всі ці функції в коді, наданому згодом.
Дана функція 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, ви можете додатково розширити її для вимірювання різних параметрів, пов’язаних з погодою, таких як швидкість вітру, температура ґрунту, освітленість (люкс), кількість опадів, якість повітря тощо.