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

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

Raspberry Pi: Демон керування GPIO виходами

Нехай нам треба керувати світлодыодом, підключеним до распі через GPIO, з веб-сторінки чи ще якось, не маючи доступу до виконання команд в консолі. Задача здається проста, але без костилів, типу видачі прав адміністратора застосункам, які того не заслуговують, прийдется щось видумувати. Я пробував різні рішення – тригери в MySQL, PHP exec і т.д.
Самй простий і надійний варіант – писати в текстовий файл, який лежить в папці з правами 777, а демон (скрипт, який буде працювати весь час), буде періодично перевіряти цей файл і відповідно реагувати на його зміни.

Отже, скрипт, який буде працювати демоном.

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

FILENAME='/leds+buttons/leds.out'

if [ -f $FILENAME ]; then
 d1=`date -r $FILENAME +%s`
 d2=`date +%s`
 d12=`expr $d2 - $d1`
 cmd=''
 while read line
 do
  cmd="$line"
 done < $FILENAME
 id=$(echo $cmd | cut -d" " -f1)
 value=$(echo $cmd | cut -d" " -f2)
 if (( $d12 <= 60 )) || (( $value > 0 )); then
  if [ $d12 -le 60 ]; then
   logger -s -t leds "`date -R`: ID=$id VALUE=$value" 2>> /MyLogs/main.log
  fi
  echo "`date -R`: ID=$id VALUE=$value"
  /leds+buttons/led_blink.sh -i$id -v$value
 fi
fi

Скрипт буде перевіряти файл /leds+buttons/leds.out. В ньому зчитуватимуться два числа через пробіл -номер піна GPIO і частота переривання. Скрипт, що генерує переривання описаний тут.

Нехай у нас є світлодіод, підключений по схемі
scheme
Тоді ми запишемо в файл два числа
1 60
і пін номер 1 буде миготіти раз в секунду. Таким чином можна керувати світлодіодом будь-звідки. Наприклад, індикація натиснення кнопки на веб формі.

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

Позначки:, , ,

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

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



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


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