2017년 11월 11일 토요일

라즈베리파이 Kivy Remote debugging 환경 설정하기 (Pycharm)

임베디드 리눅스의 어플리케이션을 개발하다보면 직접 에디터를 띄우고 키보드 마우스를 사용하여 개발 할 수도 있지만 프로그램 자체는 가볍게 잘 돌아가더라도 에디터 속도가 마음에 들지 않거나 빌드 속도가 오래 걸리거나 Auto complete 기능이 느리게 동작하거나 등등 여러가지 문제로 개발이 불편하다.

따라서 Pycharm(윈도우)에서 KivyPie OS를 사용하여 remote debugging하는 방법을 적어 본다. 

1. 인터프리터 설정
    현재 사용하는 인터프리터는 PC에 설치된 Python으로 설정되어 있을 것이다.
    따라서 원격지의 인터프리터를 지정하여 설정을 추가해 주어야 한다.
    
    File - Setting 메뉴에서 Project interpreter탭을 선택한다.
    톱니 버튼을 눌러  Add Remote를 선택한다.
    SSH를 선택하고 (라디오 버튼) account / password를 입력하고
    파이썬 인터프리터를 지정해 준다. KivyPie 기준으로  /usr/bin/python3을 지정한다.
    OK를 눌러 추가 완료하고 해당 인터프리터를 선택한다.

2. 배포 설정하기
    현재 선택된 Python 파일은 전송이 되지만 나머지 리소스 파일이나 서브 파일 등이 
    전송되지 않으므로 배포 설정을 추가한다.

    Tool - Deployment - Configuration 메뉴를 통해 설정창으로 들어간다.
    좌측 탭에서 + 버튼을 눌러 항목을 추가한다.
    Connection 탭에서 연결 방식은 SFTP를 선택한다. 
    (ssh를 통해서 전송되므로 추가 설정 필요없음)
    하단의 항목에서 SSH 연결 정보를 적어준다.
    Mappings 탭을 눌러 Local path (pc의 프로젝트 폴더 경로) deployment path는
    라즈베리파이에 소스가 저장될 폴더를 선택한다. 
    ...버튼을 눌러서 GUI로 선택도 가능하다.
    모두 완료 되었다면 OK를 눌러 저장한다.

3. 실행 설정하기
    전송이 되었더라도 원격지로 전송된 파이썬 파일들 중 어떤 파일이 메인이 되는 엔트리
    포인트 파일인지 알 수 없으므로 해당 파일을 지정해 준다.
    Run - edit configuration 메뉴 선택 
    + 버튼을 눌러 항목을 추가하고 이름은 적당히 적어준다.
    Script라고 적혀있는 항목은 PC 프로젝트 폴더의 메인 파이썬 파일을 지정한다.

4. Deploy하기 
    좌측의 Project 폴더에서 마우스 우클릭 Upload to '배포설정이름'을 선택한다.
    SFTP방식을 사용해서 자동으로 업로드 되며, 원하는 폴더만 지정해서 
    업로드 할 수 있다.

5. 실행 및 디버그 실행
    상기 설정이 모두 끝났다면 Run 메뉴의 이름이 Run '실행설정프로파일이름'으로
    변경되어있을 것이다. 디버그도 마찬가지..
    그것을 눌러 실제 실행 할 수 있고 파이썬의 logging 같은 정보도 자동으로 피씨 
    디버그 창에서 확인 할 수 있다.
    

라즈베리파이를 이용한 GUI 개발용 최적 OS (KivyPie)

리눅스 기반 임베디드 OS에서 유려한 GUI 개발 하기 위한 진입 장벽이 제법 있는편인다.
X Window server 기반의 윈도우 메니저 까지 모두 올리다보면 시스템이 너무 무거워지고
부팅시간이 길게 되며 윈도우 메니져의 기본 기능에 따라서 현재 실행중인 키오스크 타입의 앱의 영역을 벗어나서 사용 할 수 있게 될 수 있다.

따라서 Yocto 또는 Buildroot 등을 사용하여 사용하는 기능만을 제외하고 모든 기능을 제거한 경량 리눅스를 별도로 빌드하여야 하는데, 리눅스 커널과 Root file system의 기본 기능들 까지 모두 다시 빌드하여야 하고 드라이버까지 포함하여야 하므로 매우 귀찮고 해당 경험이 충분하지 않다면 개발을 위한 기본 이미지를 생성하는 것 자체도 매우 힘들다.

임베디드 리눅스를 사용 가능한 SBC 보드들이 제법 있지만 이것을 장난감으로 사용하거나
다른사람들이 만들어 놓은 OS를 활용하는 것은 매우 쉽지만 어떠한 어플리케이션 전용 제품으로 활용하기는 생각보다 손이 많이 타게 된다.

QT / Mono (C#) / Java / NodeJs / Python등 리눅스만 올라가기만 해도 사용할 수 있는 language나 플랫폼은 많지만 가장 간단하면서 쉽고 상용 수준에 맞는 GUI를 개발하기 위해
여러가지 플랫폼을 검토해봤고 이 중에서 완전히 무료이면서 라이센스에 조금이라도 문제가 될 여지가 없는 완전한 플랫폼을 찾았는데 Kivy 이다.

기본 개발언어는 Python이지만 OpenGL ES 기반이므로 화려한 UI 구성이나 이펙트를 사용하여도 매우 속도가 빠르고 개발하다 보면 생각보다 가볍다는 생각이 든다.

단순히 동작 속도만 보면 PC에서 돌리는 것과 별 차이가 없다고 느낄정도이니 매우 쓸만한 속도가 나온다.

하지만 이 플랫폼을 제품화 정도로 사용하기 위해서는 기본으로 Python 인터프리터와

기본 라이브러리들, EGL (opengl es) 드라이버가 포팅되어있는 기본 OS가 필요한데
(X window 및 Window manager가 제거된) 앞서 말한것처럼 이 기본 OS 자체를 만드는 과정이 쉽지 않다보니 삽질과 수정 빌드를 무수히 반복하는 삽질이 필요하게 되는데

Kivy를 기본으로 하는 순수한 OS를 누군가가 만들어서 배포하고 있으며, 기본적인 기능은 Raspbian을 그대로 유지하되 X window 와 window manager를 제거하고 파이썬 인터프리터를 추가해 놓은 좋은 OS를 발견하여 여기에 기록을 남긴다.

현재 1.0 버전까지 나와있으며, 특정 커맨드를 입력하여 WiFi 설정 등 기본 설정 등을 진행 할 수 있도록 스크립트가 추가되어 있다.

하기 사이트에서 다운로드 할 수 있으며 용량은 대략 1기가 (압축) 정도 된다.

http://kivypie.mitako.eu/

또한 FAQ가 매우 잘 작성되어 있어서 FAQ만 확인하여 설정만 조금 한다면 거의 상용레벨에 근접하는 플랫폼이 완성된다.

2017년 11월 8일 수요일

라즈베리 파이 bootconfig.txt argument list

https://elinux.org/RPiconfig

상기 목록을 확인하여 옵션을 추가하거나 변경 할 수 있다.

부팅시 무지개 VGA Initialize 스크린을 제거하기 위해서는
아래 항목을 설정한다.

disable_splash=1

부트시 딜레이를 적용하고 싶다면

boot_delay=1   // second
boot_delay_ms=1000  // millisecond 단위로 적용 할 수 있다.