2018년 1월 17일 수요일

라즈베리파이 Console 모드에서 Blank screen 끄기

장시간 입력 없이 대기하게 되면 blank screen 기능이 활성화 되어 절전모드로 들어가게 되는데 X Window의 경우 절전 설정 변경을 통해 가능하지만 
터미널에서 blank screen에 진입하는 경우에는 cmdline.txt 파일을 수정하여
해당 기능으 끌 수 있다.

 /boot/cmdline.txt 

상기 파일에서 하기 항목을 추가해 주면 된다. 

consoleblank=0 

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 단위로 적용 할 수 있다. 

2017년 2월 16일 목요일

라즈베리파이 부트업 텍스트 & 로고 삭제하기


라즈베리 파이 부트업 텍스트 및 로고 삭제하기


1.) Change /boot/cmdline.txt
sudo nano /boot/cmdline.txt
Change the console from tty1 to
console=tty3 
Add this to the end of the line. 'loglevel=0' removes most of the messages from the boot. You can also use 'loglevel=3', but some boot messages may re-appear.
quiet splash loglevel=0 logo.nologo vt.global_cursor_default=0
If you are going to use Plymouth add this:
plymouth.ignore-serial-consoles 
2.) Tell dmesg to be quiet
sudo nano /etc/rc.local
Add this before 'exit 0':
#Suppress Kernel Messages
dmesg --console-off
This should take care of most boot messages this far. #2 also took care of the 'watchdog watchdog0: watchdog did not stop!' message on shutdown for me.
3.) Change the auto login in systemd (Hides the login message when auto-login happens)
sudo nano /etc/systemd/system/autologin\@.service
Change your auto login ExecStart from:
ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM
To:
ExecStart=-/sbin/agetty --skip-login --noclear --noissue --login-options "-f pi" %I $TERM
Make sure to change 'pi' to the username you use!
4.) Change /etc/pam.d/login (removes the Kernel version from showing when you auto-login)
sudo nano /etc/pam.d/login
Change the line
session    optional   pam_exec.so type=open_session stdout /bin/uname -snrvm
To be
session    optional   pam_exec.so type=open_session stdout
5.) Add .hushlogin
touch ~/.hushlogin
or Remove Message of the Day -MOTD (alternative to 5)
sudo update-rc.d motd remove
Now my boot just shows the Plymouth boot screen, and goes into my python GUI.

2016년 3월 27일 일요일

UWP 본격 탁상시계 만들기1

윈도우 폰을 뭔가 유용하게 사용하기 위해 앱을 하나 만들기로 하였습니다.

가장 쉬운게 시계 만들기지요 ㅎㅎ

결국 최종으로 만들 앱은 아래의 앱 입니다.



화면에 큼지막하게 날짜 시간 날씨가 표시되는 매우 간단한 앱이지요..

각 단계별로 해당 앱을 만들기 위한 방법을 설명합니다.


0. Visual Studio를 실행하고 UWP 프로젝트를 생성합니다.




1. 날짜, 시간 표시를 위한 라벨 UI에 추가 하기



 MainPage.xaml (메인뷰)에 날짜를 표기할 TextBlock 두개를 추가 합니다.

도구 상자를 통해서 드래그 해서 추가하거나 직접 입력하여 추가 할 수 있습니다.


2. 타이머 추가하기

기존에 C# 네이티브 개발을 하셨다면 Windows.Forms의  Timer를 사용하시거나Thread 쪽 타이머를 사용하셨겠지만 Windows RT Framework 에서는 이를 사용할 수 없습니다.

Windows RT 에서는 DispatchTimer라는 타이머 클래스를 제공합니다.

MainPage.xaml.cs 파일을 열어 생성자에 Loaded / UnLoaded이벤트를 추가 합니다.
이는 메인페이지가 로드 되었을때 라벨에 날짜 텍스트를 뿌려주기 위함입니다.




이벤트 핸들러를 작성합니다.

Loaded 이벤트에 코드를 추가 합니다.




Timer tick 이벤트를 추가 합니다.



날짜와 시간을 아까 생성했던 텍스트 라벨에 뿌려 주도록 코딩합니다.




Unloaded 이벤트에 타이머를 정지하도록 코딩합니다.

윈도우 폰을 연결하고 F5키를 누르면 자동으로 배포되어 자동으로 실행 됩니다.

UWP 플랫폼 이해

새로운 플랫폼에서 개발하기 위해서는 해당 플랫폼의 기본적인 이해가 필수이다.

해당 플랫폼에 대해서 완전히 이해 하기 위해서는 이것만으로도 매우 많은 포스팅이 이루어 져야 하겠지만
개발을 시작하는 입장에서 모든것을 알고 시작할 필요가 없기 때문에

필수로 봐야 할 부분만 추려서 설명해 본다.



1. 플랫폼 블럭 다이어그램



대부분의 새로운 플랫폼 설명 프리젠테이션에 빠지지 않는 부분이 해당 플랫폼의 블럭 다이어그램이다.

블럭 다이어그램을 꼭 보아야 하는 이유가 전반적인 플랫폼의 구조를 알 수 있기 때문이다.
이는 모바일이나 기타 개발뿐이 아니라 순수하게 윈도우프로그래밍 부분도 마찬가지이다.

윈도우 10 PC의 경우 기존의 윈도우 네이티브앱(레거시앱)과 윈도우 스토어 앱이 둘 다 실행가능하다.
UWP 플랫폼의 좌측에는 기존의 네이티브앱의 각각의 런타임 및 개발 플랫폼이 나와있고
UWP의 윗쪽에 위치한 부분들이 UWP프로그램의 플랫폼에 대해서 설명하고 있다.



2. 라이브 사이클


여느 모바일 플랫폼과 비슷한 라이프 사이클을 가집니다.



3. UI



마이크로 소프트가 WPF시절부터 밀고 있는 Xaml 형식의 View를 통해서 UI 를 작성할 수 있습니다.
마소가 밀고 있는 부분이 MVVM 패턴을 잘 알고 있다면 바로 이해 하실 수 있을 것입니다.
마소는 예전부터 MVC 패턴을 변형하여 데이터 바인딩이라는 개념을 적용하여 Model View ViewModel
패턴을 적용하여 UI 부분을 코드에서 분리하고자 하는 노력을 기울여 왔습니다.

이는 안드로이드에서도 XML 형식으로 UI 와 비즈니스 로직을 분리하고자 하였습니다.
이는 애플의 앱에서도 마찬가지 입니다. Xcode 의 경우는 스토리 보드 개념을 적용하여 조금 더 앞선 모습을 보여 줍니다.

과거에는 blend라는 툴을 통하여 디자이너로 하여금 UI 를 직접 개발 할 수 있도록 제공하였지만
이는 비쥬얼스튜디오 2015에 통합되었습니다.

 xaml 을 전혀 모르신다면 간단히 말해서 Html과 유사하다고 생각하시면 됩니다. 어짜피 마크업 랭귀지 이니까요... 대략 이걸 사용하신다고만 알고 계신면 됩니다.



제대로된 개발 입문을 하기 위해서는 microsoft에서 운영하는 Virtual Academy를 참고 하기를 추천합니다.

https://mva.microsoft.com/