Это старая версия документа!
Задача: мониторинг температуры в серверной и на улице, а также сохранение статистики и рисование графиков.
Для решения задачи нам понадобится:
Для начала нужно установить ОС на флеш-карту, как это сделать подробно описано тут. После того, как система установлена и загружается нужно ее подготовить для работы. Во-первых, настраивает локальную сеть, дату, время, часовой пояс и т.д. Во-вторых в файл /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; }