Рубрики
Проекты на Raspberry Pi

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

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

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

Значения температуры и влажности окружающей среды в нашем проекте будут показываться на экране ЖК дисплея – температура будет показываться в градусах Цельсия, а влажность – в процентах. Также на экране ЖК дисплея будет показываться значение атмосферного давления в миллибарах или гектопаскалях (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’ в коде программы.

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

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

Этот 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 мы будем передавать на ЖК дисплей 16×2 и сервер ThingSpeak, который будет отображать их в виде графиков, пример которых показан на следующем рисунке:

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

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

Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158

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

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

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

Настройка Raspberry Pi

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

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

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

Объяснение программы для 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

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

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

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