#shell #cron #gpio #pigpio
#оболочка #cron #gpio #pigpio
Вопрос:
У меня есть базовый скрипт, используемый для обнаружения движения, поскольку оно регистрируется датчиком PIR, подключенным к Rasberry PI. Скрипт отлично работает при запуске от имени пользователя «pi» и от имени root, вручную с терминала. Однако, когда я пытаюсь запустить его при запуске, кажется, что либо датчик не работает, либо мой скрипт не может прочитать соответствующее значение из /sys/ .
- Сценарий:
echo "4" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio4/direction
while true; do
trap 'echo "4" > /sys/class/gpio/unexport' 0
stat=`cat /sys/class/gpio/gpio4/value`
echo $stat > /home/pi/Desktop/no-movement.txt
if [ $stat == 1 ]
then
echo $stat > /home/pi/Desktop/movement.txt
/usr/bin/omxplayer /home/pi/Desktop/sample.mp3
fi
done
exit 0
- Запись в crontab:
@reboot /home/pi/Desktop/motion_music_player.sh
Примечания:
- Как вы видите в скрипте, у меня есть некоторые грубые записи в текстовые файлы. ‘no-movement.txt ‘действительно обновляется, что означает, что скрипт определенно запущен.
- ‘movement.txt ‘не создается, подразумевая, что скрипт не может прочитать соответствующее значение GPIO (или что-то не так с датчиком, но только при запуске, в противном случае датчик работает нормально).
Комментарии:
1. Я бы добавил a
sleep 120
в самом верху скрипта (конечно, после `#!/bin/ bash), чтобы все началось сначала (просто предположение). Удачи!2. Не используйте интерфейс sysfs. Он устарел и будет отключен по умолчанию в новом ядре. Использование
libgpiod
и его инструменты.3. @shellter спасибо, но это не помогло. использование @0andriy
ligpiod
сделало свое дело. Если вы хотите получить принятый ответ, можете ли вы опубликовать ответ с некоторой документацией, и я пометил его как правильный. Спасибо обоим за то, что нашли время.