воскресенье, 9 июня 2013 г.

Raspberry Pi получение температуры

Была у меня мысль перенести nagios на raspberry, встал вопрос о получении температуры в помещении, сначала в голову пришла мысль использовать контроллер о котором я уже рассказывал чуть раньше, единственное, что смущало это отсутствие com-порта, но вопрос решился благодаря переходнику usb-com, кстати вот с таким почему то не заработало:
А вот с этим никаких проблем не возникло.

Однако выглядит как то громоздко, да и gprs-модем для отправки SMS можно было подключить только через удлинитель (не влазил по толщине).
Но оказалось есть более красивое и дешёвое решение с использованием GPIO.
Подробно на английском можно почитать здесь. Всё просто до идиотизма, необходим датчик температуры и резистор 4.7 К.
Лишний датчик DS18B20 у меня оставался ещё с того времени когда я делал контроллер 1-wire, а резистор удалось найти в одном из нерабочих блоков питания неизвестной фирмы. Кстати резистор на 4.7К маркируется так: Жёлтый Фиолетовый Красный Серебристый последняя полоска показывает возможное отклонение в процентах и может быть другого цвета, а не обязательно серебристого. Кстати, серебристый имеет самое большое отклонение 10%, но ничего другого всё равно не нашёл.
Как видно из картинки ниже достаточно соединить вторую и третью ножку датчика резистором и подключить к Pi.

Тестовая сборка у меня выглядела так:


На этом и заканчивается работа с железом, остаётся только настроить софт. Добавляем дополнительный репозиторий (у меня raspbian):

sudo echo "deb http://archive.raspberrypi.org/debian/ wheezy main untested" >> /etc/apt/sources.list.d/raspi.list
sudo apt-get update
sudo apt-get upgrade

У меня вытянуло из сети что то около 100Мб.

sudo modprobe w1-gpio
sudo modprobe w1-therm
cd /sys/bus/w1/devices/
ls

если всё сделано правильно, то должны увидеть две папки: w1_bus_master1 и 10-<много цифр и букв> (например: 10-000802824e58), если нет последней, ищите проблему, скорей всего что то не правильно подключили.
Если же папка начинающаяся с 10- есть, то переходим в неё и смотрим содержимое файла w1_slave

cd 10-000802824e58
cat w1_slave

Внутри должно быть что то вроде этого:

t=28437 и есть температура, нужно только разделить значение на 1000, то есть температура 28.437 ° С. Собственно задача выполнена, осталось только написать скрипт под нужды и облагородить сам датчик.
Да, забыл сказать, у меня изначально значение температуры всегда было 85000 (85 градусов), такое было и с контроллером 1-wire для com-порта если не выставить задержку больше 0.7, но здесь никаких настроек я не нашёл. В одном блоге видел описание подобной проблемы и там человек сказал что вероятно перепутаны выводы у датчика температуры. Но у меня было всё верно, на всякий случай я решил перевернуть датчик, то есть третий вывод стал первым, а первый третьим. Но не в коем случае так не делайте! Raspberry завис, а датчик тут же нагрелся до наверно тех 85 градусов которые он и показывал. Я уже думал, что всё сгорело к чертям, но после правильного подключения датчика и перезагрузки, всё работало исправно и даже стала отображаться нормальная температура. С чем это связано я так и не понял, но вероятно дело было в плохом контакте, Дело в том, что макетной платой я не обладаю, а для подключения использовал интерфейс от ide-шлейфа, где датчик сидел не очень плотно.

P.S. для Nagios'a всё таки наверно не буду использовать Pi, постараюсь написать позже куда я его приткнул.

3 комментария :

  1. Почему не хотите использавать pi-шку для nagios?)

    ОтветитьУдалить
    Ответы
    1. Пробовал как то пробовал, мне нужно мониторить более 300 хостов и кучу сервисов, и как то он не очень хорошо с этим справлялся.

      Удалить