Комментарии 34
А я уж было хотел порекомендовать термопот)
А я читал статью в надежде увидеть чайник под управлением Linux :(
С помощью GPIO к Raspberry Pi можно подключить только одну сеть 1-wire или несколько?
Дефолтный драйвер подразумевает, что 1-wire подключен к GPIO4. Он же (драйвер) и используется в статье.
Но ничто не мешает самостоятельно реализовать 1-wire програмно на любом из пинов.
Но ничто не мешает самостоятельно реализовать 1-wire програмно на любом из пинов.
Ох уж этот 1wire, ненавижу этот протокол.
Пардон за оффтоп, но 24-25 градусов в квартире не слишком много? Или просто датчик расположен близко к батареям?
Хм, вторую схему вижу впервые. По датащиту (хорошее слово получилось) ds18b20 подключается двумя способами: с внешним питанием (в этом случае используется сопротивление 4,7кОм) или с паразитным питанием (в этом случае используется транзистор). В тексте я писал про наличие сопротивления на 4,7кОм, и мне казалось, что этого достаточно для того, чтобы иметь представление о способе подключения датчиков.
На графике Hourly inside по шкале Y три раза идет «24» — это разновидность самовнушения у малинки?
Видимо, это разновидность глюка у rrdgraph. Я в скрипте создания графиков использовал параметр --alt-autoscale, что выбирает шкалу по Y с минимальной добавкой вверх и вниз от максимального и минимального значения диапазона, чтобы максимально заполнять область графика. Возможно, у rrdgraph стоит ограничение на количество значащих цифр в шкале, отсюда и такая особенность.
>>В скрипте я указал интервал хранения температур — 600 сек. (5 мин.)
Ммм?
Ммм?
Возьмите слово «чайник» в заголовке в кавычки. А то многие, к сожалению, увидели не то, что ожидали.
Отдельный орден полагается за ковыряние в перле будучи «чайником»! =)
Относительно Патч ядра для 1-wire: Если Вы установили свежий Raspbian “wheezy”, то патч не нужен, все модули уже на борту. Просто загружаем их
Чтобы они загружались при старте системы
добавляем в /etc/modules
sudo modprobe w1-gpio
sudo modprobe w1_therm
Чтобы они загружались при старте системы
добавляем в /etc/modules
w1-gpio
w1_therm
Можете дополнить описание как научить «малинку» отправлять данные на Народный мониторинг для отображения статистики и графиков Google Chart c привязкой к карте мира?
PS Протокол передачи доступен после регистрации на основе email адреса.
PPS В случае успеха добавлю Ваше решение в каталог поддерживаемых решений ибо «малиновая» аудитория растет и вопросов по ее использованию все больше и больше приходит.
PS Протокол передачи доступен после регистрации на основе email адреса.
PPS В случае успеха добавлю Ваше решение в каталог поддерживаемых решений ибо «малиновая» аудитория растет и вопросов по ее использованию все больше и больше приходит.
Я только ЗА и считаю правильнее дополнить Вашу статью
В указанной статье упор сделан именно на отправку с роутера MR3020, а не «Малинки», что весьма не 1 к 1. Поэтому ожидается отдельное описание в т.ч. и взаимодействия.
Ну там для малинки приведен отдельный скрипт. Я его 1 к 1 без переделки взял — все работает отлично. Если бы были особенности-сложности, я бы написал в комментарии.
Упора на роутер нет, просто большая часть работы была проведена по нему, вот и описания больше, а по молинке большая часть работы в этой статье, а у меня оставшаяся работа описана.
Не получалось завеси датчик, от отчаяния решил установить патч 1-wire, хотя знал, что это лишнее. В результате Raspberry перестал грузиться, что было печально, ведь дело было в поле, в 50км от монитора с HDMI. Стоит обновить статью и указать в ней, что не надо этого делать) Хоть она и старая, в поиске вылезает в топ10
Поднял под Orange PI, тоже работает. Правда в Perl скрипте кавычки испортились, пришлось исправить чуток.
Вот правильный вариант, если кому интересно. Сервер использовал lighttpd.
Вот правильный вариант, если кому интересно. Сервер использовал lighttpd.
#!/usr/bin/perl
use warnings;
#use diagnostics;
&check_modules;
&get_device_IDs;
foreach $device(@deviceIDs) {
$reading = & read_device($device);
if ($reading != "9999") {
push(@temp_readings, $reading);
push(@temp_readings, $reading);
}
}
#update the database
`/usr/bin/rrdtool update /home/RRD/multirPItemp.rrd N:$temp_readings[0]:$temp_readings[1]`;
#`/usr/bin/rrdtool update /home/RRD/multirPItemp.rrd N:$temp_readings[0]`;
print "Temp 1 = $temp_readings[0]\n";
print "Temp 2 = $temp_readings[1]\n";
########################################################################
#Дополнения для narodmon.ru.По материалам habrahabr.ru/post/166373
# open(FILE, ">/home/RRD/pi/temperature/temp_out");#
#print FILE "$temp_readings[0]";#
#close(FILE);#
#open(FILE, ">/home/RRD/temp_in");#
#print FILE "$temp_readings[1]";#
#close(FILE);
#######################################################################
sub check_modules {
$mods = `cat /proc/modules`;
if ($mods =~ /w1_gpio/ && $mods =~ /w1_therm/) {
print "w1 modules already loaded \n";
} else {
print "loading w1 modules \n";
`sudo modprobe w1-gpio`;
`sudo modprobe w1-therm`;
}
}
sub get_device_IDs {#
#The Hex IDs off all detected 1 - wire devices on the bus are stored in the file
# "w1_master_slaves"
#open file
open(FILE, "/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves") or die("Unable to open file");
#read file into an array
@deviceIDs = <FILE>;
#close file
close(FILE);
}
sub read_device {
#takes one parameter — a device ID
#returns the temperature
#if we have something like valid conditions
#else we return "9999" for undefined
$readcommand = "cat /sys/bus/w1/devices/".$_[0]."/w1_slave 2>&1";
$readcommand =~ s/\R//g;
$sensor_temp = `$readcommand`;
if ($sensor_temp!~/No such file or directory/) {
if ($sensor_temp!~/NO/) {
$sensor_temp =~ /t=(\d+)/i;
$sensor_temp =~ /t=(\D*\d+)/i;
$temperature = (($1 / 1000));
} else {
$ret = "9999";
}
} else {
$ret = "9999";
}
}
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
История взаимодействия «чайника» и DS18B20 посредством Raspberry Pi с отправкой данных на narodmon.ru