Функции
- Получать данных с метеодатчика (датчиков) по радиоканалу
- Получать точное время с 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, рекомендуемый производителем
Покупка оборудования и материалов
- iBoard на сайте производителя за $17.5 + $3.9 доставка
- или на том же АЛИЭКСПРЕСС у продавца AAA+ по меньшей в зависимости от партии
Я покупал и там и там
- Плата Foca — преобразователь USB/Serial на FT232 с возможностью подключения модулей Xbee и Bluetooth — $6.5
можно обойтись более дешевыми преобразователями USB/Serial
- Радиомодуль NRF24L01 с внешней антенной — $5.44
- Комплект POE — $2.61 (можно обойтись одним инжектором за $1.99)
Кроссовая коробочка от старой АТС обклеенная пленкой «под карбон».
Блок питания отдельный не брал, припаял параллельно разъемчик к БП от Ethernet коммутатора и воткнул его в разъемчик POE-инжектора.
Сборка сервера погодной станции
Втыкаем NRF24L01+ в слот на плате
Подключаем модуль FOCA — наш сервер готов для программирования
После программирования подключаем к Ethernet с включенным POE-инжектором
Прячем все в коробочку
Алгоритм работы сервера погодной станции
Получаем данные с NRF24, обрабатываем их, рассылаем клиентам (табло, часы …), посылаем на народный мониторинг
По таймеру получаем время с NTP сервера, посылаем его клиентам
По тому же таймеру получаем погоду с сервера rp5.ru используя XML сервис этого сайта. Парсим XML парсером, описанным здесь, посылаем данные по прогнозу на ближайшие 12 часов клиентам.
Скачать полный скетч с классом усреднения и декодирования.
Можно тестировать, а я понаблюдаю!
Планы на будущее
- Подключить к плате сенсор DHT22 или DS18B20. Пусть мерит температуру в комнате и передает в интернет и клиентам.
- Получать данные с других устройств, например, контроллера управления вентилятором в ванной комнате
- Перейти с народного мониторинга на свой сервер в интернете для расширения функционала, например управлеияю
- Поместить сервер погодной станции в более цивильную коробочку, когда та приедет с ТАОБАО.
Другие статьи по погодной станции
Обсуждение на форуме arduino.ru
Здравствуйте.
На сайте rp5 пишут что прогноз в XML платный, получается что Вы платите за этот сервис?
На момент разработки RP5 был бесплатным
Сейчас временно перевел на gismeteo.ru
Подозреваю, что вопрос выходит за тематику сайта, но может встречались с этой ошибкой и или знаете почему её выдаёт при проверке — загрузке,библиотеки брал по вашим ссылкам.
Хочу повторить Ваше изделие, но пока без особого успеха.
Спасибо и всего доброго.
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
Не хватает библиотеки DigitalWriteFast
http://code.google.com/p/digitalwritefast/
А платы с Али и с оффсайта абсолютно идентичны?
Да. В таких же фирменных коробочках и пакетиках.
Здравствуйте.
Поделитесь пожалуйста кодом, чтобы с gismeteo.ru погоду брать или с чем сейчас ваша станция работает.
Спасибо и всего доброго.
Я написал парсер XML на PHP, так как для Ардуины код тежоловат.
\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 сервере и потом забирается погодной станцией.
Но для меня это сродни магии,попробовал пхп в денвере запустить, ничего путного не вышло. 🙁
Первая версия была без интернета. Там все проще. А в этой прогноз берется из интернета и время точное. Заодно значения температуры сохраняются