Здрастє, я Tarasius. Це мій бложик.

Особисті думки, нариси, проекти та коротко про мене

Керування світлодіодом на Raspberry Pi

Є распі, є лампочка/світлодіод/інша периферія, підключені до нього. Я пропоную скрипт, який дає змогу керувати вихідними пінами на GPIO распі дуже легко.

Нехай світлодіод у нас підключений до GPIO 18, як зображено на схемі.
scheme

Для доступу до GPIO з консолі нам знадобиться WritingPi. Як його встановити, читайте тут.

А скрипт, який цим керуватиме, буде виглядати так:

#!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>/MyLogs/led_blink.out 2>&1

while getopts i:v: option
do
case "${option}"
in
i) ID=${OPTARG};;
v) VALUE=${OPTARG};;
esac
done
logger -s -t blink "`date -R`: #$ID $VALUE" 2>> /MyLogs/main.log
echo "`date -R`: #$ID $VALUE"
gpio mode $ID out
if [ $VALUE = 1 ] || [ $VALUE = 0 ]
then
gpio write $ID $VALUE
else
tt=$((60/$VALUE))
i=2
while [ $i -le $VALUE ]
do
v=$(($i%2))
gpio write $ID $v
sleep $tt
i=`expr $i + 1`
done
fi

P.S.: шляхи до папки з логами підставте свої – будь-яку папку, куди Ви хочете писати логи.

Отже, як користуватися цим скриптом. В приведеному прикладі (див. схему вище), діод підключений до GPIO18, який має номер 1. Детальніше про нумерацію можна почитати тут. Тепер можна викликати скрипт, вказавши параметром номер піну і з якогою частотою він має миготіти. Нехай скрипт лежить в файлі led_blink.sh, тоді команда

sudo led_blink.sh -i1 -v60

заставить миготіти світлодіод на 18-му (1-му) піні з частотою 60/60=1 секунда. Якщо треба вдвічі швидше, то параметр -v120, повільніше -v30 і т.д.

Якщо треба не миготіти, а просто горіти, тоді -v1, а погасити -v0 відповідно. В останньому випадку скрипт відпрацює моментально, в усіх інших він працюватиме одну хвилину, потім завершиться.

Тобто тепер ми маємо команду в консолі, яка може на хвилину запустити генератор миготіння світлодіода.

Сподобалось? Поділися з друзями!

Позначки:, ,

Категорія: Інженерія. Автор: tarasius. Опубліковано 2 липня 2013р. в 22:52.

Прокоментуй!



Прокоментуй!


Залишити коментар