воскресенье, 11 августа 2013 г.

iBoard и Народный мониторинг

Народный мониторинг — проект по отображению на карте мира и контролю (по e-mail и sms) показаний различных датчиков(температуры, влажности, атмосферного давления, скорости и направления ветра и т.п.), а также потребления электроэнергии в доме, офисе или квартире.

В качестве небольшой "разминки" перед продолжением наших "Уроков" подключим нашу плату iBoard к системе народного мониторинга.

Для этого воспользуемся собственно, самой платой:

Датчиком температуры DS18B20 (как его сделать мы описывали в "Уроке 3"):
Так же нам понадобится программатор Foca V2.2:
Перед тем, как писать код, необходимо зарегистрироваться на сайте "Народного мониторинга".
Процедура очень простая и мы оствим это за рамками нашей статьи.

Идентификация конкретного устройства в системе народного мониторинга идентифицируется по его MAC-адресу. В нашем скетче мы можем установить практически произвольный MAC-адрес для нашей платы iBoard (необходимо оставить неизменными только первые две группы байт).

Для определенности предположим, что MAC-адрес нашей iBoard будет DE:AD:A4:11:11:11 (тут я снова выделил те части адреса, которые необходимо оставить). 

Внимание! Вы должны будете для своего проекта придумать свой уникальный MAC-адрес (по нему система будет идентифицировать именно ваше устройство.

Теперь нам необходимо подготовить скетч (архив с ним доступен по ссылке). 
Особое внимание следует уделить следующему блоку:

//***************************************************
byte mac[] = { 0xDE, 0xAD, 0xA4, 0x11, 0x11, 0x11 }; 
OneWire ds(A5);
const unsigned long postingInterval = 600000;  
//***************************************************

В первой строке указывается MAC-адрес нашей iBoard.
Во второй - пин, к которому подключен наш датчик DS18B20.
В третьей - интервал обновления данных на сервере народного мониторинга (в документации к сервису указывается, что рекомендуемый темп обновления - 10-15 минут, более частые данные - игнорируются).

Еще в начале скетча присутствует строчка:

#define DEBUG

Для начала рекомендую эту строку закоментировать (поставить "//" перед первым символом в строке) - эта нехитрая манипуляция позволит выводить отладочные сообщения в монитор последовательного порта.

Теперь следует загрузить в нашу iBoard с помощью программатора скорректированный скетч (вы должны указать собственный уникальный MAC-адрес).

Сразу после загрузки следует открыть монитор порта и убедиться, что не появляется сообщение: "Failed to configure Ethernet using DHCP" (это сообщение о том, что не удалось получить IP-адрес, используя DHCP). 
Наиболее вероятная причина - неверно указанный MAC-адрес (именно поэтому в начале статьи я указывал, какие части адреса надо оставить без изменений). 

Если все хорошо и IP-адрес нормально получен, то через 10 секунд после старта в мониторе порта появится строчки типа:

ID=DEADA4111111&F4000003144F6C28=25.06
connecting...

disconnecting.

Это означает, что все в порядке.
Параметр ID - это наш MAC-адрес, далее идет идентифиатор датчика DS18B20 (у вас он будет наверняка другой) и значение температуры (в моем случае, это 25.06 градусов). 
Последующие строчки указывают, что произошло успешное соединение и передача данных, после чего соединение разрывается.

Теперь плата работает в "боевом" режиме и каждые 10 минут (если вы не поправили этот параметр в скетче) будет отправлять подобные строки с новыми значениями.

После первой же успешной передачи данных нашей платой можно продолжить настройки на сервере "Народного мониторинга" - требуется добавить в разделе "Мои устройства/Мои датчики" новый датчик. 


В появившемся окне надо указать MAC-адрес (в нашем примере это DE:AD:A4:11:11:11) и после этого настроить параметры этого датчика (можно указать точное расположение устройства на карте, дать ему осмысленное название и т.п.). 
Так же можно указать необходимые действия (письмо по эл.почте или смс) при выходе значения за указанные пределы.
Спустя некоторое время (после накопления данных для отображения), можно увидеть график изменения данных:

Как видите, ничего сложного. 

В случае, если у вас есть потребность в передаче нескольких параметров (если, например, к iBoard подключено несколько различных датчиков) - необходимо последовательно на сервер передавать подобные строки с разными значениями (не забывайте, что для корректной передачи данных требуется передавать три вещи: MAC-адрес устройства, идентификатор датчика и его значение). 
То, каким образом можно формировать идентификатор датчика (например, для аналоговых датчиков, которые не имеют собственного идентификатора как у DS18B20) написано в справочном разделе на сайте "Народный мониторинг" (ссылка "Протокол показаний"). 


P.S. при написании этого поста были использованы наработки Гладышева Дмитрия.

P.P.S. код в скетче не идеален, но работает. К примеру, пытливые читатели могут заметить, что перед каждой отправкой данных происходит "сборка" mac-адреса и идентификатора датчика (хотя эти параметры не меняются от времени). Предлагаю в качестве "дополнительного задания" перенести код для этого в функцию setup(), чтобы необходимая строка формировалась только один раз (при старте скетча), а потом уже использовалась в "готовом" состоянии.


Анонс: В следующий раз рассмотрим другую плату - gBoard и организуем передачу данных на сервис "Народный мониторинг" через GPRS.

1 комментарий: