Рубрики
Схемы на Arduino

Мониторинг температуры и влажности через Интернет с помощью Arduino

Измерение температуры и влажности регулярно производится во многих современных учреждениях: фермы, офисы, медицинские учреждения, промышленные склады и т.д. В связи с этим контроль (мониторинг) этих параметров является востребованной задачей, реализованной во многих электронных устройствах.

Ранее на нашем сайте мы уже рассматривали измерение температуры и влажности с помощью Arduino, а в этом проекте мы рассмотрим мониторинг температуры и влажности через сеть Интернет с помощью Arduino и сервиса (сервера) ThingSpeak. В этом проекте мы будем использовать плату Arduino Uno, датчик DHT11, WiFi модуль ESP8266 и ЖК дисплей. Температура в градусах Цельсия и относительная влажность в процентах будут показываться на ЖК дисплее, а также передаваться на сервер ThingSpeak, на котором через сеть Интернет можно будет посмотреть эти значения из любой точки мира.

Настройка ThingSpeak

Структурная схема работы нашего проекта представлена на следующем рисунке и она содержит 4 секции. Вначале с помощью датчика температуры и влажности DHT11 измеряются эти параметры атмосферы. Затем плата Arduino Uno считывает эти данные с DHT11 и преобразует их в нужную для нас форму, а затем она передает их на Wi-Fi модуль. После этого Wi-Fi модуль ESP8266 передает эти данные на сервер ThingSpeak. Затем сервис ThingSpeak анализирует эти данные и показывает их в удобной графической форме. Также дополнительно значения температуры и влажности показываются на экране ЖК дисплея.

Сервис ThingSpeak представляет собой достаточно удобную платформу для реализации различных проектов тематики интернета вещей (IoT) на Arduino. С помощью сервиса ThingSpeak мы можем просматривать (контролировать) наши данные через сеть Интернет из любой точки мира, также с его помощью мы можем управлять нашими системами (устройствами) через интернет. ThingSpeak собирает данные от датчиков, анализирует и визуализирует эти данные, а затем реагирует на различные события, которые могут привести к изменению этих данных. В этой части статьи мы рассмотрим как передавать данные на сервер ThingSpeak с использованием Wi-Fi модуля ESP8266 (купить на AliExpress).

1. Вначале нам необходимо создать аккаунт на ThingSpeak.com, заходим туда, жмем Sign In, а потом Get Started.

2. Затем идем в пункт меню ‘Channels’ (каналы) и создаем новый канал с помощью кнопки New Channel.

3. После этого увидите форму для создания нового канала, заполните там поля Name (имя) и Description (описание) по своему усмотрению. Затем напишите ‘Humidity’ (влажность) и ‘Temperature’ (температура) в Field 1 (поле 1) и Field 2 (поле 2) и поставьте галочки в чек-боксах напротив этих полей. Также поставьте галочку в чек-боксе ‘Make Public’ (сделать общедоступным) в форме ниже и сохраните канал (Save the Channel). Теперь новый канал для вас создан.

4. Теперь откройте вкладку ‘API keys’ чтобы записать свои ключи с этой вкладки. Нам будет нужен только ключ для записи (Write key). Скопируйте этот ключ в переменную char *api_key в тексте программы (приведен в конце статьи).

5. После этого кликните на ‘Data Import/Export’ и скопируйте Update Channel Feed GET Request URL, который будет примерно вида https://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, "update?api_key=%s&field1=%s&field2=%s",api_key,humidStr,tempStr);

httpGet("api.thingspeak.com", postUrl, 80);

В рассматриваемом проекте плата Arduino передает сигнал старта (после которого начинаются измерения) на датчик DHT, а в ответ датчик DHT передает Arduino сигнал, содержащий необходимые данные измерений. Плата Arduino собирает и извлекает эти данные в два приема: сначала извлекается влажность, а потом извлекается температура. Далее эти данные обрабатываются и передаются на ЖК дисплей 16×2 и сервер ThingSpeak. Сервис ThingSpeak отображает данные температуры и влажности в виде графиков, пример которых показан на следующем рисунке.

Работа схемы

Схема устройства представлена на следующем рисунке.

ЖК дисплей на представленной схеме подключен к плате Arduino в 4-битном режиме. Контакты ЖК дисплея RS, EN, D4, D5, D6 и D7 подсоединены к цифровым контактам Arduino с номерами 14, 15, 16, 17, 18 и 19. Использование ЖК дисплея в данном проекте опционально – можно обойтись и без него.

Датчик DHT11 подсоединен к цифровому контакту 12 платы Arduino. Контакты Vcc и GND модуля ESP8266 подключены к контактам 3.3V и GND платы Arduino, контакт CH_PD также подсоединен к 3.3V. Контакты Tx и Rx модуля ESP8266 непосредственно подсоединены к контактам 2 и 3 платы Arduino. Библиотека последовательной связи (Software Serial Library) используется чтобы осуществлять последовательную связь на контактах 2 и 3 Arduino. Также об использовании Wi-Fi модуля ESP8266 совместно с Arduino можно прочитать в статье про передачу Email с помощью Arduino и модуля ESP8266.

Исходный код программы

В программе мы первым делом должны подключить необходимые библиотеки и инициализировать необходимые переменные.

#include"dht.h" // подключение библиотеки для работы с датчиком dht
#include<LiquidCrystal.h> // библиотека для работы с ЖК дисплеем
LiquidCrystal lcd(14,15,16,17,18,19);
#include<Timer.h>
Timer t;
#include <SoftwareSerial.h> // библиотека последовательной связи
SoftwareSerial Serial1(2, 3); // передача и прием последовательных данных будет производиться на контактах 2 и 3

После этого необходимо записать ваш API key и инициализировать некоторые строки (строковые переменые).

char *api_key="SIWOYBX26OXQ1WMS"; // запишите здесь ваш API key с сервиса ThingSpeak
static char postUrl[150];
int humi,tem;
void httpGet(String ip, String path, int port=80);

В функции void loop() мы будем считывать значения температуры и влажности и затем показывать их на ЖК дисплее.

Функция void send2server() используется для передачи данных на сервер. Функция Send2server представляет собой подпрограмму обработки прерывания от таймера, вызываемую каждые 20 секунд. Когда мы будем вызывать функцию обновления (update function), подпрограмма обработки прерывания от таймера будет вызываться.

void send2server()
{
char tempStr[8];
char humidStr[8];
dtostrf(tem, 5, 3, tempStr);
dtostrf(humi, 5, 3, humidStr);
sprintf(postUrl, "update?api_key=%s&field1=%s&field2=%s",api_key,humidStr,tempStr);
httpGet("api.thingspeak.com", postUrl, 80);
}

Далее представлен полный текст программы.

Видео, демонстрирующее работу схемы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *