top drop menu

Recent Post

화요일, 8월 23

WebioPi와 UV4L를 이용하여 라즈베리파이 파이카메라 스트리밍 컨트롤러 만들기(3)

WebIOPi는 웹상에서 라즈베리파이의 GPIO를 컨트로할 수 있게 해준다. 라즈베리파이2에는 대응하지 않는다고 하지만 소스를 수정하면 사용이 가능하다고 한다. 지금은 상관 없는 일이다.

http://webiopi.trouch.com/DOWNLOADS.html

에서 최신 파일을 다운로드 받을 수 있다. wget이 안되서 여기서 다운로드 받아서 라즈베리파이에 옮겨 놓았다.

$ tar xvzf WebIOPi-x.y.z.tar.gz
$ cd WebIOPi-x.y.z

*추가사항 : 라즈베리파이 2에서 Webiopi를 사용하기 위해서 패치를 해줘야 한다.

$ wget https://raw.githubusercontent.com/doublebind/raspi/master/webiopi-pi2bplus.patch

$ patch -p1 -i webiopi-pi2bplus.patch
$ sudo ./setup.sh

※ webiopi를 설치 하고 나서 기본적으로 실행되는 웹서버 문서 위치는 /usr/share/webiopi/htdocs 이다. 이곳에 이동해서 보면 index.html 등 브라우저 접속해서 보이는 것들이 위치해 있다.

$ sudo /etc/init.d/webiopi start

부팅시 자동 실행 되게 할려면

$ sudo update-rc.d webiopi defaults

그리고 웹브라우저에서 라즈베리파이의 주소에 포트 :8000 으로 접속하면 된다.

※ Webiopi를 디버깅 모드로 실행하는 방법은
$ sudo webiopi -c /etc/webiopi/config -d 로 실행해 주면된다. 터미널에 메세지가 출력된다.

이렇게 해서 필요한 3가지를 모두 설치했다.
웹화면은 이전에 만들어 놓았던것을 그대로 활용했다. 예전에 작업했던것과 다를게 없다. 단지 영상만 UV4L을 이용한것으로 바꾸어 준 셈이다. 백업을 제대로 안해서 중간 작업단계의 것인듯 ... 음~




상단의 스트리밍 영상은 UV4L를 이용한 것이다. 영상과 모터 움직이는것은 관련성이 별로 없다. 카메라 움직이는대로 영상을 스트리밍 할 뿐이다.
WebioPi 스크립트도 이전에 것을 그대로 사용했다. 거의 다시 타이핑했다. 스트리밍 영상을 웹페이지에 끼워 넣는것은 쉽다. http를 지원하는(?) 스트리밍이기 때문에 그냥 소스 한줄이면 웹페이지에서 보인다.
<img src="http://raspberrypi-ip:8080/stream/video.mjpeg">


그냥 이미지 태그에 소스에 링크만 걸어 주면 된다. 물론 UV4L이 정상적으로 설치되고 설정이 되어 있어야 겠지만 ... 컨트롤러 부분을 살펴 보자.
이 부분은 WebioPi서버를 이용해서 파이썬 스크립트에 동작함수를 실행하게 해서 모터를 원하는 방향으로 움직이게 하면 된다.  파이썬에서 모터를 동작하게 하는것은 터미널에서 echo 0=150 > /dev/servoblaster 해서 모터를 움직이듯이 버튼에 따라 터미널에 명령을 주어 실행하게 하는 방식을 사용했다.

call("sudo echo 0=150 > /dev/servoblaster", shell =  True)
한줄이면 파이썬에서 모터를 움직이게 한다. sudo는 안해 줘도 되나?
버튼에 따라 패닝과 틸트 동작을 하게 하고 사각버튼은 기본위치로 돌아 가게 했다. auto scan은 자동으로 좌우로 움직이게 했다. 속도바를 조절하면 움직이는 속도가 변경된다. WebioPi를 이용하면 웹페이지에서 함수를 실행할때 인자를 같이 볼 수 있다. 속도의 변경값을 보내서 모터의 움직임을 조절하는 것이다.
맨 하단에 on/off버튼이 있는데 이게 좀 말썽이다. 어떤 기능을 줘야 하는지 명확하지 않다. 뭘 끄고 뭘 켜는 거지? ㅋㅋ 일단 영상과 서보모터의 동작을 끄거나 다시 켜는 것으로 해주었다. 그런데 영상 부분이 원하는대로 잘 안된다. UV4L 서비스를 중단하고 가동하는게 잘 모르겠다. 음~

전체적으로 이 프로그램이 동작하는 방식에 대해서는 더 고민을 해봐야 겠다. 라즈베리파이가 부팅하면 WebioPi는 자동으로 실행되게 해주었다. 그래야 브라우저에서 접속을 하니깐. 그런데 자동으로 영상을 보일것인지 서보블라스터를 가동해야 할지? 이 라즈베리파이가 딱 이 목적을 위한것이면 모두 부팅시 실행되게 해주면 고민 끝이지만 이런 저런 용도로 사용해야 한다면 사용하지 않을때는 쓸데없이 이런 서비스를 가동시켜 놓을 필요가 없기 때문이다. 이부분은 일단 두고 보자.


이렇게 작업한 것이 실제로 쓸만하지는 객관적으로 판단하기는 힘들다. 일단 라즈베리파이가 구모델 이라는 점과 일반 광랜에 유선도 아닌 무선랜을 사용하는 있으니 성능이 떨어지는것은 당연한 것 같기도 하다. 잠깐 야외에서 LTE로 접속해서 보니 자연스러운 동영상 스트리밍을 기대하기는 힘든것 같다. 역시 폰에서는 그냥 JPEG로 한장 한장 보는게 나을듯 하다. 일단 이정도에서 마무리~
Blogger Widget