Не удается прочитать значения GPIO при выполнении задания CRON

#shell #cron #gpio #pigpio

#оболочка #cron #gpio #pigpio

Вопрос:

У меня есть базовый скрипт, используемый для обнаружения движения, поскольку оно регистрируется датчиком PIR, подключенным к Rasberry PI. Скрипт отлично работает при запуске от имени пользователя «pi» и от имени root, вручную с терминала. Однако, когда я пытаюсь запустить его при запуске, кажется, что либо датчик не работает, либо мой скрипт не может прочитать соответствующее значение из /sys/ .

  1. Сценарий:
 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

  
  1. Запись в crontab:
 @reboot /home/pi/Desktop/motion_music_player.sh
  

Примечания:

  1. Как вы видите в скрипте, у меня есть некоторые грубые записи в текстовые файлы. ‘no-movement.txt ‘действительно обновляется, что означает, что скрипт определенно запущен.
  2. ‘movement.txt ‘не создается, подразумевая, что скрипт не может прочитать соответствующее значение GPIO (или что-то не так с датчиком, но только при запуске, в противном случае датчик работает нормально).

Комментарии:

1. Я бы добавил a sleep 120 в самом верху скрипта (конечно, после `#!/bin/ bash), чтобы все началось сначала (просто предположение). Удачи!

2. Не используйте интерфейс sysfs. Он устарел и будет отключен по умолчанию в новом ядре. Использование libgpiod и его инструменты.

3. @shellter спасибо, но это не помогло. использование @0andriy ligpiod сделало свое дело. Если вы хотите получить принятый ответ, можете ли вы опубликовать ответ с некоторой документацией, и я пометил его как правильный. Спасибо обоим за то, что нашли время.