GPIO 및 웹 서버를 이용하여 라즈베리파이 제어

Posted by 백창
2015.11.14 10:07 리눅스/라즈베리파이

# 개요


 GPIO와 웹서버를 통하여 라즈베리파이를 제어하자.


 본 포스팅의 내용대로 수행 시 서버 보안의 큰 문제가 생길 수 있기 때문에 테스트 서버에서 혼자서만 사용하도록 하자.



# 설정


 php에서 wiringPi소스를 실행하기 위해 (wiringPi 소스는 root 권한으로 실행해야 한다)


 /etc/sudoers 파일에서 모든 파일 접근 시 권한 요구를 받지 않도록 설정해준다.


 www-data ALL = NOPASSWD: ALL





# 동작 설명


 웹 서버의 버튼을 클릭하면 Ajax통신을 통해 해당 버튼의 기능을 실행한다.


 각 버튼은 php의 쉘 명령어 실행 코드로 wiringPi 코드를 실행하도록 한다.




# Ajax 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 <script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
        <script>
        $(document).ready(function(){
                $("#fw").mousedown(function(){
                        $.ajax({
                                type:'post'
                                ,url:'./fw.php'
                        });
                })
        });
 
        $(document).ready(function(){
                $("#bw").mousedown(function(){
                        $.ajax({
                                type:'post'
                                ,url:'./bw.php'
                        });
                })
        });
 
        $(document).ready(function(){
                $("#lw").mousedown(function(){
                        $.ajax({
                                type:'post'
                                ,url:'./lw.php'
                        });
                })
        });
 
        $(document).ready(function(){
                $("#rw").mousedown(function(){
                        $.ajax({
                                type:'post'
                                ,url:'./rw.php'
                        });
                })
        });
 
        $(document).ready(function(){
                $("#st").mousedown(function(){
                        $.ajax({
                                type:'post'
                                ,url:'./st.php'
                        });
                })
        });
       </script>
cs



# php 코드


1
2
3
4
5
<?
        $out = exec("sudo ./python/wiringPi/rc_test f");
        echo $out;
?>
 
cs


# C 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
//left
void movLeft(){
        digitalWrite(M1_L,0);
        digitalWrite(M1_R,1);
        digitalWrite(M2_F,1);
        digitalWrite(M2_R,0);
}
 
//right
void movRigt(){
        digitalWrite(M1_L,1);
        digitalWrite(M1_R,0);
        digitalWrite(M2_F,0);
        digitalWrite(M2_R,1);
}
 
//stop
void movStop(){
        digitalWrite(M1_L,0);
        digitalWrite(M1_R,0);
        digitalWrite(M2_F,0);
        digitalWrite(M2_R,0);
}
 
//forw
void movForw(){
        digitalWrite(M1_L,0);
        digitalWrite(M1_R,1);
        digitalWrite(M2_F,0);
        digitalWrite(M2_R,1);
}
 
//back
void movBack(){
        digitalWrite(M1_L,1);
        digitalWrite(M1_R,0);
        digitalWrite(M2_F,1);
        digitalWrite(M2_R,0);
}
 
cs



# 실행





# 풀 코드


https://github.com/bcy3161/godHands


    • 2016.08.01 21:56
    비밀댓글입니다
  1. 정말 죄송한데....
    라즈베리파이에 이동후 실행을 하려고하는데 .sh 파일을 실행을 해야되나요??
    지식이 하나도 없어서...
    알려주시면 감사하겠습니다.
    • 제가올린소스 말하시는건가요?? 그건쓰기어려울꺼에요 구성이엉망이라서 뭘실행한다고 동작하는게아니라서 참고용으로쓰시고
      wiringPi라이브러리를 받으셔서 디지털신호로 모터제어하시면됩니다
  2. 궁금한게 mjpg stream 사용 하셔서 웹페이지로 보신거잖아요? 지금 웹구성을하고 싶은데 프레임 속도가 잘안나와서요 동영상에 너무 잘나오는것 같아서 여쭤 본것입니다. 카메라가 파이캠이 아닌가요??
    • 파이캠맞구 설정에보시면 프레임설정하고 크기설정같은게있어요 여건에 맞게 조절하시면 되구요
      저도 무선으로 할때는 약간딜레이가잇엇습니다
이 댓글을 비밀 댓글로