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

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

Raspberry Pi


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

Опубліковано Липень 3, 2013. Автор: tarasius

Нехай нам треба керувати світлодыодом, підключеним до распі через 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 буде миготіти раз в секунду. Таким чином можна керувати світлодіодом будь-звідки. Наприклад, індикація натиснення кнопки на веб формі.

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

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

Опубліковано Липень 2, 2013. Автор: tarasius

Є распі, є лампочка/світлодіод/інша периферія, підключені до нього. Я пропоную скрипт, який дає змогу керувати вихідними пінами на 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 відповідно. В останньому випадку скрипт відпрацює моментально, в усіх інших він працюватиме одну хвилину, потім завершиться.

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

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

Емулятор ігрових консолей на Raspberry Pi

Опубліковано Липень 2, 2013. Автор: tarasius

Що б Ваш Распі не робив, але інколи хочеться розслабитись і пограти в якісь іграшки. Зрозуміло, що сучасні він не потягне, доведеться шукати щось стареньке. Але треба й щоб був великий вибір. Тому ідеальним вибором будуть старі консольні ігри, тим паче що для распі є чудовий емулятор, який підтримується, оновлюється і має велике community.

muo-raspberrypi-gamesconsole-controller Я маю на увазі RetroPie, почитати про нього можна тут https://github.com/petrockblog/RetroPie-Setup/wiki

Встановити його досить просто.

Спочатку переконайтеся що у Вас встановлені потрібні пакети:

sudo apt-get install -y git dialog

Далі скачуємо останню версію з git:

git clone git://github.com/petrockblog/RetroPie-Setup.git

Потім запускаємо власне установку:

cd RetroPie-Setup
chmod +x retropie_setup.sh
sudo ./retropie_setup.sh

Має з’явитись таке віконце:
tutorial_installation1

Тиснемо Enter і насолоджуємось результатом:
tutorial_installation2

Після цього у Вашій домашній директорії з’явиться папка RetroPie, а в ній нас більше всього цікавитиме папка roms, куди власне і треба складати наші ігри.

Файл основних налаштувань лежить тут: /etc/retroarch.cfg

Налаштування GUI та самих емуляторів зберігаються в ~/.emulationstation. Наприклад, якщо Ви не бачите ігор, хоча і скопіювати їх в папку roms, перевірте файл ~/.emulationstation/es_systems.cfg

А для того, щоб налаштувати геймпад, слід запустити спеціальну утиліту

sudo ~/RetroPie/RetroArch-Rpi/tools/retroarch-joyconfig | sudo tee -a /etc/retroarch.cfg

Ну і націнець запустити емулятори можна командою emulationstation.

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

Меню завантаження для Raspberry Pi

Опубліковано Червень 20, 2013. Автор: tarasius

bootmenu

Меню завантаження

Якщо Ви не хочете тримати ваш Распі включеним весь час, а при включенні економити час на запуску рутинних команд, я рекомендую зробити меню загрузки. Окрім того його можна зробити різним для конекту по SSH та при фызичному запуску системи. Тобто при включенны Распі Ви будете бачити на під’єднаному екрані одне меню, а при віддаленому підключенні з іншог пристрою – інше. Різні меню потрібні щоб не вивидити непотрібні опції. Наприклад, якщо у Вас стоіть медіа-центр чи якась іграшка, Ви можете винести її в меню фізичної загрузки, але не показувати в меню для SSH. Також для того щоб система не простаювала із запущеним меню весь час, зробимо таймаут і запуск якогось пункту за замовченням. Ви можете це прибрати зі скрипту. Також зекономимо час на натисненні ентера і будемо вважати, що для вибору пункту достатньо натиснення однієї клавіші. Якщо натиснута була циферка, запускаємо відповідний пункт меню. Інакше – пунк за замовченням.Зверху виведеного меню виводиться загальна інформація про температуру, аптайм та інше. Зліва малюється імпровізована малинка. Весь текст виводиться на різнокольоровому фоні. Все це звісно також можна змінити за смаком.

Все вище описане буде працювати як скрипт на баші, який ми додамо в автозавантаження. Для цього створимо пустий файл /usr/local/bin/, назвемо файл bootmenu і дамо йому максимальні права. Далі знайдемо в домашній директорії (/home/pi/) файл .bashrc і додамо у самий кінець запуск нашого скрипту. До речі, тут же можна встановити і шрифт для консолі. Так як в мене телевізор 32″, а читати текст я хочу з відстані хоча б метра два, я поставив крупніший шрифт, який прекрасно підходить для завантажувального меню.

Отже, вибір шрифта. Знайдіть підходящий файл в/usr/share/consolefonts/ і напишіть в .bashrc, наприклад, таке:

setfont /usr/share/consolefonts/CyrSlav-TerminusBold28x14.psf.gz

Далі додамо завантаження нашого меню. Зробимо щоб воно з’являлось тільки якщо сесія стартує. Тобто, при виході з LXDE наприклад, нема сенсу показувати меню знову.

if [ "$DISPLAY" == "" ]; then
/usr/local/bin/bootmenu
fi

Далі відредагуємо файл bootmenu:

#!/bin/bash
###########################################################
# Simple Startup Menu
# Author: Http://tarasius.name
###########################################################
clear

let upSeconds="$(/usr/bin/cut -d. -f1 /proc/uptime)"
let secs=$((${upSeconds}%60))
let mins=$((${upSeconds}/60%60))
let hours=$((${upSeconds}/3600%24))
let days=$((${upSeconds}/86400))
UPTIME=`printf "%d days, %02dh%02dm%02ds" "$days" "$hours" "$mins" "$secs"`
TTEMP=`sudo vcgencmd measure_temp`

# get the load averages
read one five fifteen rest < /proc/loadavg

echo "
$(tput setaf 2)$(tput setab 0) .~~. .~~. $(tput setab 5)$(tput bold ; tput setaf 7) `date +"%A, %e %B %Y, %r"`$(tput el)
$(tput setab 0)$(tput setaf 2) '. \ ' ' / .' $(tput setab 5)$(tput bold ; tput setaf 7) `uname -srmo`$(tput el)
$(tput setab 0)$(tput setaf 2) .~ .~~~..~. $(tput setab 5)$(tput bold ; tput setaf 7) Temperature........: ${TTEMP}$(tput el)
$(tput setab 0)$(tput setaf 1) : .~.'~'.~. : $(tput setab 5)$(tput bold ; tput setaf 7) Total: `cat /proc/meminfo | grep MemFree | awk {'print $2'}` kB / Free: `cat /proc/meminfo | grep MemTotal | awk {'print $2'}` kB$(tput el)
$(tput setab 0)$(tput setaf 1) ~ ( ) ( ) ~ $(tput setab 5)$(tput bold ; tput setaf 7) Uptime.............: ${UPTIME}$(tput el)
$(tput setab 0)$(tput setaf 1)( : '~'.~.'~' : ) $(tput setab 5)$(tput bold ; tput setaf 7) Load Averages......: ${one}, ${five}, ${fifteen} (1, 5, 15 min)$(tput el)
$(tput setab 0)$(tput setaf 1) ~ .~ ( ) ~. ~ $(tput setab 5)$(tput bold ; tput setaf 7) Running Processes..: `ps ax | wc -l | tr -d " "`$(tput el)
$(tput setab 0)$(tput setaf 1) ( : '~' : ) $(tput setab 5)$(tput bold ; tput setaf 7) IP Addresses.......: `/sbin/ifconfig eth0 | /bin/grep "inet addr" | /usr/bin/cut -d ":" -f 2 | /usr/bin/cut -d " " -f 1`$(tput el)
$(tput setab 0)$(tput setaf 1) '~ .~~~. ~' $(tput setab 5)$(tput el)
$(tput setab 0) '~' $(tput setab 5)$(tput el)$(tput sgr0)"

wait=25
hostname=`hostname|tr '[:lower:]' '[:upper:]'`

st=0
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ];
then
st=1
else
case $(ps -o comm= -p $PPID) in
sshd|*/sshd) st=1;;
esac
fi

if [ $st -eq 1 ];
then
# SSH connection
echo -n "$(tput setab 4)$(tput bold ; tput setaf 2)Raspberry Pi меню загрузки - Host: [$hostname]$(tput el)
$(tput setaf 5)============================================$(tput el)
$(tput bold ; tput setaf 3)1) Віртуальний LXDE робочий стіл$(tput el)
2) Midnight commander$(tput el)
3) Консоль адміністратора$(tput el)
4) Консоль$(tput el)
$(tput setaf 5)============================================$(tput el)"

echo "
$(tput setab 0)$(tput bold ; tput setaf 7)У Вас є $wait секунд для вибору. Виберіть пункт (1,2,3,4) [4]: "
read -t $wait -n 1 inp
clear
echo "
$(tput setaf 3)Введіть команду 'q' щоб відкрити меню з основними командами $(tput sgr0)"
case "$inp" in
1)
echo "Запуск віртуального LXDE робочого стола"
sudo /usr/bin/vncserver :0 -geometry 1600x1200 -depth 24
exit 1
;;
2)
echo "Запуск Midnight Commander"
sudo mc
exit 1
;;
3)
echo "Запуск консолі адміністратора"
sudo su -
exit 1
;;
*)
echo "Запуск консолі"
exit 1
;;
esac

else
# Local connection
echo -n "$(tput setab 4)$(tput bold ; tput setaf 2)Raspberry Pi меню загрузки - Host: [$hostname]$(tput el)
$(tput setaf 5)============================================$(tput el)
$(tput bold ; tput setaf 3)1) LXDE робочий стіл$(tput el)
2) XMBC медіа сервер$(tput el)
3) Ігровий емулятор$(tput el)
4) Консоль адміністратора$(tput el)
5) Консоль$(tput el)
$(tput setaf 5)============================================$(tput el)"

echo "
$(tput setab 0)$(tput bold ; tput setaf 7)У Вас є $wait секунд для вибору. Виберіть пункт (1,2,3,4,5) [2]: "
read -t $wait -n 1 inp
clear
echo "
$(tput setaf 3)Введіть команду 'q' щоб відкрити меню з основними командами $(tput sgr0)"
case "$inp" in
1)
echo "Запуск LXDE робочого стола"
/usr/bin/startx
exit 1
;;
3)
echo "Запуск ігрового емулятора"
sudo emulationstation
exit 1
;;
4)
echo "Запуск консолі адміністратора"
sudo su -
exit 1
;;
2)
echo "Запуск XBMC медіа сервера"
sudo traf
sudo /usr/lib/xbmc/xbmc.bin &
exit 1
;;
*)
echo "Запуск консолі"
exit 1
;;
esac

fi

###########################################################
# End of Script
###########################################################

Можемо перевірити що вийшло просто ввівши в консолі команду bootmenu. В цьому прикладі буде виведено п’ять пунктів меню для фізичного старту системи і чотири при підключенні через SSH. Далі скрипт чекатиме 25 секунд на натиснення клавіші, а по завершенню буде очищати екран і виводити текст привітання. В моєму прикладі це речення
“Введіть команду ‘q’ щоб відкрити меню з основними командами”.

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

Корпус для Raspberry Pi із зорельоту Lego Star Wars

Опубліковано Червень 19, 2013. Автор: tarasius

Мій Raspberry Pi приїхав в рожевому корпусі, який зображено в одній з попередніх публікацій. Він більше змахує просто на коробочку для зберігання, ніж на корпус, який можна використовувати. Адже там нема дірок коло роз’ємів. Спочатку я всі потрібні дірки виплавив, краї зачистив. Але все рівно вийшло страшнувато. І вирішив я з підручних засобів робити нови йкорпус. Найсимпатичніший варіант, який вийшов, зображений нижче на фото.

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

« Newer EntriesOlder Entries »
Сподобалось? Поділися з друзями!



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


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