Погодная станция. Cервер

Погодная станция. СерверФункции

  • Получать данных с метеодатчика (датчиков) по радиоканалу
  • Получать точное время с NTP серверов по протоколу NTP или SimpleNTP
  • Получать прогноз погоды с интернет сервиса (я выбрал rp5.ru)
  • Сохранять данные с метеодатчиков на интернет сервисе «Народный мониторинг»
  • Рассылать данные по радиоканала на табло и другие устройства

Дополнительно

  • Получать данные и сохранять их на народном мониторинге от других сенсоров
  • Получать команды управления через интернет и рассылать их требуемому устройству по радиоканалу

Первая версия сервера работала на плате Arduino UNO и по USB общалась с маршрутизатором Zyxel Keneetic. В связи с тем, что программы, написанные на SH периодически подвисали, думаю, в связи с нехваткой памяти, а поддержка кода одновременно со стороны роутера и микроконтроллера напрягала, решил отказаться в пользу Ethernet на Arduino.

Мой выбор пал на плату iBoard от ITEAD STUDIO

Характеристики iBoard

  • Микроконтроллер ATMEGA328P (Совместима с Duemilanove)
  • Ethernet W5100 с поддержкой POE
  • Картридер MicroSD
  • Разъем для подключения XBee
  • Разъем для подключения NRF24L01+
  • Разъем для Electronic Brick Interface

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

Из особенностей iBoard стоит отметить, что интегрированные Ethernet и NRF24L01+ оба используют SPI-интерфейс. Для одновременной работы этих модулей, более медленная NRF24 подключена к «программному SPI» , который сидит на выводах 2,3,5,6,7,8, тогда как Ethernet подключена к «храдварному SP» (9,10,11,12,13). Для работы с nRF24 с таким соединением нужно скачать библиотеки iBoardRF и iBoardRFNetwork. которые у ITEAD лежат в архиве с непонятным расширением. Данные библиотеки используют также digitalWriteFast.

iBoard не имеет на плате преобразователя USB/Serial. Для программирования этих плат я взял модуль FOCA, рекомендуемый производителем

 

Покупка оборудования и материалов

Я покупал и там и там

  • Плата Foca — преобразователь USB/Serial на FT232 с возможностью подключения модулей Xbee и Bluetooth — $6.5

можно обойтись более дешевыми преобразователями USB/Serial

Кроссовая коробочка от старой АТС обклеенная пленкой «под карбон».

Блок питания отдельный не брал, припаял параллельно разъемчик к БП от Ethernet коммутатора и воткнул его в разъемчик POE-инжектора.

Сборка сервера погодной станции

Втыкаем NRF24L01+ в слот на плате

Сервер погодной станции

Подключаем модуль FOCA — наш сервер готов для программирования

iBoard с модулем FOCA

После программирования подключаем к Ethernet с включенным POE-инжектором

iBoard с POE

Прячем все в коробочку

Готовый сервер погодной станции

Алгоритм работы сервера погодной станции

Получаем данные с NRF24, обрабатываем их, рассылаем клиентам (табло, часы …), посылаем на народный мониторинг

По таймеру получаем время с NTP  сервера, посылаем его клиентам

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

Скачать полный скетч с классом усреднения и декодирования.

Можно тестировать, а я понаблюдаю!

Можно тестировать погодный сервер

 

Планы на будущее

  1. Подключить к плате сенсор DHT22 или DS18B20. Пусть мерит температуру в комнате и передает в интернет и клиентам.
  2. Получать данные с других устройств, например, контроллера управления вентилятором в ванной комнате
  3. Перейти с народного мониторинга на свой сервер в интернете для расширения функционала, например управлеияю
  4. Поместить сервер погодной станции в более цивильную коробочку, когда та приедет с ТАОБАО.

 

Другие статьи по погодной станции

 Обсуждение на форуме arduino.ru

 

Скетч сервера погодной станции
5.7 KiB
445 Downloads
Детали
Вы можете оставить отзыв или трекбек со своего сайта.

10 комментариев на «Погодная станция. Cервер»

  1. Александр:

    Здравствуйте.
    На сайте rp5 пишут что прогноз в XML платный, получается что Вы платите за этот сервис?

  2. alivan:

    Подозреваю, что вопрос выходит за тематику сайта, но может встречались с этой ошибкой и или знаете почему её выдаёт при проверке — загрузке,библиотеки брал по вашим ссылкам.
    Хочу повторить Ваше изделие, но пока без особого успеха.
    Спасибо и всего доброго.

    arduino: 1.0.6 (Windows XP), Board: «Arduino Duemilanove w/ ATmega328»
    libraries\iBoardRF24Network\iBoardRF24.cpp: In member function ‘void iBoardRF24::csn(int)’:
    libraries\iBoardRF24Network\iBoardRF24.cpp:20: error: ‘digitalWriteFast2’ was not declared in this scope
    libraries\iBoardRF24Network\iBoardRF24.cpp: In member function ‘void iBoardRF24::ce(int)’:
    libraries\iBoardRF24Network\iBoardRF24.cpp:27: error: ‘digitalWriteFast2’ was not declared in this scope
    libraries\iBoardRF24Network\iBoardRF24.cpp: In member function ‘unsigned char iBoardRF24::SPI_RW(unsigned char)’:
    libraries\iBoardRF24Network\iBoardRF24.cpp:34: error: ‘digitalWriteFast2’ was not declared in this scope
    libraries\iBoardRF24Network\iBoardRF24.cpp:36: error: ‘digitalWriteFast2’ was not declared in this scope
    libraries\iBoardRF24Network\iBoardRF24.cpp:38: error: ‘digitalWriteFast2’ was not declared in this scope
    libraries\iBoardRF24Network\iBoardRF24.cpp:40: error: ‘digitalReadFast2’ was not declared in this scope

  3. Alexey Alexey:

    Не хватает библиотеки DigitalWriteFast
    http://code.google.com/p/digitalwritefast/

  4. mixarediskin:

    А платы с Али и с оффсайта абсолютно идентичны?

  5. Alexey Alexey:

    Да. В таких же фирменных коробочках и пакетиках.

  6. Александр:

    Здравствуйте.
    Поделитесь пожалуйста кодом, чтобы с gismeteo.ru погоду брать или с чем сейчас ваша станция работает.
    Спасибо и всего доброго.

    • Alexey Alexey:

      Я написал парсер XML на PHP, так как для Ардуины код тежоловат.

      < ?php $url = 'http://informer.gismeteo.ru/xml/28225_1.xml'; //echo 'Parse XML'."
      \n";
      //echo 'Url: '.$url."
      \n";

      $xml = new SimpleXMLElement($url, NULL, TRUE);
      $node = $xml->REPORT->TOWN->FORECAST[0];
      // Температура
      $Temp = ($node->TEMPERATURE['max']+$node->TEMPERATURE['min'])/2;
      // Давление (на всякий случай)
      $Pres = ($node->PRESSURE['max']+$node->PRESSURE['min'])/2;
      // Облачность
      $Clod = $node->PHENOMENA['cloudiness']*25;
      // Осадки
      $Prec = 0;
      $Prec1 = $node->PHENOMENA['precipitation'];
      $Prec2 = $node->PHENOMENA['rpower'];
      switch( $Prec1 ){
      case 4 :
      case 6 :
      if( $Prec2 == 0 )$Prec = 5;
      else $Prec = 7;
      break;
      case 5 :
      case 7 :
      $Prec = 9;
      break;
      }
      // Все атмосферные явления
      $Prec = $Prec + $Clod * 10;
      // Сила ветра
      $Wind_s = ($node->WIND['max']+$node->WIND['min'])/2;
      // Направление ветра
      $Wind_d = $node->WIND['direction'];
      $Wind = 0;
      switch( $Wind_d ){
      case 0 : $Wind = 5; break;
      case 1 : $Wind = 6; break;
      case 2 : $Wind = 7; break;
      case 3 : $Wind = 8; break;
      case 4 : $Wind = 1; break;
      case 5 : $Wind = 2; break;
      case 6 : $Wind = 3; break;
      case 7 : $Wind = 4; break;
      }
      $Wind = $Wind * 100 + $Wind_s;

      echo 'TEMP='.$Temp."\n";
      echo 'PRES='.$Pres."\n";
      echo 'PREC='.$Prec."\n";
      echo 'WIND='.$Wind."\n";

      //phpinfo();
      ?>

      • Александр:

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

        • Alexey Alexey:

          Первая версия была без интернета. Там все проще. А в этой прогноз берется из интернета и время точное. Заодно значения температуры сохраняются

Ваш отзыв