Влажността и температурата са много често срещани параметри за измерване на много места като ферма, оранжерия, медицина, индустриален дом и офиси. Вече покрихме измерването на влажността и температурата с помощта на Arduino и показахме данните на LCD.
В този IoT проект ще наблюдаваме влажността и температурата през интернет с помощта на ThingSpeak, където ще показваме текущите данни за влажност и температура през интернет, използвайки сървъра ThingSpeak. Това се постига чрез комуникацията на данни между Arduino, сензорен модул DHT11, WSPI модул ESP8266 и LCD. Термометърът за скала на Целзий и измервателят на влажност в проценти скала показват температурата и влажността на околната среда чрез LCD дисплей и също ги изпращат на сървъра ThingSpeak за мониторинг на живо от всяка точка на света.
Работа и настройка на ThingSpeak:
Този базиран на IoT проект с четири секции, първо сензорът за влажност и температура DHT11 отчита данните за влажността и температурата . На второ място Arduino Uno извлича данните на сензора DHT11 като подходящо число в проценти и мащаб по Целзий и ги изпраща към Wi-Fi модула. Трето, Wi-Fi модул ESP8266 изпраща данните до Sever на ThingSpeak. И накрая ThingSpeak анализира данните и ги показва в графична форма. Опционалният LCD също се използва за показване на температурата и влажността.
ThingSpeak предоставя много добър инструмент за IoT базирани проекти за Arduino. Използвайки сайта ThingSpeak, ние можем да наблюдаваме данните си през интернет от всяко място и също така можем да контролираме нашата система през интернет, използвайки каналите и уеб страниците, предоставени от ThingSpeak. ThingSpeak „Събира“ данните от сензорите, „Анализира и визуализира“ данните и „Действа“, като задейства реакция. Тук обясняваме как да изпращаме данни към сървъра ThingSpeak с помощта на модула ESP8266 WIFI:
1. На първо място, потребителят трябва да създаде акаунт в ThingSpeak.com, след това да влезе и да щракне върху Първи стъпки.
2. Сега отидете в менюто "Канали" и кликнете върху опцията Нов канал на същата страница за по-нататъшен процес.
3. Сега ще видите формуляр за създаване на канала, попълнете името и описанието според вашия избор. След това попълнете „Влажност“ и „Температура“ в етикетите на поле 1 и поле 2, поставете отметки в квадратчетата за двете полета. Също така поставете отметка в квадратчето за опцията „Публично публикуване“ по-долу във формуляра и накрая Запазете канала. Сега вашият нов канал е създаден.
4. Сега щракнете върху раздела „API ключове“ и запазете API и ключовете за писане и четене, тук използваме само клавиша Write. Трябва да копирате този ключ в char * api_key в кода.
5. След него щракнете върху „Импортиране / експортиране на данни“ и копирайте URL адреса на искането за актуализиране на канал GET, който е:
api.thingspeak.com/update?api_key=SIWOYBX26OXQ1WMS&field1=0
6. Сега потребителят трябва да отвори „api.thingspeak.com“, използвайки функцията httpGet с postUrl като „update? Api_key = SIWOYBX26OXQ1WMS & field1 = 0“ и след това да изпрати данни, използвайки подаване на данни или адрес на заявка за актуализация.
Преди да изпрати данните, потребителят трябва да редактира този низ за заявка или postUrl с полета за данни за температура и влажност, както е показано по-долу. Тук сме добавили и двата параметъра в низа, който трябва да изпратим чрез използване на GET заявка към сървъра, след което използваме httpGet за изпращане на данните към сървъра. Проверете пълния код по-долу.
Sprintf (postUrl, "актуализация? Api_key =% s & field1 =% s & field2 =% s", api_key, humidStr, tempStr); httpGet ("api.thingspeak.com", postUrl, 80);
Целият процес е демонстриран в раздела „ Видео “ в края на този член.
Работата по този проект се основава на едножична последователна комуникация за извличане на данни от DHT11. Първо Arduino изпраща стартов сигнал към DHT модула и след това DHT дава сигнал за отговор със съдържащи данни. Arduino събира и извлича данните на две части, първо е влажността, а втората е температурата и след това ги изпраща на 16x2 LCD и ThingSpeak сървър. ThingSpeak показва данните под формата на графика, както е показано по-долу:
Можете да научите повече за DHT11 сензора и неговата връзка с Arduino тук.
Описание на веригата:
Връзките за този проект за мониторинг на температурата и влажността на ThingSpeak са много прости. Тук се използва течнокристален дисплей за показване на температура и влажност, който е директно свързан с Arduino в 4-битов режим. Пиновете на LCD, а именно RS, EN, D4, D5, D6 и D7, са свързани към цифрови щифтове Arduino с номера 14, 15, 16, 17, 18 и 19. Този LCD не е задължителен.
DHT11 сензорният модул е свързан към цифров щифт 12 на Arduino. Винтовите и GND изводи на Wi-Fi модул ESP8266 са директно свързани към 3.3V и GND на Arduino, а CH_PD също е свързан с 3.3V. Tx и Rx щифтовете на ESP8266 са директно свързани към щифтове 2 и 3 на Arduino. Тук се използва и софтуерна серийна библиотека, която позволява серийна комуникация на пинове 2 и 3 на Arduino. Вече разгледахме подробно взаимодействието на Wi-Fi модула ESP8266 с Arduino.
Част за програмиране:
Програмиращата част от този проект играе много важна роля за извършване на всички операции. На първо място включваме необходимите библиотеки и инициализираме променливи.
#include "dht.h" // Включва библиотека за dht #include
След това въведете вашия API API ключ и вземете няколко низа.
char * api_key = "SIWOYBX26OXQ1WMS"; // Въведете вашия API ключ за запис от ThingSpeak static char postUrl; int humi, tem; void httpGet (String ip, String path, int port = 80);
При функция void loop () четем температура и влажност и след това показваме тези показания на LCD дисплея.
void send2server () функция се използва за изпращане на данните към сървъра. Функцията Send2server е услуга за прекъсване на таймера, извикваща на всеки 20 секунди. Когато извикаме функцията за актуализация, се извиква рутинната услуга за прекъсване на таймера.
void send2server () {char tempStr; char humidStr; dtostrf (tem, 5, 3, tempStr); dtostrf (humi, 5, 3, humidStr); sprintf (postUrl, "актуализация? api_key =% s & field1 =% s & field2 =% s", api_key, humidStr, tempStr); httpGet ("api.thingspeak.com", postUrl, 80); }