Метеостанция С Ethernet И Планшетом В Качестве Устройства Отображения



Введение Я опытный пользователь бытовых метеостанций, и это двойная беда.

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

Во-вторых, мне хронически не везет с метеостанциями.

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

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

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

Результат тщательной полировки окон – не только сверкающие стекла, но и соскочивший датчик метеостанции.

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

Не знаю, можно ли описать это явление в рамках Стандартной модели, но нет сомнений, что в основе сингулярности лежит принцип «что падает, то теряется».

Так что датчика я не нашел.

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

И тут возникла мысль «а не сделать ли мне самомуЭ» пришло мне в голову.

Предпосылки для такого развития событий были.

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

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

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

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

В качестве побочного функционала мы рассматривали возможность отправки данных по Ethernet на существующий сервер с целью сбора статистики (люблю посмотреть «как было») и последующей передачи на живущие дома гаджеты типа iPad, iPhone, Android и прочая электронная нечисть.

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

Платформой для реализации идеи была выбрана Arduino. Причины: развитая инфраструктура, много примеров, много комплектующих в продаже, цена (если говорить о зеркальных китайских клонах, а не о настоящей Ардуино), доступность (благо на Ebay их можно найти немало и на любой вкус).

вкус).

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

Единственное, хоть погодный датчик и не является эстетичным устройством, но мне не хотелось вешать на стену гроб с линейным размером 20 см, поэтому за основу был выбран Arduino Pro Mini, а не какой-нибудь внушительных размеров.

Уно.

Итак, концептуально система состоит из четырех частей:

  • Датчики погоды.

    Задача — измерить погоду и отправить данные по радиоканалу в центральный блок.

  • Центральный блок.

    Задача — получить данные о погоде, обернуть их в HTTP и отправить на сервер.

  • Сервер.

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

  • Устройства визуализации.

    Задача — показать пользователю погоду



Протокол обмена

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

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

Поверх этой библиотеки был реализован микропротокол с фиксированной структурой пакетов.

Каждый пакет состоит из трёх полей — адреса передающего устройства (uint16), типа датчика (int16) и данных (float).

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

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

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

Если два устройства попытаются передать данные одновременно, данные будут потеряны из-за конфликта.

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

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

Исходный код библиотеки

  
   

// This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // Created by Andrey Filimonov 2014 #ifndef WIRELESSSENSORPIPE_H #define WIRELESSSENSORPIPE_H #if ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif class WirelessSensorPipe { public: enum SensorType { TEMPERATURE = 0, HUMIDITY, PRESSURE, WATERFLOW, HEATERSETPOINT, HEATERFLAMEENABLED, HEATERRWTEMPERATURE, HEATERTARGETROOMTEMPERATURE }; struct Packet { int16_t id; SensorType type; float value; }; private: Packet data; int16_t _id; public: void begin(uint16_t transmitPin, uint16_t receivePin, uint16_t pttPin = 10, uint16_t eepromAddress = 0); void send(SensorType type, float value); bool receive(Packet& packet, uint16_t timeout = 30000); int16_t id() {return _id;}; private: void EEPROMWriteInt(int p_address, int16_t p_value); int16_t EEPROMReadInt(int p_address); }; #endif



// This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // Created by Andrey Filimonov 2014 #include "WirelessSensorPipe.h" #include "VirtualWire.h" #include "EEPROM.h" //#define DEBUG void WirelessSensorPipe::EEPROMWriteInt(int p_address, int16_t p_value) { byte lowByte = ((p_value >> 0) & 0xFF); byte highByte = ((p_value >> 8) & 0xFF); EEPROM.write(p_address, lowByte); EEPROM.write(p_address + 1, highByte); } int16_t WirelessSensorPipe::EEPROMReadInt(int p_address) { byte lowByte = EEPROM.read(p_address); byte highByte = EEPROM.read(p_address + 1); return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00); } void WirelessSensorPipe::begin(uint16_t transmitPin, uint16_t receivePin, uint16_t pttPin, uint16_t eepromAddress) { // Initialise the IO and ISR vw_set_rx_pin(receivePin); vw_set_tx_pin(transmitPin); vw_set_ptt_pin(pttPin); vw_setup(256);

Теги: #Сделай сам или Сделай сам #Умный дом #arduino #ethernet #majordomo #метеостанция #датчик температуры и влажности
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

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