Перейти к публикации
iT4iT.CLUB

Рекомендованные сообщения

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

esp8266_wether_station_1.png

esp8266_wether_station_2.png

 

 

При всей привлекательности микроконтроллера ESP8266 с его большим объемом памяти, железной поддержкой Wi-Fi и массой разных плюшек, он не лишен недостатков. Самый основной - ограниченное количество поддерживаемых одновременных TCP соединений равное 5. Если превысить этот лимит, то контроллер потеряет связь с окружающим миром, при этом watchdog будет думать, что все в порядке, а следовательно, даже не попытается нам помочь. Будем стараться это помнить!

Стоит начать с концепции

  1. Доступ к данным метеостанции нужно получать без установки внешних приложений и под любой операционной системой. Для этих целей подойдет практически любой современный браузер. Меня всем устраивает Chrome.
  2. Раз уж за основу взят HTTP протокол, стоит озаботиться экономией трафика и ограничением числа TCP соединений. Хорошим тоном будет передача всего необходимого для формирования страницы контента только при первом обращении, а все последующие операции, такие как отображение показаний с датчиков или настройку контроллера, производить через API. В этом нам поможет JQuery.
  3. А вот, чтобы ослабить болевые ощущения от передачи файлов с SPI Flash в браузер, стоит предусмотреть систему кэширования, например, Etag. Это позволит отдавать тяжелый контент единожды, а при последующих загрузках страницы просто подтверждать его актуальность на уровне Web сервера микроконтроллера и кэш браузера вступит в игру, неимоверно уменьшив время загрузки страницы! "Вы были правы в одном, Мастер: переговоры были недолгими." © Звездные войны. Эпизод 1
  4. Из-за того, что метеостанция с датчиками и контроллером должна располагаться на улице, жизненно необходимо предусмотреть возможность обновлять прошивку ESP через Web интерфейс.
  5. Аналогичным образом должны обновляться файлы Web сервера расположенные на SPI Flash. Этот и предыдущий пункт вкупе позволят обновлять функционал микроконтроллера из домашней сети или из интернета, если конечно в этом возникнет острая необходимость.
  6. Чтобы никто посторонний не могу вмешаться в работу устройства или изменить файлы Web сервера, последний должен хотя бы как-то себя защищать. Пускать в панель управления только после авторизации, блокировать доступ при попытках брутфорса пароля. В конце концов, контроллер обязан самостоятельно генерировать ключи (salt) для авторизации, дабы сделать алгоритм непредсказуемым и исключить потенциальный взлом, в случае если злодей завладеет исходниками проекта. Понятно, что кому она там нужна, эта метеостанция, если её не завязывать с умным домом, если только из-за спортивного интереса, но как говориться “Береженого Бог бережет”.
  7. Датчики стоит расположить по уму - в метеобудке, а вот контроллер в сухом и закрытом боксе. Объединить их между собой, как мне кажется, удобнее по I2C шине - минимум проводов, максимум удобства.
  8. Практически на всех вариантах плат ESP-xx имеется штатный светодиод, можно воспользоваться им как для индикации режимов и состояния микроконтроллера, так и для вывода какой-либо промежуточной информации.
  9. Что касаемо режимов работы ESP8266, как ни странно, но он должен находить домашнюю Wi-Fi сеть и подключаться к ней. Если вдруг звезды не были к нам благосклонны, и домашняя беспроводная сеть приказала долго жить, контроллер обязан перейти в режим точки доступа (AP) дабы к нему можно было подключиться с какого-либо устройства и перенастроить его на другую сеть. А вот пока последнее не произошло, ESP должен периодически сканировать эфир в поисках долгожданной домашней точки доступа и, если боги были к нам милосердны, и домашняя сеть появилась в эфире, незамедлительно переключиться в режим клиента (STA) и в пылу страсти воссоединиться с ней.
  10. Ну и естественно, как же без отправки данных на внешние ресурсы, сейчас без этого не обходится ни одна уважающая себя кофеварка, не говоря уже о метеостанции. Думаю, что основным блюдом станет протокол MQTT, это уже облегчает возможность интеграции с умным домом, стулом или той же кофеваркой. Ну а на закуску добавим поддержку "ThingSpeak" и "Народного мониторинга". При желании можно нарастить функционал, благо памяти у микроконтроллера еще много.

Как я себе это представляю

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

Перейдем к физической сборки устройства

Как по мне, так самый оптимальный вариант, это воспользоваться отладочной платой NodeMCU V3 и базой для неё. Таким образом, мы получим отличный комплект с разведенной на его борту всей необходимой обвязкой и возможностью питать устройство от 5 до 24 Вольт.

esp-nodemcu.jpg

Отладочная плата на базе, и смотрится хорошо, и удобства хоть отбавляй.

nodemcu_base3.jpgnodemcu_base5.jpg

Заливаем прошивку, образ SPI Flash и подключаем четырьмя проводами датчики. Справится даже ребенок.

Ссылки:

  1. Базовая плата для NodeMCU V3 с преобразователем питания 5-24V в 5V
  2. Отладочная плата ESP8266 от NodeMCU

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

Датчики взятые за основу

Датчик уровня освещенности BH1750

Скрытый текст

GY-302-BH1750.jpg

  • Интерфейс шины I2C
  • Диапазон измерений от 1 до 65535 Lx
  • Фильтр световых шумов 50/60 Hz
  • Возможность смены адреса на шине
  • Не требует калибровки
  • Рабочая температура от -40 до 85 градусов C
  • Питание от 2.4 до 3.6 V

Датчик атмосферного давления BMP085/180

Скрытый текст

bmp180.jpg

  • Интерфейс шины I2C
  • Диапазон измерения от 300 до 1100 hPa
  • Встроенный датчик температуры
  • Не требует калибровки
  • Питание от 1.8 до 3.6 V

Датчик влажности SI7021-A20

Скрытый текст

A40-Industrial-High-Precision-Si7021-Humidity-Sensor-with-I2C-Interface-for-Arduino-Free-Shipping.jpg

  • Интерфейс шины I2C
  • Диапазон измерений от 0 до 100% RH
  • Погрешность измерения 3% RH в диапазоне от 0 до 80% RH
  • Рабочая температура от -40 до 125 градусов C
  • Встроенный датчик температуры с диапазоном измерения от -40 до 85 градусов C
  • Не требует калибровки
  • Питание от 1.9 до 3.6 V

Альтернативные датчики

Датчик влажности HDC1080

Скрытый текст

HDC1080-GY-213V.jpg

  • Интерфейс шины I2C
  • Диапазон измерений от 0 до 100% RH
  • Погрешность измерения 2%, устаревание (износ) 0.25% в год. На последнее значение могут влиять внешние факторы.
  • Рабочая температура от -20 до 70 градусов C
  • Встроенный датчик температуры с диапазоном измерения от -40 до 125 градусов C
  • Не требует калибровки
  • Питание от 2.7 до 5.5V

Датчик влажности HTU21D

Скрытый текст

HTU21D.jpg

  • Интерфейс шины I2C
  • Диапазон измерений от 0 до 100% RH
  • Погрешность измерения 2%, устаревание (износ) 0.5% в год. На последнее значение могут влиять внешние факторы.
  • Рабочая температура от -40 до 125 градусов C
  • Встроенный датчик температуры с диапазоном измерения от -40 до 125 градусов C
  • Не требует калибровки
  • Питание 3V, максимум 3.6V

Сборка 3 в 1 из датчиков BH1750, HTU21D и BMP180

Скрытый текст

HTU21D-BMP180-BH1750-HTU21D-3-IN-1-Temperature-Humidity-Pressure-Light-Sensor-Triad-Module.jpg

  • Все используемые датчики описаны выше
  • Очень компактные размеры

Комплексный датчик BME280 для измерения температуры, влажности и атмосферного давления

Скрытый текст

BME280.jpg

  • Интерфейс шины I2C
  • Рабочая температура от -40 до 85 градусов C
  • Диапазон измерение влажности от 0 до 100% RH с точностью 3% в диапазоне от 20 до 80% RH. Устаревание (износ) 0.5% в год.
  • Диапазон измерения давления от 300 до 1100hPa
  • Диапазон измерения температуры от -40 до 85 градусов C
  • Напряжение питания от 1.7 до 3.6V

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

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

В этот раз мы воспользуемся более серьезным вариантом – "Метеорологическая будка Стивенсона". Она способна защитить датчики от прямых воздействий окружающей среды, но при этом имеет открытую структуру со стенками в виде жалюзи. Удобно, красиво и самое главное – правильно!

Будка печатается на 3D принтере по эскизам опубликованным на Thingiverse неким kowomike, спасибо добрый человек! Архив с эскизами можно будет скачать в конце поста.

Stevenson1.jpgStevenson2.jpg

Фото готовой будки

IMG_0034.JPGIMG_0035.JPGIMG_0038.JPG

Шпилька М8 крепится через зажимной хомут к мачте уличной антенны.

Скрытый текст

IMG_0031.JPGIMG_0033.JPG

Примерка. Шпилька практически не укорачивалась, чтобы не закрывать будку параболической Wi-Fi антенной.

Хотя в моем случае все это сделано не правильно т.к это солнечная сторона дома. Доступа на теневую сторону дома у меня нет, поэтому приходиться довольствоваться тем, что имеем. По прошлой метеостанции мне говорили "на солнечной стороне все эти измерения - сферический конь в вакууме, слепи %описание-многА-букАв% и закрепи на теневой стороне дома".

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

IMG_0075.JPGIMG_0078.JPGIMG_0079.JPG

Датчики располагаются на разных уровнях. В основании находится датчик освещенности BH1750 и смотрит ровно вниз. Мне кажется, так он будет меньше пачкаться и покрываться пылью и при этом смотреть наружу сквозь минимальное количество препятствий для солнечного света. Вообще размещение этого датчика, это целая головная боль. Как не крути, все будет не то. Оставил так, ведь по сути важны не сами показания, а тенденция изменения. Хотя кого я пытаюсь обмануть, точность важна всегда! Предлагайте свои варианты.

Скрытый текст

IMG_1513.JPG

Намного проще обстоят дела с датчиком атмосферного давления BMP180 и влажности SI7021, кстати, с последнего мы также будем забирать данные о температуре. Их размещаем в оставшемся свободном пространстве будки, благо его там с избытком, но не в конусе т.к пространство в нем менее проветриваемое.

IMG_1136.JPGIMG_1137.JPG

Все хозяйство подключается между собой следующим образом

NodeMCU | ESP 07/12 | Датчики
-----------------------------
D2      | GPIO 4    | SDA
D1      | GPIO 5    | SCL
3.3V    | 3.3V      | 3.3V
GND     | GND       | GND

ВАЖНО: при финальном монтаже устройства на его место службы, обязательно установите перемычку между пинами GPIO 0 (D3) и питанием 3.3 Вольта. Причины её установки описаны в закрепленном сообщении с описание обновления от 12.08.2017.

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

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

1_esp8266_weather_station_v2.JPG2_esp8266_weather_station_v2.JPG

Разъемы для подключения внешних датчиков и питающей линии установил на местах где была пара штатных заглушек. Закрепил все через переходную пластину, выпиленную из куска фольгированного текстолита. Естественно, предварительно пластина была протравлена, а вся медь искоренена, ибо в этом случае она нам не друг.

Скрытый текст

3_esp8266_weather_station_v2.JPG4_esp8266_weather_station_v2.JPG

Также была предусмотрена проставка из полиэтиленового поролона (используется в качестве упаковочного материала при транспортировке грузов) между текстолитом и корпусом, общей толщиной 5мм, а после затяжки крепежных винтов, его толщина не превышает 1мм. Это было сделано из-за опыта эксплуатации предыдущего (временного) бокса для этой метеостанции. Без проставки влага быстро найдет путь вовнутрь, и срок службы устройства снизится.

Производим примерку.

Скрытый текст

5_esp8266_weather_station_v2.JPG6_esp8266_weather_station_v2.JPG

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

Скрытый текст

8_esp8266_weather_station_v2.JPG7_esp8266_weather_station_v2.JPG

Все самое сложное позади, остается только вывести на один разъем шину i2c с питание 3.3 Вольта, а на другой подвести пины питания платы расширения. Но т.к у меня валялся "хвост" отрезанный когда-то от не рабочего блока питания маршрутизатора, и я не побрезговал им воспользоваться по прямому назначению.

9_esp8266_weather_station_v2.JPG10_esp8266_weather_station_v2.JPG

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

11_esp8266_weather_station_v2.JPG12_esp8266_weather_station_v2.JPG

Общий вид получился таким

Скрытый текст

13_esp8266_weather_station_v2.JPG14_esp8266_weather_station_v2.JPG15_esp8266_weather_station_v2.JPG

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

16_esp8266_weather_station_v2.JPG17_esp8266_weather_station_v2.JPG18_esp8266_weather_station_v2.JPG

19_esp8266_weather_station_v2.JPG20_esp8266_weather_station_v2.JPG21_esp8266_weather_station_v2.JPG

Требования

  1. Arduino IDE с поддержкой контроллера ESP8266 не ниже v2.4.0
  2. Установленный модуль в Arduino IDE для загрузки файлов во Flash память микроконтроллера. Как установить описано тут.
  3. Любой модуль на базе ESP8266 c Flash 4MB (3MB выделяем под SPIFFS)
  4. Сам архив с последней версией проекта. Скачать можно в конце статьи или по этой ссылке.

ESP8266_WS_V2.0_IDE1.pngESP8266_WS_V2.0_IDE2.pngESP8266_WS_V2.0_IDE3.png

Обязательные библиотеки

  1. ArduinoJson (v5.13.2)
  2. PubSubClient

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

Порядок установки

  1. Изучите файлы проекта с примерами использования тех или иных сенсоров. Все файлы с примерами начинаются с префикса users_, это users_auto.h, users_bme280_x2.h и т.д. Загрузите необходимые Вам библиотеки или используйте эти файлы как пример для добавления иных датчиков.
  2. Выставите необходимые настройки для контроллера в среде разработки Arduino IDE. Пример настроек указан на скриншоте выше. Обязательно убедитесь, что выбрано правильное распределение места для внутренней файловой системы, это значит, что 3MB должно быть выделено под файловую систему.
  3. Произведите загрузку программы с помощью среды разработки (Ctrl + U).
  4. Произведите загрузку содержимого каталога data в файловую систему. Меню/Инструменты/ESP8266 Sketch Data Upload
  5. Перед тем как устанавливать метеостанцию на постоянное место жительства, подтянуть GPIO-0 (пин D3 на плате NodeMCU) к питанию 3.3V. Во время данной процедуры, питание на контроллере должно отсутствовать.

Первый запуск

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

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

Подключитесь к данной сети с любого удобного устройства и перейдите в панель управления (для этого имеется соответствующая иконка, запутаться невозможно), контроллер будет доступен по адресу http://espws.local или http://192.168.4.1 При попытке входа в панель управления будет запрошено имя пользователя и пароль, по умолчанию admin/admin. После входа в панель управления перейдите в раздел "Основные настройки WiFi" и укажите имя и пароль Вашей домашней сети, а также, при необходимости, укажите пароль для подключения к точке доступа поднимаемой контроллером в аварийном режиме. Если все сделано правильно, то контроллер подключится к домашней сети в течении 5-и минут.

Если Ваша домашняя сеть скрыта, то после первоначальной настройки необходимо перезагрузить контроллер. Это необходимо из-за частичной поддержки работы со скрытыми сетями. После перезагрузки контроллер увидит Вашу сеть и запомнит её MAC адрес. Помните об этом если захотите сменить домашний маршрутизатор.

Хотите помочь проекту или спонсировать новый?

Файлы

 

  • Like 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@academyit Да действительно, можно организовать и так, тут кому как нравится.

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

IMG_1682.JPG

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Посмотрел подумал. Хочу переделать под себя может и вам есть смысл переделать схему на датчик BME280 (можно замерять сразу: давление, температуру, влажность). Датчик освещения оставить как есть.

Поставить контроллер INA219 контролировать заряд и разряд аккумулятора. И сделать питание от солнечной батареи.

Я планирую такой вариант сделать. В комплексе затраты не увеличатся за счет уменьшения одного датчика влажности (то есть можно стоимость устройства оставить на одном уровне)

P.S. можно еще поставить лазерный дальномер VL53L0X прикрутить для измерения осадков (но пока это еще мысли)

Изменено пользователем academyit

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@academyit Я уже задумывался об автономной работе, но нужно иметь довольно большой запас емкости аккумулятора. По крайней мере если хочется оставить контроллер с полноценным web сервером и его плюшками. Если это не требуется, то можно уводить контроллер в сон и передавать показания раз в 15-30 минут. Можно передавать дамп данных, например, в виде JSON строки содержащей массив, заполненный за тот-же период времени пока контроллер не выходил в эфир.

От литий-ионных аккумуляторов придется отказаться т.к использование их в уличных условиях, особенно зимой, при не удовлетворительном заряде со стороны солнечной батареи, а это вполне возможно, приведет к гибели аккумулятора и потери устройства. В принципе это не особо критично если устройство стоит дома, но кардинально все меняет если устройство работает автономно в поле, условно говоря. Как мне кажется, достойной заменой может послужить Литий-железо-фосфатный аккумулятор (LiFePO4, LFP), он отлично работает при отрицательной температуре (естественно в пределах разумного), имеет не плохие показатели в основных характеристиках и как бы является следующим витком эволюции. Но все это пока только в теории, в руках я их еще не держал.

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

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

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

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

А вот для анемометра подойдет оптопара из обычного принтера с шаблоном на котором находится темная полоса с мелкими просветами для сенсора.

IMG_1727.JPGIMG_1728.JPG

Ну или как альтернатива оптический сенсор ролика обычной компьютерной мышки с самой осью ролика.

rolicki.gif

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На основе доплеровского метода, делаются (датчики осадков, скорости и направления ветра). зимой качалка не будет работать просто замерзнет.

http://ru-patent.info/20/15-19/2017169.html

У меня частный дом, стоит метеостанция передает данные по gprs в сеть. Измеряет (влажность, давление, температуру (несколько датчиков)). Температуру также передает из помещений, температуру воды отопления подача и обратка. (была сделана для удаленного мониторинга - больше всего отопления чтобы не ездить зимой на дом каждый раз при сомнениях.

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

 

Vaisala-WXT520-Weather-Transmitter.jpg

Изменено пользователем academyit
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да еще продолжение в тему метеостанции, поднял свои наработки пролежали с 2015 года. Это управление тепличным хозяйством поэтому к метеостанции можно прикрутить:

1. Температура улица

2. Влажность улица

3. Давление

4. Освещенность

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

Дополнительные датчики для связки в теплице

6. Датчик температуры воздуха теплица

7. Датчик влажности воздуха теплица

8. Датчик влажности земли теплица.

9. Датчик CO

10. Датчик PH (раствора при гидропонике) температурно зависимый от раствора воды.

11. Датчик температуры раствора воды или земли (опционально)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Приветствую @academyit

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

По поводу тепличного хозяйства.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Согласен что это должны быть разные устройства у меня так сделано. дом на одном контроллере теплоузел. Метеостанция на другом. теплица на третьем. Но есть момент теплица должна работать также анализируя и внешние параметры (к примеру если я знаю что день будет теплый и солнечный мне можно уменьшить отоплении теплицы или его отключить заранее, не дожидаясь критической температуры в теплице.). Теплоузел в интернет не выходит умышленно. Кстати есть момент никто не задумывается о взломе управляющих систем злодеями. Ведь можно так навредить или обогрев выключить и все за морозиться. Или наоборот нагрузить систему что проводка погорит образно. Никто не уделяет должного внимания безопасности!

Теперь о измерении направления ветра. Было много вариантов, от оптических энкодеров — заводских (дорого) или самодельных в виде нескольких пар светодиодов и фотодиодов, и диска с кодом Грея (сложно и много компонентов), до магнита и 4-8 герконов (слишком просто и неточно). AS5040 – магнитный энкодер. Так как особая точность не нужна, то аналоговый выход энкодера подключен к ADC микроконтроллера.

FULLTEXT01.pdf

Изменено пользователем academyit

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Безопасность автоматизированных систем домашнего производства, на данный момент, далека от идеала. Если с центральным узлом (сервером) все довольно хорошо т.к. обычно используется система под управлением полноценной операционной системой, то с периферией (микроконтроллеры) все обстоит не так весело. Сложность понимания и организации систем шифрования поднимают планку входного уровня, и львиная доля энтузиастов попросту не тратит на это свое время. Хотя есть варианты организации относительно безопасной связи на уровне микроконтроллеров, например, AES шифрование. ESP вообще из коробки поддерживает SSL, что весьма радует. 

Как по мне, так конечный пользователь должен держать связь только с сервером, а доступ к периферии нужен только во время пусконаладочных работ или при диагностике неисправностей, хотя последний пункт под вопросом. Каналы связи также необходимо развязывать и не использовать домашнюю беспроводную сеть, да и проводную тоже, для связи повседневной вычислительной техники (телефоны, компьютеры) и роя микроконтроллеров. Отдельная экосистема за NAT-ом в домашней сети со строгим доступом только к центральному серверу через проброшенные порты или, на худой конец, DMZ. Хотя это меня уже понесло в философию со своими понятиями добра и зла.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Цена вопроса может сказаться в дальнейшем в надежности системы. На данный момент разработал универсальную плату правда под AVR (предыдущие разработки). Запаивать можно что удобно а остальное все зависит от прошивки. Сейчас делаю тоже под ESP8266.

на плате распаян контроллер atmel328p, bmp180, приемник и передатчик RF433, реле для управления. разъем для датчика влажности и температуры по два канала. 

Далее колодка куда можно вставить SIM180l или USB переходник. Разъем для внутрисистемного программирования и I2C.

Не реклама

IMG_20170411_190332_HDR.jpg

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

"SI7021, кстати, с последнего мы также будем забирать данные о температуре." а не маловат ли диапазон измерения температуры для нашего региона.?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@EndWar 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да нет, я не критикую! Идея и реализация на высоком уровне. Просто подумал, что опечатка... Это в BMP180 диапазон измерения -40 +85, а в SI7021 -10 +85

2017-04-23_16-34-28.png

Ой... Извиняюсь, я не прав... Это высокая точность -10 +85, диапазон как Вы и указали, -40 +85...

Изменено пользователем EndWar

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@EndWar Обращайтесь, буду всегда рад помочь. Возможно у Вас появятся идеи для модернизации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо! Идеи есть, но детали придут не раньше чем через две три недели... Соберу, обкатаю, выложу тут "свой" вариант, но и к Вам за советом обращусь не раз уверен.. )) Вы на instructables.com этот проект не публиковали.?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, Kitsum сказал:

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

Может и "ничего нового", но реализация отменная.! У меня сейчас вот что. Так и то про версию купил, исходники закрыты, варианты модернизации и изменения минимальные... 

2017-04-23_17-59-20.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Друзья, хорошая новость, хотя слово "хорошая" тут под вопросом, но в любом случае, новость положительная.

Ранее оговаривалось, что ESP8266 держит не более 5 одновременных TCP соединений. Да, это действительно так и при превышения этого придела контроллер перестанет отвечать по сети. Активные сторожевые таймеры не смогут привести его в сознание и поэтому мы используем дополнительный сторожевой таймер на прерываниях.

После более детального выяснения ситуации и глубокого копания наткнулся на интересный вопрос на GitHub и, что самое главное, ответ на него https://github.com/esp8266/Arduino/issues/3185

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

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

extern "C" {
  #include "espconn.h"
}

espconn_tcp_set_max_con(8);

 

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И так, пришла монтажная плата для Node MCU v3 о которой говорилось в оригинальном посте. Смотрится очень хорошо, удобно использовать для быстрого монтажа, правда пришлось отмывать от флюса, но это уже мелочи. Плату можно питать от 5 до 24 вольт и это очень удобно. Также мне в руки попало творение Китайской промышленности в виде сборки из трех датчиков.

  1. BH1750 - датчик освещенности (используется в оригинальной программе)
  2. BMP180 - всеми любимый барометр от BOSCH (используется в оригинальной программе)
  3. HTU21D - датчик влажности и температуры

IMG_1918.JPGIMG_1921.JPG

Плата с датчиками очень компактная, примерно 21x8 мм (без разъема), что очень привлекательно. На плате нет никаких преобразователей и конвертеров, по этому, питание и логика соответствуют 3.3 вольтам. И сразу хочу отметить, что расцветка проводов не соответствует описанию и придется аккуратно разобрать колодку и перекинуть провода, хотя кто-то может посчитать это лишним. На фото провода перекинуты!

IMG_1925.JPGIMG_1926.JPG

Что касаемо библиотек. Для датчика освещенности и барометра ссылки на библиотеки находятся в первом посте. Для датчика влажности можно использовать библиотеку от SparkFun Electronics опубликованную на GitHub

В целом мне понравилась эта сборка, работает хорошо, проблем с внедрением в метеостанцию не возникло, но ложка дегтя все же присутствует и это цена! На данный момент стоимость одной платы может в 2-3 раза превышать стоимость всех этих датчиков, купленных отдельно. Причем каждый датчик в отдельности будет находиться на плате со своей обвязкой, что естественно намного удорожает производство, но боги маркетинга делают свое дело.

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

IMG_1928.JPG

PS: Надеюсь эта информация будет для Вас полезна, и естественно общая ссылка на Али.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тоже присматривался к этой сборке датчиков для применения в этой погодной станции, но мелкое млекопитающее меня побороло.

Но вопрос у меня в другом 

-Не могли бы Вы просветить меня по поводу файла ncsi.txt обращение к которому постоянно происходит в режиме АР или при отсутствии интернета. Это большой брат? Как от попал в Ваш проект? Может это часть API? Поиск не дал вразумительного ответа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@zenone В проекте все возможные обращения могут быть только через API, который описан и открыт или непосредственно к самим файлам на flash. Я уверен, что не совсем корректно поставлен вопрос, думаю, что он появился из логов в Serial при обращении к web серверу микроконтроллера. Если я прав, то дело тут в устройствах с которых идет подключение к точке доступа (esp8266), они пытаются узнать различную информацию о самой точке доступа, получить различные списки технического характера ну и все то, что захочет разработчик ПО используемого на клиенте. Это поведение я заметил почти у всех мобильных устройств как под Android так и под iOS. Думаю, что стоит почитать по поведению мобильных платформ при подключении к открытым хотспотам в аэропортах и других общественных местах.

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

Вот пример того, как ведут себя iOS (10.10.10.100) и Android (10.10.10.101) сразу после подключения к метеостанции, работающей в режиме AP.

espws_http_1.png

Естественно, что операционные системы пытаются взаимодействовать со сторонними ресурсами, но увы, кроме esp их никто не ждет.

Через некоторое время полетят запросы к сторонним ресурсам, и оживятся некоторые системные службы.

Скрытый текст

Скорее всего на устройстве под управлением Android пытается обновить базы Kaspersky.

espws_http_2.png

PS: ну и естественно большой брат всегда с нами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: Kitsum
      Модуль предназначен для системы мониторинга Zabbix. Работает в качестве отдельного демона и осуществляет транзит сообщений от брокера до хостов в системе мониторинга. Подробное описание модуля можно посмотреть в следующей теме.
       
    • Автор: Kitsum
      Демон осуществляет транзит данных с MQTT брокера в СУБД MySQL. Можно переправлять как все сообщения, так и конкретные топики. Подробное описание можно посмотреть в следующей теме.
       
    • Автор: Kitsum
      Доброе время суток.
      Сегодня пойдет речь о том, как переправлять данные с MQTT брокера в базу данных MySQL. Транспортировать будем как сами адреса, так и значения всех топиков, на которые оформлена подписка. Данную задачу нельзя назвать распространенной, но все же, она имеет место быть и может пригодиться в том случае, если данные востребованы в системах не способных работать с MQTT протоколом самостоятельно или брокер находится в изолированной системе, а данные востребованы, например, в GUI за её приделами.

      Для осуществления задуманного нам потребуется самостоятельный процесс, который сыграет роль транспортного узла между MQTT брокером и базой данный MySQL. А значит, его придется где-то держать. В моем случае, это сервер под управлением операционной системой Linux Ubuntu 16.04.3 и дальнейшее описание будет под неё, но для других ОС действия аналогичные.
      Сам демон будет написан на Python и для его работы нам потребуется:
      python3 python-pip python-dev libmysqlclient-dev библиотека paho-mqtt для python https://pypi.python.org/pypi/paho-mqtt библиотека mysqlclient для python https://github.com/PyMySQL/mysqlclient-python Но начнем мы, в первую очередь, с подготовки базы данных.
      На плечи MySQL ляжет не только хранение, но и частичная обработка данных. Для этих целей нам потребуется отдельная база, хранимая процедура и функция с реализацией небольшой логики, и пользователь с ограниченными правами под чьим именем мы будем обращаться к ним. В конце поста, кроме самого демона, будет опубликован .sql файл, который достаточно просто импортировать, например с помощью стандартный средств базы данных
      mysql -uroot -p Вводим пароль администратора MySQL и импортируем наш .sql файл, но прежде, дочитайте статью до конца, возможно, Вы захотите внести свои изменения.
      mysql> source /media/mqttMySqlClient.sql После этого будет получен следующий результат:
      Создана база (схема) с именем mqtt Пользователь с именем mqtt-agent и паролем p@$$w0rd имеющий возможность подключаться с внешних адресов Пользователю будут назначены ограниченные права (только EXECUTE) в этой схеме Будет добавлена процедура update_topic, на которую ляжет задача добавления и обновления данных Будет добавлена функция get_topic для упрощения поиска данных На тот случай, если Вы захотите внести изменения или создать все ручками, рассмотрим содержимое sql файла.
      Если схема mqtt не существует, она будет создана
      CREATE DATABASE IF NOT EXISTS `mqtt`; Аналогичным образом будет создан пользователь mqtt-agent. Если необходимо конкретизировать, с какого адреса будет производиться подключение под этим пользователем, то замените % на доменное имя или ip адрес хоста. Если планируется использовать демона на том же сервере где установлен MySQL, замените % на localhost. Также разрешено не более 2 активных подключений, измените это значение на необходимое Вам.
      CREATE USER IF NOT EXISTS 'mqtt-agent'@'%' IDENTIFIED BY 'p@$$w0rd' WITH MAX_USER_CONNECTIONS 2; Пользователю будут выставлены ограниченные права. Ему будет разрешено пользоваться только хранимыми процедурами и функциями. Никакие самостоятельные запросы выполнять нельзя.
      GRANT EXECUTE ON `mqtt`.* TO 'mqtt-agent'@'%'; Переходим к работе с самой схемой
      USE `mqtt`; Будет создана таблица topics со следующей структурой.
      md5 - содержит уникальный одноименный хеш полученный из полного адреса топика. Именно по этому ключу и будет производиться поиск данных. Почему именно по нему, а не по самому имени? Дело в том, что md5 хеш имеет фиксированную, заранее известную, длину, что нельзя сказать о имени топика. Именно это ограничение не позволит сделать имя топика первичным ключом и явно идентифицировать данные в таблице. time - содержит UNIX время добавления/обновления данных по конкретному топику (по умолчанию GMT+0) topic - адрес топика. В контексте, упомянутого ранее, поля md5, не несет для нас никакой смысловой нагрузки. value - данные опубликованные в топике. DROP TABLE IF EXISTS `topics`; CREATE TABLE `topics` ( `md5` varchar(32) NOT NULL, `time` bigint(20) DEFAULT NULL, `topic` text, `value` text, PRIMARY KEY (`md5`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Теперь необходимо создать хранимые процедуры и функции, но сделать это будет невозможно из-за присутствие в их синтаксисе разделителя совпадающего с концом данных в sql запросе - ";" Чтобы избежать этот неловкий момент, изменяем разделить на произвольный.
      DELIMITER $$ Создает процедуру update_topic. Она принимает в качестве входных параметров два значения, адрес топика и опубликованные данные. Оба параметра являются текстовыми. Процедура, вычисляет md5 хеш из адреса топика и уже по нему производит поиск записи в таблице. Если запись не будет найдена, она будет создана, в противном случае данные в поле value будут обновлены. Данная процедура должна ускорить работу демона и избавить его от задержек, которые были бы неминуемы при выполнении этих же запросов на стороне клиента.
      DROP PROCEDURE IF EXISTS `update_topic`$$ CREATE DEFINER=CURRENT_USER() PROCEDURE `update_topic`(topic text, value text) BEGIN declare nMD5 varchar(32) default md5(topic); declare NUM bit; declare uTime bigint(20) default UNIX_TIMESTAMP(); SELECT COUNT(t.md5) INTO NUM FROM topics t WHERE t.md5 = nMD5; if NUM <> 1 then INSERT INTO topics VALUES(nMD5, uTime, topic, value); else UPDATE topics t SET t.time = uTime, t.value = value WHERE t.md5 = nMD5; end if; END$$ Также будет добавлена функция get_topic. Она необходима для запроса данных от имени созданного ранее пользователя и ограничений, наложенных на него. Функция принимает адрес топика в текстовом виде, производит вычисление md5 хеша и основываясь на его совпадении с имеющимися записями выводит значение поля value искомого топика.
      DROP FUNCTION IF EXISTS `get_topic`$$ CREATE DEFINER=CURRENT_USER() FUNCTION `get_topic` (topic text) RETURNS text BEGIN declare hMD5 varchar(32) default md5(topic); declare topicValue text; SELECT t.value INTO topicValue FROM topics t WHERE t.md5 = hMD5; RETURN topicValue; END$$ И в завершении всего, будет восстановлено стандартное значение разделителя.
      DELIMITER ; На этом разбор sql файла можно считать законченным. Он не содержит каких-либо сложным манипуляций и должен быть понятен. Все эти операции можно выполнить руками, но я совету воспользоваться импортом, как и было описано ранее.
      Переходим к демону
      В первую очередь устанавливаем необходимые пакеты.
      sudo apt-get install python3 python-pip python-dev libmysqlclient-dev Устанавливаем недостающие библиотеки для Python
      pip install paho-mqtt mysqlclient Добавим пользователя из-под которого будет запускаться демон
      sudo useradd --shell /usr/sbin/nologin --system mqtt-agent Выставляем все необходимые права (каталог /media как пример)
      sudo chown mqtt-agent:mqtt-agent /media/mqttMySqlClient.py sudo chmod 0700 /media/mqttMySqlClient.py Добавляем демона в автозагрузку через планировщик задач и от имени созданного пользователя
      sudo crontab -u mqtt-agent -e Добавляем в конец следующую запись
      @reboot /media/mqttMySqlClient.py start Запускаем демона от имени все того же пользователя
      sudo -u mqtt-agent /media/mqttMySqlClient.py start Это основное, что требуется сделать на сервере для организации работы демона.
      Переходим к разбору настроек программы
      Т.к изначально за основу была взята концепция другого демона из ветки Zabbix, то конфигурация перекочевала оттуда и аналогично разбита на несколько секций.
      """ Настройки MQTT """ mqtt_server = "mqtt.it4it.club" mqtt_port = 1883 mqtt_login = "" mqtt_password = "" mqtt_client_id = "mqttMySqlClient" Настройки подключения к брокеру. Все должно быть интуитивно понятным. Помните, что при совпадении идентификаторов клиентов, они начнут конкурировать за подключение и по очереди терять связь. Не допускайте их совпадений.
      """ Список топиков для подписки """ subscribe = { '$SYS/#', '#', } Список топиков для подписки указывается через запятую и в кавычках.
      """ Настройки MySQL """ mysql_host = "127.0.0.1" mysql_port = 3306 mysql_user = "mqtt-agent" mysql_passwd = "p@$$w0rd" mysql_schema = "mqtt" mysql_log_file = "/var/log/mqttMySqlClient.log" Настройки подключения с MySQL серверу также не должны вызывать вопросов.
      """ Настройки общие """ pid_file = "/tmp/mqttMySqlClient.pid" Последний параметр указывает на размещение .pid файла демона.
      Команды управления классические
      start - запуск в режиме демона stop - остановка в режиме демона restart - перезапуск в режиме демона window - запуск в оконном режиме, также позволяет запускать процесс в операционных системах Windows После запуска, демон пытается установить связь с MQTT брокером и пока это не произойдет, связь с MySQL сервером устанавливаться не будет. Если во время работы, связь с брокером будет потеряна то в принудительном порядке, будет разорвано соединение с базой данных. Таким образом, по активным сессиям MySQL сервера можно судить о наличии связи у демона с брокером. Во время простоя, а в нашем случае, это отсутствие потока данных от брокера, для проверки связи с сервером базы данных будет использована процедура эмуляции ping для MySQL сервера. Она представляет из себя простую арифметическую задачу на сложение не приводящей к работе с данными в базе. Операция выполняется крайне быстро и её удачное выполнение сигнализирует клиенту о наличии связи с базой, а базе об активности клиента. В связи с этим, периодическая активность клиента при отсутствие данных от брокера, является показателем нормальной работы.
      И на последок
      Если вы хотите произвести выборку из таблицы под именем пользователя используемым по умолчанию и с его ограничениями. Необходимо воспользоваться функцией get_topic с указанием полного адреса, интересующего топика.
      select mqtt.get_topic('$SYS/broker/version'); В ответ мы получим
      +---------------------------------------+ | mqtt.get_topic('$SYS/broker/version') | +---------------------------------------+ | mosquitto version 1.4.8 | +---------------------------------------+ 1 row in set (0,00 sec) На этом пока все.
      Файлы проекта: 
      PS: Это тестовая версия демона и возможно она будет претерпевать некоторые изменения.
       
    • Автор: Kitsum
      Хотите помочь проекту или спонсировать новый?
      Yandex.Money PayPal.me Тема проекта
       
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×