Инструменты пользователя

Инструменты сайта


temp_mon

Это старая версия документа!


Мониторинг температуры Raspberry Pi + zabbix

Введение

Задача: мониторинг температуры в серверной и на улице, а также сохранение статистики и рисование графиков.

Для решения задачи нам понадобится:

Подготовка Raspberry Pi

Для начала нужно установить ОС на флеш-карту, как это сделать подробно описано тут. После того, как система установлена и загружается нужно ее подготовить для работы. Во-первых, настраивает локальную сеть, дату, время, часовой пояс и т.д. Во-вторых в файл /etc/modules добавляем модули необходимые для работы температурных датчиков и дисплея:

i2c-dev
w1-gpio
w1-therm

Подключение датчиков и дисплея

Для подключения температурных датчиков нам понадобится трехжильный кабель(или более), отлично подойдет четырехжильная витая пара. У датчика три пина: земля, пин по которому передаются данные и плюс питания:

Датчики подключаются парралельно на один кабель. Протягиваем кабель от места установки Raspberry через те места, где мы хотим повесить датчики. После чего в конце линии вешаем датчик, подключив его к трем жилам кабеля(запоминаем цвета жил к каким подключили пины датчика) и соответственно по ходу линии делаем любое кол-во разрезов и врезаем туда датчики на те же цвета(не перепутать, а то можно спалить датчики). Также в любом месте между пином данных и пином +3,3в надо поставить один резистор 4.7кОм, я установил его в корпусе, но можно в любом месте на линии, где удобно. Наглядная сехма подключения датчика на макетной плате(для тестов) ниже:

Итак, датчик(и) подключен(ы), вышеуказанные модули ядра загружены, после этого в каталоге /sys/bus/w1/devices/ должен появиться список ваших датчиков, у каждого свой аппаратный номер:

# ls -1 /sys/bus/w1/devices
28-0000045ef9b4
28-0000045f1c62
28-0000046022cb
w1_bus_master1

В моем случае 3 датчика, пробуем теперь считать показания(заниает 1 секунду):

# cat /sys/bus/w1/devices/28-0000045ef9b4/w1_slave
a6 00 4b 46 7f ff 0a 10 cb : crc=cb YES
a6 00 4b 46 7f ff 0a 10 cb t=10375

Вот в таком виде датчик дает показания, чтобы получить температуру в градусах нужно разделить на 1000:

10375 / 1000 = 10.375 С

Если все работает, переходим к подлючению дисплея. Схема подключения пинов дисплея к пинам GPIO показаны ниже(4х битный режим):

Если дисплей подключен правильно, то уже должна загореться подсветка. Далее нужно установить в системе библиотеку Wiring Pi для Си, которая позволит нам работать с дисплеем. Установка очень простая, распаковываем архив и запускаем скрипт build:

# tar xfz wiringPi-98bcb20.tar.gz
# cd wiringPi-98bcb20
# ./build

Установка завершена, проверим:

# gpio -v
# gpio readall

Теперь проверим работоспособность дисплея, скомпилируем и запустим эту программу(источник указан в списке литературы), которая выведет сообщение на экран:

#include <stdio.h>  //стандартная библиотека ввода-вывода
#include <wiringPi.h>  //библиотека из пакета wiringPi
#include <lcd.h>  //библиотека из пакета wiringPi

int main (void)
{
 printf ("Raspberry Pi LCD test\n") ;
 //Инициализация порта GPIO
 if(wiringPiSetup ()==-1)
 {
  printf ("GPIO Setup failed!\n") ;
 }
 
 int fd;
 printf ("Start LCD initialization...\n") ;
 //Инициализация LCD
 fd = lcdInit (4,20,4, 11,10, 1,0,2,3,0,0,0,0);
 
 if(fd==-1)
 {
  printf ("Initialization failed\n") ;
 }
 else
 {
  printf ("GO!\n");
 
  //Очистка дислпея
  lcdClear(fd);
   
  //Перевод каретки на первую позицию первой строки
  lcdPosition (fd,0,0);
   
  //Вывод форматированного текста
  lcdPrintf(fd, "Hello Pi");
 
  //Перевод каретки на вторую строку и вывод текста
  lcdPosition (fd,0,1);
  lcdPrintf(fd, " World!");
 
  //Перевод каретки на третью строку и вывод текста
  lcdPosition (fd,0,2);
  lcdPrintf(fd, "25-01-2014");
 
  //Перевод каретки на четвертую строку и вывод текста
  lcdPosition (fd,0,3);
  lcdPrintf(fd, "Happy New Year))))");
 }
 return 0;
}
temp_mon.1391682580.txt.gz · Последнее изменение: 2022/03/25 17:04 (внешнее изменение)