В этом проекте будет реализована комнатная настольная метеостанция своими руками. Вы можете подумать, что таких проектов было уже много, но этот проект будет базироваться на новом чипе ESP32, также он будет оснащен новым датчиком BME280, этот датчик измеряет температуру, влажность и атмосферное давление.

Когда настольная метеостанция будет включена, она подключится к WiFi и запросит свежий прогноз погоды для заданной местности. Затем она отобразит его, наряду с данными датчика, на 3,2″ дисплее. Данные с датчика будут обновляться каждые 2 секунды, а данные о погоде — каждый час. Как вы видите, в этом проекте мы будем использовать последние технологии, доступные на сегодняшний день. Если у вас есть опыт в DIY, то проект займёт у вас всего 5 минут.

Если вы новичок, то просмотрите видео, в котором разобраны нюансы сборки.

Шаг 1: Компоненты станции

Чтобы построить свою станцию, нам понадобятся:

  • Плата ESP32 (ссылка)
  • Датчик BME280 I2C (ссылка)
  • Дисплей 3.2” Nextion (ссылка)
  • Небольшая макетная плата (ссылка)
  • Немного проводов (ссылка)

Стоимость проекта будет варьироваться в районе $30.

Вместо модуля ESP32 можно использовать более дешевый чип ESP8266, но я решил использовать ESP32, чтобы получить представление об этом новом модуле и посмотреть, как он работает.

Шаг 2: ESP32


Это первый проект, который я собрал, используя чип ESP32. Если вы не знакомы с ним, чип ESP32 — это следующее поколение популярного чипа ESP8266. ESP32 предоставляет два 32-процессных ядра, работающих на 160MHz,большой объем памяти, WiFi, Bluetooth и много других функций. И это всего за $7.

Посмотрите видео с моим детальным описанием этой платы. Оно поможет понять, почему этот чип изменит наш подход к созданию вещей.

Шаг 3: Дисплей Nextion

Также, это первый проект, в котором я использовал тачевый дисплей Nextion. Это новый вид дисплеев, который оснащен собственным ARM-процессором, позволяющим настраивать дисплей и создавать графический интерфейс. Поэтому мы можем использовать его с любым микроконтроллером и получать хорошие результаты.

Шаг 4: Датчик BME280


Датчик BME280 — это новейший сенсор от Bosch. Он может измерять температуру, влажность и атмосферное давление. Нам нужен всего один датчик, чтобы собрать целую погодную станцию.

В дополнение, этот датчик очень маленький и он прост в управлении. Датчик управляется через интерфейс I2C, так что взаимодействие с Ардуино будет очень простым — для стабильной работы нам нужно будет запитать его и припаять всего пару проводов.

Также существует множество библиотек, разработанных для этого датчика, так что в нашем проекте мы можем использовать любую из них.

Заметка: нам нужен датчик BME280. Существует также датчик BMP280, который не измеряет влажность воздуха. Проверьте название перед тем, как купите датчик.

Шаг 5: Соединяем части вместе





Соединение модулей достаточно простое, вы можете увидеть это на приложенной схеме.

Так как датчик BME280 использует интерфейс I2C, нам нужно всего два провода, чтобы соединить его с ESP32. Я соединил датчик с пинами 26 и 27. В теории, каждый цифровой пин платы ESP32 может быть использован для взаимодействия с периферией, работающей на I2C. На практике, я обнаружил, что некоторые пины не работают, так как зарезервированы для других целей. Пины 26 и 27 работают без перебоев.

Чтобы отправить данные на дисплей, нам нужно соединить провод с пином TX0 на ESP32. Мне пришлось согнуть пин на 90 градусов, чтобы соединить его с дисплеем, так как плата ESP32 оказалась великоватой для макетной платы.

После сборки всех частей, нам нужно залить код на ESP32, а также залить интерфейс на дисплей Nextion. Если у вас возникли трудности при прошивке ESP32, зажмите кнопку BOOT сразу после нажатия кнопки загрузки в ИДЕ Ардуино.

Чтобы залить интерфейс на дисплей, скопируйте файл WeatherStation.tft, который будет приложен ниже, на пустую карту SD. Поместите карту в слот, располагающийся на задней части дисплея. После подачи питания, интерфейс будет загружен в дисплей — можно выключить его и извлечь карту, затем включить заново.

После успешной загрузки кода, станция соединится с WiFi, запросит данные о погоде с сайта openweathermap.org, а также отобразит данные с датчика. Давайте теперь посмотрим на программную часть проекта.

Шаг 6: Код проекта



Чтобы спарсить погодные данные, нам понадобится библиотека JSON для Ардуино. Также нам понадобится библиотека для датчика.

Рассмотрим код. Сначала нам нужно отправить SSID и пароль нашей сети WiFi. Затем нам нужно ввести ключ API с сайта operweathermap.org. Чтобы создать собственный ключ, нужно зарегистрироваться на сайте. Получение текущей погоды бесплатно, но сайт предлагает больше услуг, если вы хотите платить за них. Затем нам нужно найти ID нашего местонахождения. Найдите ваш населённый пункт и скопируйте его ID из URL.

Затем скопируйте ваш ID в переменную CityID. Также скопируйте высоту над уровнем моря для вашего населённого пункта. Это необходимо для того, чтобы барометр показывал точные данные.

Const char* ssid = "yourSSID"; const char* password = "yourPassword"; String CityID = "253394"; //Sparta, Greece String APIKEY = "yourAPIkey"; #define ALTITUDE 216.0 // Altitude in Sparta, Greece

Ответ мы получим в формате JSON. Перед отправкой данных в библиотеку JSON, я вручную удалил некоторые символы, которые вызывали проблемы. После этого библиотека спокойно принимает данные, и мы можем сохранить их в переменные. После сохранения данных в переменные, всё, что нам нужно сделать — это отобразить их на дисплее и ждать, пока через час они не обновятся. Я отобразил на дисплее только прогноз погоды, но вы, при желании, можете вывести на него больше информации — всё сохраняется в переменные. Затем мы считываем информацию о температуре, влажности, давлении с датчика и также отправляем их на дисплей.

Чтобы обновить информацию на дисплее, мы просто отправляем команды на серийный порт:

Void showConnectingIcon() { Serial.println(); String command = "weatherIcon.pic=3"; Serial.print(command); endNextionCommand(); }

Интерфейс дисплея Nextion состоит из заднего фона, текстовых блоков и картинки, которая меняется в зависимости от погоды. Посмотрите руководство к дисплею, чтобы узнать больше о его возможностях. Вы можете быстро спроектировать свои интерфейс, если хотите, чтобы дисплей отображал больше данных.

Или вы можете просто использовать мой код, приложенный к этой инструкции.

Файлы

Шаг 7: Заключительные мысли и улучшения

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

Конечно, это только начало проекта. Я бы хотел добавить в него много улучшений, например графики, тачевую функциональность, может быть, заменил бы дисплей на другой, размером побольше. Также я бы напечатал на 3D принтере красивый корпус. Еще я бы спроектировал более интересный интерфейс и иконки. И у меня уже есть несколько свежих идей комнатных метеостанций, которые можно внедрить!

Захотелось иметь свою метеостанцию, которая передает показания с датчиков на карту народного мониторинга (ищется в гугле за 5 секунд). Оказалось это не так сложно, как кажется. Рассмотрим, что было сделано.

Для данного действия я взял себе Arduino Uno и Ethernet Shield w5100 для нее. Все это заказывалось из Китая на Aliexpress.

Так же там заказал себе датчики: DHT22, DHT11, DS18B20, BMP280 (в планах еще датчики газа, дыма…)

Покурив форумы, гугл, яндекс, я нашел неплохой вариант скетча — https://student-proger.ru/2014/11/meteostanciya-2-1/

Там же в комментариях человек выкладывал дописанный скетч с датчиками освещенности, газа. Я взял их за основу.

В тех скетчах не было поддержки 280-го датчика давления, пообщались с автором, он заменил 180 на 280. Все заработало прекрасно (спасибо ему за это огромное)

Ниже приведу пример итогового скетча, что получился у меня.

В данный момент у меня подключены датчики:
DHT22 — 1шт.
DHT11 — 1шт.
BMP280 — 1шт.
DS18B20 — 2шт.

ВНИМАНИЕ! Перед тем как заливать скетч, не забудьте изменить MAC-адрес устройства, чтобы не пересекаться с другими (например взять Mac-адрес вашего мобильного телефона и изменить в нем последние буквы/цифры, что не «будоражило» вашу локальную сеть!

Примерная схема подключения (картинка взята на просторах интернета от данного скетча):

По техническим причинам у меня не получается выложить скетч прямо сюда. Поместил его в архив. Ссылка на него строчкой выше.

Как видно, показания есть, идут исправно, для примера выложу пару скриншотов со своих датчиков:

Из завалявшихся деталей решил сделать небольшую метеостанцию. На сборку и написание прошивки для контроллера ушло два дня выходных. Еще пара дней ушла на написание, тестирование и отладку остального программного обеспечения. Текущая версия метеостанции измеряет температуру, влажность, давление, имеется связь с компьютером через USB порт от него же и питается, резервное питание от батареи 9 В. Данные отображает на LCD. Еще есть часы. Поскольку, не нашлось подходящего кварца (а покупать принципиально не хотел), сделал синхронизацию времени с компьютером.

Этот проект абсолютно не коммерческий, поэтому схему метеостанции, прошивку контроллера и все необходимое программное обеспечение можно скачать . Исходный код прошивки .

Станция собрана на макетной плате, поэтому чертеж печатной платы и не просите.

Использовались следующие основные компоненты:
ATMega8 - контроллер
MPX4115A - датчик давления
HIH-4000 - датчик влажности
DS18B20 - датчик температуры
WH1602A - дисплей

Я использовал LCD на PLED технологии, можно обыкновенные типа WH1602A. Датчики температуры и влажности вынесены на улицу в защитную коробочку.

Подключаем к компьютеру

Подключение к порту USB требует отдельного описания.

В принципе, можно было подключить и к COM порту, так проще. Но у меня он занят. Выбора нет - USB. Поскольку станция собиралась с чего было, то в ход пошел завалявшийся огрызок кабеля CA-42 для подключения мобильного телефона к компьютеру. Разъем к мобильному телефону ушел в дело, а тот конец, который подключается к компьютеру остался. В самом этом разъеме уже имеется микросхема для USB порта, а на выходе - стандартный UART, тот, который используется в мобильных телефонах и самый раз для контроллера, поэтому провода запаиваем напрямую, без каких либо преобразователей сигнала. После установки драйверов для этого кабеля, появляется виртуальный COM порт. Далее можем любой программой подключиться к нашей метеостанции, например HyperTerminal . Распайку кабеля специально не привожу, поскольку кабеля разные, могут отличатся. Использовать нужно 3 провода TX, RX, GND. Запитать устройство от кабеля, скорее всего, не получится. Я взял не нужный USB разъем и запитал с другого USB порта.

Для того чтобы можно было из командной строки отправлять команды и принимать ответ от метеостанции, была написана программа getfromcom.exe.

Метеостанция понимает только две команды:

AGOV - Возвращает текущие показания датчиков.

SETTIME [время в секундах с начала суток] - команда устанавливает время в метеостанции

Для получения данных выполняем getfromcom.exe COM6 AGOV

Для установки времени выполняем getfromcom.exe COM6 "SETTIME 72565"

COM6 - порт.
72565 - количество секунд с начала суток.

Автоматизация процесса

Теперь можно любой программой считать, обработать данные, отправить куда надо, синхронизировать время метеостанции. Я это сделал с помощью скриптового языка PHP. Во первых это быстро и всегда можно оперативно подправить скрипт и не искать куда делся исходный код. Во вторых, я постоянно работаю с PHP. Но Вы можете написать свою программу на любом удобном для Вас языке. Разумеется, для работы PHP придется его скачать (http://www.php.net/downloads.php) и установить на компьютере. Под Windows это делается элементарно. Скрипт getfromcom.php запускается из файла get_data.bat опрашивает метеостанцию, обрабатывает данные и отправляет на HTTP-сервер скрипту get_data.php. О скриптах на сервере поговорим чуть позже.

Спящий режим рабочего компьютера

Мой компьютер стоит в спящем режиме. Просыпается каждые 3 часа, опрашивает метеостанцию, отправляет данные на сервер и снова засыпает (можно и не выключать - кому как удобнее.). Делается это так: В планировщике задач указывается пакетный файл get_data.bat для выполнения и устанавливается опция "разбудить компьютер для выполнения этого задания".

Компьютер отправляется в спячку командой fShutdown.exe /hibernate
Теперь по указанному времени компьютер проснется и выполнит get_data.bat

Особенности get_data.bat

Команды:

devcon.exe enable PCIVEN_10EC
ping 127.0.0.1
RASPHONE -d Setilite

Запускают сетевое подключение и подымают VPN к моему провайдеру Интернет.

ping 127.0.0.1 - так я сделал необходимую паузу.

Соответственно, отключаем командами:

RASPHONE -h Setilite
devcon.exe disable PCIVEN_10EC

У Вас будет все по другому, поэтому в файле эти строки закомментированы.

После выхода из спячки компьютер начинал думать, что COM порт занят другой программой. Пришлось виртуальный COM порт перезагружать командой devcon.exe restart "USBVid_6547&PID_0232"
У Вас будет другой ID устройства.

Серверные скрипты:

Теперь о скриптах на сервере. Скрипт, который принимает данные: get_data.php
Скрипт сохраняет данные в файл pogoda.log. Вообще то, данные отправляются и в базу данных MySQL. Но для простоты, рассмотрим работу только с файлом. Принимая данные, скрипт проверяет подходит ли IP адрес отправителя. Разрешенные адреса перечислены в файле ip_allow.lst От "чужого" отправителя данные не принимаются.

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

Край флажка оберните вокруг гвоздя так, чтобы он мог свободно вращаться при дуновении ветра. Сделайте из тонких проволочек стрелки, указывающие на юг, север, запад и восток и закрепите их на палке. Флюгер готов. Установите его на вашей метеоплощадке, сориентировав стрелки по сторонам света.

С детьми постарше (6–9 лет) изготовление флюгеров замечательно вписывается в уроки по географии, когда вы рассказываете, как образуются ветра, как использовали знания о них первые мореплаватели, что означают ветры на «конских широтах», что такое пассаты.

Моряки, зная о пассатах - устойчивых ветрах, дующих в тропических поясах, - называли их «торговыми ветрами», потому что с их помощью торговые корабли-парусники (тогда ещё не были изобретены двигатели) пересекали Атлантический океан. На парусниках везли товар из Европы в Америку.

Субтропические ветры между 30 и 38 параллелями южных и северных широт были настолько лёгкими, что парусники вставали в штиль. Приходилось месяцами ждать подходящего ветра. Часто ожидания затягивались на 3–5 месяцев. У моряков заканчивалась пресная вода и еда, и им приходилось питаться лошадьми, которых перевозили в больших количествах из Европы. Поэтому эти широты прозвали «конными».

Используя флюгер, дети отмечают в своих календариках наблюдения за погодой направление, силу и смену ветра. Таким образом мы не просто знакомим их с основными метеорологическими приборами, но и с методикой и техникой наблюдений и обработки результатов.

Термометр своими руками

Установите на метеоплощадке большой термометр и научите детей читать значения температур воздуха. Эта работа является также подготовкой для понимания концепции отрицательных чисел в математике, которая предлагается детям 9–12 лет в школе Монтессори.

Малыши 3–6 лет с удовольствием изготовят собственные термометры из картона и цветных ниток. Для этого:

  1. Посередине белой полоски картона шириной 4–6 см наносят шкалу термометра (выше и ниже нуля).
  2. Соединяют вместе красную и синюю (белую) нити.
  3. В верхнем и нижнем концах шкалы делают отверстия и пропускают через них концы ниток, связав их с обратной стороны.

Сверяясь с настоящим термометром, ребята двигают нить на своих самодельных градусниках, устанавливая и записывая значения температур в календарики погоды.

Гигрометр своими руками

Следующим прибором детской метеостанции является гигрометр - прибор для измерения влажности воздуха. Для его изготовления гигрометра понадобятся:

  • прямоугольный кусок деревянной дощечки или пенопласта;
  • две канцелярские кнопки;
  • скотч;
  • человеческий волос длиной около 10 см;
  • отрезок тонкой проволоки.

Укрепите на дощечке две кнопки на расстоянии примерно 8–10 см. К нижней прикрепите проволоку так, чтобы она могла приходить в движение, то есть нетуго. К верхней кнопке прикрепите кончик волоса, затем протяните его вокруг проволоки и закрепите на верхней кнопке. Прибор готов.

Расскажите детям, как человеческий волос реагирует на влажность воздуха, становясь короче или длиннее. При высокой влажности он удлинится, опустив таким образом стрелку вниз; при низкой влажности, наоборот, волос станет короче и поднимет проволочную стрелку вверх. Это свойство волоса и использовано для изготовления гигрометра.

Осадкомер своими руками

Дополнит вашу метеоплощадку осадкомер - прибор для измерения жидких и твёрдых осадков (града). Возьмите обычное ведро, установите его на небольшой возвышенности (тумбе, табурете). Накапливаемые осадки сливаются в мерный стакан со шкалой. Результаты дети заносят в свои календарики.

Метеостанция, построенная своими руками - это не только часть предметно-развивающей Монтессори-среды, но и увлекательная и познавательная возможность наблюдать за погодой и вести журнал наблюдений.

Обсуждая с детьми погоду, можно расширить тематику и рассказывать им о современных профессиях, зависящих от погодных условий. С детьми постарше (8–9 лет), в рамках Монтессори-программы по экономической географии, мы говорим о том, как климатические условия в целом влияют на экономику разных стран.

  • Эта "метеостанция своими руками" предназначена для работы в походных условиях, а не внутри и снаружи помещения, как сказано вначале статьи. Батарейки, собственный экран. Гораздо проще и удобней было бы использовать для этого ноутбук.
  • Не могу скачать прошивки:(Можете запостить в другом месте? или замылить на allmail@ mail.ru
  • Довольно все замудренно и дороговато.
  • Согласен, что замудренно, но полюбому получается сопостовимо (по деньгам) с китайскими погодниками, а устройство рекомендую рассматривать как один из "кубиков" умного дома, чуточку поправив прошивку данные можно передавать по RS232 например на ПК используемый как фоторамка-центр управления дома или КПК.
  • К стати прошива и исходники нормально скачиваются с англоязычной странички проекта
  • Смутно представляю, для чего такая сложность в быту. Самая крутая станция не даст прогноза сравнимого с тем, что дает космическая съемка. Разве что - в походах в такую глушь, где нет ни мобильного ни радио-интернета. И то врядли: все серьезные компании, у которых жизнь может от погоды зависеть, (планеристы, альпинисты) имеют спутниковый навигатор, а значит - и выход на прогноз.
  • Так это устройство не дает прогноза, а выводит на экран текущие значения параметров погоды. И основное назначение ее не походное, а, к примеру, измерение параметров в теплице и передача ее в дом. Кстати, начало статьи можно перевести и следующим образом: "Погодная станция с измерением давления, относительной влажности, внутренним и отдаленным наружным измерением температуры" , где не говорится о помещении.
  • Схема немного мудреная, но интересная и найдет применение в быту и производстве, для отслеживания параметров помещений, для автоматизации каких-либо процессов.
  • Доброе время суток! Укого есть скачанные файлы печатки и прошивки, скиньте, пожалуйста форум,или на [email protected] . Заранее благодарен!
  • Ну,если,ни у кого нет файлов прошивки и печатной платы, то скажите - какой КРЕТИН удалил все ети файлы?
  • Советую успокоиться, такое ощущение, что весь мир Вам по гроб чем-то обязан. См. страницу первоисточника http://www.elxproject.com/elx/news.php?readmore=36
  • У меня уже года два такая с беспроводным датчиком температуры и влажности.
  • Да нет, никто мне ничем не обязан. За резкость,конечно, извиняюсь - просто был я по етой ссылке.Такое впечатление по етой ссылке создалось,что я, просто категорически обязан зарегиться в Face Book, а ето "сильно" раздражает.Скачать не получилось. Просьба - если укого есть, скачанный архивчик - скинте,пожалуйста, если не трудно, на форум. Заранее благодарю. P.S Я так думаю, форумы,кроме основной функции, так же существуюти для того,что бы избавлять людей от подобного геморроя - просмотра дибильной рекламы и принудительной регистрации в соцсетях и.т.д
  • Пожалуйста, архив во вложении. Схемы, печатки, исходники, прошивки. Не стоит принимать "близко к сердцу", но [I]на будущее вам - не стоит сразу ругаться и возмущаться. Я, как и многие форумчане, прекрасно понимают, что вам нужна какая-то инфа, файлы, схемы и возможно даже очень срочно нужны, но не всегда вы это получаете моментально. Я видел вашу просьбу в сообщении от 28.07.2013, но ответить или чем-то помочь до сегодня не мог (может и других пользователь форума похожая ситуация) Если бы админ быстренько не вмешался, то возможно, что в ваш адрес посыпались бы высказывания и слова "определенной направленности", а дальше "цепная реакция" с ругней, и в итоге обсуждение (тема) разрастается не по делу и остается очень плохое мнение о форуме в целом... Удачи! Если чего, спрашивайте, поможем чем сможем!
  • Добрый день VADZZ! Благодарю за архивчик!