Метеостанция на Raspberry Pi: измерение температуры, влажности и давления через сеть Интернет


Температура, влажность и давление являются основными параметрами, которые должна измерять метеорологическая станция (метеостанция). В данной статье мы рассмотрим создание метеостанции на основе платы Raspberry Pi, которая будет измерять температуру, влажность и давление и показывать их значения на экране дисплея, а также транслировать их в сеть Интернет, что позволяет получить к ним доступ из любой точки земного шара. Трансляция этих данных в сеть Интернет будет осуществляться через сервис ThingSpeak, который предоставляет хороший функционал для подобных задач и позволяет выводить измеряемые значения параметров в виде графиков. Подобный проект метеостанции мы уже рассматривали на нашем сайте на основе платы Arduino, но без измерения давления. Такие проекты сейчас принято относить к тематике интернета вещей (Internet of Things, IoT).

Внешний вид проекта метеостанции на Raspberry Pi

Для измерения значений температуры и влажности мы будем использовать датчик DHT11 (на нашем сайте мы рассматривали его подключение к плате Arduino), а для измерения атмосферного давления – датчик BM180 (подробнее о работе с ним также можно прочитать в статье про его подключение к плате Arduino).

Внешний вид датчиков DHT11 и BM180

Значения температуры и влажности окружающей среды в нашем проекте будут показываться на экране ЖК дисплея – температура будет показываться в градусах Цельсия, а влажность – в процентах. Также на экране ЖК дисплея будет показываться значение атмосферного давления в миллибарах или гектопаскалях (hPa). Также все эти данные будут передаваться на сервер ThingSpeak, откуда их можно будет просматривать из любой точки Земли, где есть доступ к сети Интернет. Более подробно работу проекта можно посмотреть на видео, приведенном в конце статьи.

Тестирование работы проекта метеостанции

Работа с сервисом ThingSpeak

Работа нашей метеостанции на основе платы Raspberry Pi будет заключаться в выполнении следующих шагов:

  • сначала датчик DHT11 измеряет температуру и влажность, а датчик BM180 – атмосферное давление;
  • затем плата Raspberry Pi считывает значения с датчика DHT11 с помощью однопроводного протокола (single wire protocol) и с датчика BM180 с помощью протокола I2C. После этого плата Raspberry Pi преобразует считанные значения в удобные для восприятия форматы: влажность в процентах, температура в градусах Цельсия, давление в гектопаскалях или миллибарах;
  • далее эти данные передаются на сервис ThingSpeak используя встроенный в Raspberry Pi 3 Wi-Fi;
  • и, наконец, сервис ThingSpeak анализирует принятые данные и показывает их в форме графиков. Также эти данные отображаются на экране ЖК дисплея.

Структурная схема работы проекта метеостанции

ThingSpeak является отличным инструментом для проектов, связанных с тематикой интернета вещей. С помощью сервиса ThingSpeak мы можем просматривать данные и управлять работой системы через сеть Интернет, используя каналы (Channels) и страницы (webpages), обеспечиваемые данным сервисом. Достаточно подробно работу с сервисом ThingSpeak мы рассматривали в статье про метеостанцию на Arduino – можете ознакомиться с этой статьей если интересно, поэтому здесь мы на работе с сервисом ThingSpeak подробно останавливаться не будем.

Для начала вам необходимо создать себе аккаунт на сервисе ThingSpeak, и создать там новый канал (‘New channel’). Далее вы должны указать настройки этого канала и данные, которые вы хотите мониторить. В нашем проекте нам будет необходимо создать три поля – для значений температуры, влажности и давления.

После этого нажмите на вкладку ‘API keys’ и сохраните с нее ключи чтения и записи (Write and Read API keys), в нашем проекте мы будем использовать только ключ записи (Write key). Вам необходимо будет скопировать этот ключ в переменную ‘key’ в коде программы.

Получение API ключей на сервисе ThingSpeak

Далее нажмите на ‘Data Import/Export’ и скопируйте данные из поля Update Channel Feed чтобы получить URL, который мы далее будем использовать в программе, в нашем случае у нас получился следующий URL:

https://api.thingspeak.com/update?api_key=SIWOYBX26OXQ1WMS&field1=0

Получение фида канала в сервисе ThingSpeak

Этот URL мы будем использовать в коде программы на Python чтобы получить доступ к “api.thingspeak.com” и затем передавать данные используя этот Feed Request как строку запроса.

Но перед отправкой данных на сервис ThingSpeak нам необходимо добавить в эту строку запроса данные температуры, влажности и давления:

URL = 'https://api.thingspeak.com/update?api_key=%s' % key
finalURL = URL +"&field1=%s&field2=%s"%(humi, temp)+"&field3=%s" %(pressure)

Для считывания платой Raspberry Pi данных с датчика DHT11 мы будем использовать протокол однопроводной связи, для этого мы будем использовать библиотеку AdaFruit DHT11. Собранные данные с датчиков DHT11 и BMP180 мы будем передавать на ЖК дисплей 16x2 и сервер ThingSpeak, который будет отображать их в виде графиков, пример которых показан на следующем рисунке:

Вид графиков данных на сервисе ThingSpeak

Необходимые компоненты

  1. Плата Raspberry Pi (купить на AliExpress).
  2. ЖК дисплей 16x2 (купить на AliExpress).
  3. Потенциометр 10 кОм (купить на AliExpress).
  4. Датчик температуры и влажности DHT11 (купить на AliExpress).
  5. Датчик барометрического давления BMP180 (купить на AliExpress).
  6. Макетная плата.
  7. Соединительные провода.

Схема проекта

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

Схема метеостанции на основе платы Raspberry Pi

Как видите, схема достаточно проста. ЖК дисплей подключен к плате Raspberry Pi в 4-битном режиме.

Настройка Raspberry Pi

Для работы нашего проекта нам необходимо установить библиотеку Adafruit для работы с датчиком DHT11 – Adafruit Python DHT Sensor Library. Для этого необходимо выполнить следующую последовательность команд:

Процесс установки библиотеки Adafruit Python DHT Sensor

После этого в настройках Raspberry Pi необходимо включить возможность работы с интерфейсом I2C, для этого заходим в настройки с помощью команды:

Затем заходим в ‘Advance Options’ (расширенные настройки), выбираем ‘I2C’ и ‘Enable’ (включаем его).

Меню расширенных настроек в плате Raspberry Pi

Включение протокола I2C в плате Raspberry Pi

Объяснение программы для Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом в программе нам необходимо подключить все необходимые библиотеки, инициализировать переменные и задать (определить) необходимые контакты.

В функции def main() мы будем передавать данные на сервер ThingSpeak и отображать их на экране ЖК дисплея.

Функция def lcd_init() будет использоваться для инициализации ЖК дисплея в 4-битном режиме, функция def lcdcmd(ch) – для передачи команд на ЖК дисплей, функция def lcddata(ch) – для передачи данных на ЖК дисплей, функция def lcdstring(Str) – для передачи строки на ЖК дисплей. Код этих функций приведен далее в тексте программы. Более подробно о подключении ЖК дисплея к плате Raspberry Pi вы можете прочитать в этой статье.

Функция def readDHT() используется для считывания данных с датчика DHT11.

Функция def readBmp180 используется для считывания данных с датчика давления BM180. Датчик BM180 также измеряет и температуру, но мы в нашем проекте это его свойство не используем.

Вы можете усовершенствовать данный проект метеостанции на Raspberry Pi, добавив в него измерение скорости ветра, освещенности, температуры земли, интенсивности дождя, качества воздуха и т.д.

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

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

(Проголосуй первым!)
Загрузка...
2 763 просмотров

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

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