2017-10-02 2 views
0

이 raspbian 스트레치 라이트 9.1 공개 거부 권한을 반환 pi의 gpio (파일 이름은 led.sh)입니다. 일부 파일과 상호 작용할 필요가있는 부분이 있습니다.GPIO 스크립트는 라즈베리 파이 1 일

function makeOn { 
    # status has value 1 if led is on and 0 if led is off 
    if [ $(status) -eq 1 ]; then 
    echo "led is already on" 
    else 
    #say we are using pin 18 and set it to output mode 
    echo "18" > /sys/class/gpio/export 
    echo "out" > /sys/class/gpio/gpio18/direction # this is line 38 

    # write output 
    echo "1" > /sys/class/gpio/gpio18/value # this is line 41 
    echo "led is on" 
    fi 
} 

gpio 그룹의 사용자로 실행하고 있습니다. 다음은 내 프로그램 엉망하려고하는 파일입니다 :

enter image description here

이상한을 : 나는 led.sh을 실행할 때

enter image description here

enter image description here

이 일어나는 것이다 문제는 쉘에서 명령을 하나씩 실행했는데 문제가 없다는 것입니다. 하지만 스크립트를 실행할 때 gpio 그룹에 있어도 허가가 거부됩니다. 먼저 셸이 명령을 특별한 사용자로 실행하고 echo $ EUID를 여러 곳에서 led.sh에 추가하여 검사 한 결과 모두 내 사용자 ID를 반환했다고 생각했습니다.

왜이 프로그램은 해당 파일에 대한 사용 권한이 거부되어 있으며 사용 권한을 부여하거나 수정합니까?

+0

스크립트를 실행 파일로 표시 했습니까? chmod + x led.sh가 도움이 될 수 있습니다. 이 문제가 해결되면 매일 묻는대로이 Q를 삭제하십시오. 행운을 빕니다. – shellter

+0

@shellter 문제가 아니므로 의견을 보내 주셔서 감사합니다. – secknv

답변

0

그래서 나는 몇 가지 실험을했고, 여기에 내가 가진 무엇 :

는 처음에는이 문제에 chmod를 777 같은 일을 생각 만 테스트를 위해 파일을 한 다음 나는 그 파일이기 때문에 그것이 작동하지 않을 것입니다 기억 핀을 echo "18" > /sys/class/gpio/export으로 내보낼 때 생성됩니다.

그래서 문제가 될 수 있다고 생각하여 시스템에 "파일의 권한을 적절히 작성하고 설정하는 시간"이 있기 때문에 sleep 0.1을 추가했습니다. 이제 작동합니다.

0

바로 뒤에 sleep을 추가하는 것은 어떻습니까?

echo "18" > /sys/class/gpio/export 
sleep 0.1 

타이밍 문제 인 것 같습니다.