Народный мониторинг — молодой проект по сбору и отображению на карте мира показаний различных датчиков среды (температура, давление, влажность и т.п.) практически в реальном времени по фактическому состоянию(а не на основе прогнозов) установленных как на улице для публичного доступа так и в помещении для приватного.
Для отображения данных была собрана метеостанция на Arduino ( собирает показания с датчиков DS18B20, DHT11, BMP085). Отправка данных осуществлялась с роутера MR3020 с прошивкой CyberWrt. для передачи данных на сайт Народный мониторинг. Можно было использовать Arduino c Ethernet shield, но хотелось ещё отправлять на сайт изображение с камеры.
Устанавливаем на роутер прошивку CyberWrt. СyberWrt — это прошивка собранная на базе OpenWrt и предназначенная в первую очередь для роботов, мини-серверов Умного Дома, и других устройств на базе популярных моделей роутеров. Страница проекта — http://cyber-place.ru/forumdisplay.php?f=44
В составе CyberWrt имеется модуль Термометр, Меня не устроил по причине того, что отправляет на сайт лишь температуру, мне необходимо ещё влажность и атмосферное давление.
Решено было по cron получать данные по последовательному из Arduino и отправлять на сайт по протоколу HTTP POST/GET.
1. Установка прошивки CyberWrt на роутер MR3020
Роутер MR3020 имеет процессор Atheros AR7240 частотой 400 МГц, 32 МБ RAM, 4 МБ флэш-памяти, порт USB2.0, Wi-Fi 802.11 b/g/n 150Mbps, Ethernet-порт 100MBit. Кроме того может питаться от напряжения 5В USB-порта, или от внешнего питания в диапазоне от 3.7В-6В при токе в 100мА с включенным Wi-Fi или 80мА без него. То есть максимальная мощность 0.5 ватт.
Сперва, заливаем прошивку (берем ее со страницы http://cyber-place.ru/showthread.php?t=720). Подключаемся к роутеру (адрес по-умолчанию:192.168.0.254), логин/пароль: admin/admin, идем в системные настройки, выбираем файл с прошивкой, ждем пока зальется. После прошивки модуль доступен по адресу http://192.168.1.100. Здесь необходимо настроить модуль либо в качестве точки доступа, либо клиента беспроводной сети. На сайте проекта все очень хорошо расписано — FAQ
Прошивка CyberWrt создавалась для того что бы уйти от пугающих новичков, терминальных программ и для более легкого и упрощенного использования. За основу была взята прошивка OpenWRT версии r37816.Все управление роутером производится из любого веб браузера через Веб-интерфейс, для этого не требуется установка дополнительных программ.
Так же доступен классический способ подключения через telnet, SSH, SCP
Сконфигурирована минимальная сборка пакетов для того что бы было достаточно свободного пространства и пользователь мог сам выбирать из репозитория нужные ему модули или утилиты. На роутере после прошивки CyberWrt доступно свободного места 1,2МБ (для сравнения, после установки OpenWrt остается свободного места 300 КБ).
Из веб-интерфейса установим нужные нам пакеты:
- Драйвер Веб камеры
- Драйвера USB Serial
- Планировщик — для запуска скрипта по cron
- PHP5 + SQlite3
- Системный диск — USB-накопитель, т.к. недостаточно собственной памяти для выбранных пакетов
2. Метеостанция на Arduino.
К Arduino подключаем датчики DHT11, DS18B20, BMP085
Схема
И скетч — ожидание ‘1’ из последовательного порта и выдача данных в последовательный порт
Кроме того, данные из Arduino мы отправляем в виде максимально приближенном к протоколу отправки данных на сайт narodmon
#include «SPI.h»
#include «OneWire.h»
#include «Wire.h»
#include «DHT.h»
#include «BMP085.h»
BMP085 dps = BMP085();
long Pressure085 = 0;
#define DHTTYPE DHT11 // DHT 11
DHT dht(8, DHTTYPE);
OneWire ds(7); // on pin 7
byte my_addr[8]={0x28,0x81,0xC4,0xBA,2,0,0,0x3B};
void setup() {
Serial.begin(9600);
Wire.begin();
dps.init();
}
void loop ()
{
if (Serial.available()>0)
{
if(Serial.read()==’1′)
{
int Temp=get_temp();
Serial.print(«#2881C4BA0200003B#»);
Serial.print(Temp/16);
Serial.print(«.»);
Serial.print(abs((Temp%16)*100)/16);
Serial.print(«&»);
float h = dht.readHumidity();
Serial.print(«#2981C4BA0200003B#»);
Serial.print(h);
//Serial.print(«#3081C4BA0200003B#»);
//Serial.print(dps.getPressure(&Pressure085));
Serial.println();
}
}
}
// получение температуры датчика
int get_temp()
{
byte i;
byte present = 0;
byte data[12];
byte addr[8];
int Temp;
ds.reset();
ds.select(my_addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.
present = ds.reset();
ds.select(my_addr);
ds.write(0xBE); // Read Scratchpad
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
Temp=(data[1]<<8)+data[0];//take the two bytes from the response relating to temperature
Temp=Temp;//divide by 16 to get pure celcius readout
return Temp;
}
Для отправки данных на сайт Народного мониторинга будем запускать по cron php-скрипт.
Данные, необходимые для передачи на сервер
- Уникальный MAC(ID) устройства мониторинга (использовал )
- Уникальные macN (серийные номера) датчиков подключенных к устройству
для DS18B20 — уникальный номер для 1-wire датчика
для BMP085 и DHT11 — произвольные
- Показания (valueN) датчиков
Скрипт PHP
<?php
define(‘SERIAL_DEVICE’, ‘/dev/ttyACM0’);
$fp = fopen(SERIAL_DEVICE, «w+»);
if( !$fp) {
die(«can’t open » . SERIAL_DEVICE);
}
else
print «open port — okn»;
sleep(5);
if( fwrite($fp, «1» )) {
print «OKnn»;
}
else {
print «FAILED!!!nn»;
}
$cc=»»;
$x=true;
while($x==true){
$c=fread($fp,1);
if($c==»n»)
$x=false;
$cc=$cc.$c;
}
$sdata=»#A0:F3:C1:70:AA:93n».str_replace(«&»,»n»,$cc).»##»;
print $sdata;
fclose($fp);
$fs = @fsockopen(«tcp://narodmon.ru», 8283, $errno, $errstr);
if(!$fs) exit(«ERROR(«.$errno.»): «.$errstr);
fwrite($fs, $sdata);
fclose($fs);
?>
Команда для запуска скрипта по cron
php-cgi /www/cron_narodmon.php
И как это выглядит
4. Изображение web-камеры на сайт Народного мониторинга.
Модуль «Драйвер Веб камеры» предназначен для работы с UVC Веб камерами. Я использовал Logitech C270/ Если подключена камера, то сразу после установки модуля вы увидите изображение.
В модуле можно изменить разрешение изображения камеры и количество кадров в сек. Можно так же остановить стриминг или запустить его когда Вам потребуется
Для подключения камеры на сайте Народный мониторинг
Устройства — Мои камеры — Добавить камеру
Открыть порты на роутере
Сервис имеет API, позволяющий получать показания список устройств и камер, а также показания датчиков и изображения с камер
Страница с описанием методов API и примерами
Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот
Arduino
КонтроллерArduino UNO1
DS18B20
Датчик температурыDS18B201
DHT11
Модуль измерения влажностиDHT111
BMP085
Модуль атм. давленияBMP0851
R1
Резистор4.7 кОм1
РоутерMR30201
WEB-камераLogitech C2701
USB-накопитель2 Гб1
Добавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- cron_narodmon_php.zip (1 Кб)
- Arduino_narodmon.zip (1 Кб)