2015년 8월 7일 금요일

c# Webbrowser Control에서 CSS 웹사이트 적용하기

회사에서 진행 중인 프로젝트에서 c# Application에서 Webbrowser Control을 사용하여 클라우드 서버와 연동하는 프로젝트를 진행하게 되었다.

c# 에서 기본 제공하는 Webbrowser Control은 기본이기도 하지만 사용하기도 편한 장점이 있지만
큰 단점이 하나 있는데 CSS style sheet 가 제대로 적용이 되지 않는다는 점이다.


왼쪽이 익스플로러 화면이며, 오른쪽이 Webbrowser Control을 이용한 테스트 프로그램이다.

예상하는 문제 원인으로는 아마도 해당 컨트롤이 IE7으로 인식 되기 때문인데 실제로 윈도우에 IE8이상이 설치되어 있다고 해도 무조건 IE7 엔진으로 구동되기 때문에 스타일 시트가 제대로 적용되지 않는 것 같다.

이에대한 대책으로 .net Wrapping 된 Webkit 엔진 라이브러리를 사용하였으나 또다른 문제가 발생하였는데. Flash나 HTML5가 완전히 구현되지 않았다는 점이다.

HTML5 Video 부분 스펙이 완전히 결정된지 얼마 되지 않았고. 대부분의 Wrapper library들이 마지막업데이트가 된지 제법 되었기 때문에 대응이 되지 않은 것으로 보인다.

늘 그렇듯이 구글검색을 통하면 왠만한 솔루션이 있기에 이를 해결하기 위한 방법을 찾아보자.



구글링으로 찾아보니 FEATURE_BROWSER_EMULATION 이라는 것을 설정해서 해당 응용프로그램의 Webbrowser를 이용하면 된다고 한다.

         public Form1()
        {
            SetBrowserFeatureControl();
            InitializeComponent();
        }
       
        private static void SetBrowserFeatureControl()
        {
            // http://msdn.microsoft.com/en-us/library/ee330720(v=vs.85).aspx
            // WebBrowser Feature Control settings are per-process
            var fileName = System.IO.Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName);
            // make the control is not running inside Visual Studio Designer
            if (String.Compare(fileName, "devenv.exe", true) == 0 || String.Compare(fileName, "XDesProc.exe", true) == 0)
                return;
            SetBrowserFeatureControlKey("FEATURE_BROWSER_EMULATION", fileName, GetBrowserEmulationMode());
        }

        private static void SetBrowserFeatureControlKey(string feature, string appName, uint value)
        {
            using (var key = Registry.CurrentUser.CreateSubKey(
                String.Concat(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\", feature),
                RegistryKeyPermissionCheck.ReadWriteSubTree))
            {
                key.SetValue(appName, (UInt32)value, RegistryValueKind.DWord);
            }
        }
        private static UInt32 GetBrowserEmulationMode()
        {
            int browserVersion = 7;
            using (var ieKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer",
                RegistryKeyPermissionCheck.ReadSubTree,
                System.Security.AccessControl.RegistryRights.QueryValues))
            {
                var version = ieKey.GetValue("svcVersion");
                if (null == version)
                {
                    version = ieKey.GetValue("Version");
                    if (null == version)
                        throw new ApplicationException("Microsoft Internet Explorer is required!");
                }
                int.TryParse(version.ToString().Split('.')[0], out browserVersion);
            }
            // Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10.
            UInt32 mode = 10000;
            switch (browserVersion)
            {
                case 7:
                    // Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control.
                    mode = 7000;
                    break;
                case 8:
                    // Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8
                    mode = 8000;
                    break;
                case 9:
                    // Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9.
                    mode = 9000;
                    break;
                default:
                    // use IE10 mode by default
                    break;
            }
            return mode;
        }


주요 코드를 복사해 보았다.

생성자에 보면 SetBrowserFeatureControl 메소드가 call 되는 것을 볼 수 있는데 이부분이
FEATURE_BROWSER_EMULATION  를 셋팅해주는 곳이다.

하나하나 소스코드를 따라 가면서 확인해 보면

현재 실행중인 프로세스 이름을 가져오는 부분이 있는데 이부분은 비쥬얼 스튜디오내에서 실행 중인 경우 , 즉 아마도 디자이너에서 보여질때 생성되기 때문에 예외처리인듯 하며.

그다음 줄인 아래에 기록한 메소드를 보자. 
SetBrowserFeatureControlKey("FEATURE_BROWSER_EMULATION", fileName, GetBrowserEmulationMode());

해당 메소드를 보면 우선 GetBrowserEmulationMode() 메소드에서 현재 브라우져의 버전을 알아오고 브라우져 버전에 맞는 에뮬레이션 모드값을 가져온다. 메소드 내용을 살펴보면 알겠지만
우선 레지스트리에서 svcVersion 이나 Version 값을 찾아서 해당 버전에 대응되는 모드값을 반환한다.

그 모드 값을 인자로 하여 이제 FEATURE_BROWSER_EMULATION을 셋팅하는데, 결국은 레지스트리에 기록하는 것이다.

SetBrowserFeatureControlKey() 메소드의 내용을 확인하면 아래의 레지스트리에
Software\Microsoft\Internet Explorer\Main\FeatureControl\

FEATURE_BROWSER_EMULATION 이라는 서브키를 생성하고 거기에 현재 실행중인 파일이름, 아까 구한 브라우져 모드값을 등록한다.

실제로 등록이 잘되는지 실행해서 확인해 보자.



레지스트리 에디터로 확인해 보니 현재 실행중인 프로그램으로 모드값이 기록되어있다.

이제 프로그램으로 적용이 되는지 확인해 보자.






이전과 다르게 정상적으로 렌더링이 된 것을 확인 할 수 있다.




pi2steam 개발 완료

Metro App 부분의 추가 삭제 구현을 제대로 해야 하는데, 퇴근 후 짬짬히 하려고 하다보니 귀찮아져서
적당히 대충 만들어서 마무리 했다.
등록 할 수 있는 게임은 총 6개 이고.. 이정도면 뭐 쓰는데는 지장이 없겠지 ㅋ

개발한 프로그램을 올려본다.

.net framework 4.0 이 설치 되어있어야 한다.




최초에 미등록된 타일을 클릭하면 추가할 게임 이름을 입력받고 등록되면 우측하단에 이름이 표기된다. 표기된 타일을 클릭하면 게임이 실행된다.




ssh 라이브러리 변경

sharpssh 를 사용해서 코드 작성하여 테스트 진행하니 ssh 커넥션에서 실패한다.

정확한 이유는 알수 없지만 ssh2 를 지원하지 않는 듯하다.

그래서 ssh.net 라이브러리를 사용하기로 하였다.


사이트에가서 dll 라이브러리를 다운받자.

프로젝트에 dll 파일을 레퍼런스에 추가하고

namespace를 추가해주자.





이제 접속하는 코드를 작성해 보자.

  public void StartSshStream(App app)
  {
    using (var ssh = new SshClient(m_Config.m_ConnectionSetup.RasberryIP, m_Config.m_ConnectionSetup.Account, m_Config.m_ConnectionSetup.Password))
   {
    ssh.Connect();
                string strCommand = string.Format("java -jar {0}/limelight.jar stream {1} -{2} -{3} -app {4}"
                    ,m_Config.m_ConnectionSetup.LimeLightPath
                    ,m_Config.m_ConnectionSetup.HostIP
                    ,m_Config.m_StreamOption.ScreenResolution.ToString().Replace("RES_","")
                    ,m_Config.m_StreamOption.ScreenFramerate.ToString().Replace("FPS_","") +"fps"
                    ,app.AppName);
                var cmd = ssh.CreateCommand(strCommand);   //  very long list
    var asynch = cmd.BeginExecute(delegate(IAsyncResult ar)
    {
     Console.WriteLine("Finished.");
    }, null);
    var reader = new StreamReader(cmd.OutputStream);
    while (!asynch.IsCompleted)
    {
     var result = reader.ReadToEnd();
     if (string.IsNullOrEmpty(result))
      continue;
     Console.Write(result);
    }
    cmd.EndExecute(asynch);
                ssh.Disconnect();
   }
        }

sshClient 객체를 생성해주고 생성자의 파라미터 값은 ip,id, password string 값을 사용하였다.
다른 생성자 코드는 chm 파일로 제공되는 api 도움말을 참고하자.

connect()로 연결하고 ssh Command를 생성해서 비동기로 실행한다.

동기 방식과 비동기 방식 두가지로 실행 할 수 있지만 Application이 뿌리는 로그나 텍스트를 Catch 해서 처리하기 위해서는 비동기 방식이 적절하다.

Command의 result가 해당 커맨트로 인해 뿌려주는 결과를 string 형식으로 뿌려준다.

streamreader를 하나 생성해서 cmd의 outputstream를 받아 read 할 수 있다.

Command가 종료되면 disconnect 를 해준다.

동일한 방식으로 실행 커맨드 코드와 PC와  pair하는 코드를 작성하였다.

이제 UI 부분의 앱 추가 삭제하는 로직만 작성하면 된다.




UI 화면 구성

Winform Metro ui 라이브러리를 이용하여 기본 UI 레이아웃을 구성하였다




게임 / 프로그램 목록 UI





연결 설정





화면 설정




내일은 sharpssh 를 이용하여 ssh 연결 하는 방법을 진행해 보자




개발용 라이브러리 선정

c# base 로 개발 할 예정이지만 ssh 통신을 위하여 별도의 라이브러리를 사용할 예정이다.

라이브러리는 sharpssh 이며 BSD 라이센스이므로 큰 제약 없이 개발에 사용 할 수 있을듯 하다.

어짜피 스팀 런처가 있기때문에 화려한 화면 구성은 필요하지 않기 때문에 윈폼 기반으로 간단하게 핵심 기능만 구현 할 예정이다. Winform Mordern UI Metro Framework 이라는게 있다고 하니 한번 사용해볼 예정이다.

아래 사이트에 가서 sharpssh의 바이너리 라이브러리 파일과 소스코드, 샘플 프로젝트 파일을 구할 수 있다.

그럼 모던 UI 라이브러리를 다운받아 보자.(이놈은 MIT 라이센스이다.)


git 서버에 가서 소스코드를 다운로드 받을 수 있다.

다운받은 소스를 visual studio로 열어보면 데모 프로젝트 까지 포함되어 있다.

빌드해 보니 처음 빌드 부터 오류가 있다.

기본 소스 부터 오타가 있는듯 하다.



따옴표 부터 수정했다.

수정후 빌드는 되지만 실행하려고 하면 또 다른 에러가 발생한다.
데모 프로젝트가 아닌 라이브러리단에서 에러가 난다. 이건 수정해야 된다.



win32 메세지를 잡아서 처리하는 핸들러 부분인데
windowbuttonlist에서 최대화 관련 버튼을 찾아서 보통때는 숫자1을 최대화 상태일때는 2를 표기하는거랜다. 이게 뭐하는데 필요한지 모르겠지만 그냥 버튼 표기되는 텍스트를 1로 표기하느냐 아니면 2로 하느냐 차이다.

windowsbuttonlist가 근데 null 이다. 뭐에 쓰는건진 모르겠지만 중요한건 아닌건 같으니, 버튼텍스트 안바꿔도 뭐 별거 있겠냐 싶어 주석 처리했다.



수정하고 나서 데모 프로젝트가 잘 실행된다.

이제 빌드된 라이브러리를 가지고 프로그램을 만들어보자.




라즈베리파이2 스팀 원클릭 접속용 프로트엔드 프로그램 개발

지난 포스트에서 라즈베리 파이2와 limelight 프로젝터를 이용하여 스팀 게임 실행을 진행해 보았다.

그러나 라즈베리 파이에서 xwindow 가 띄워져있다면 ssh를 사용하거나 x를 띄우지 않고 실행하여야 한다.

물론 처음 라즈베리가 부팅될때 스크립트에 포함 시킬 수도 있겠지만
그렇게 되면 전용으로 밖에 사용할 수 없고 호스트가 되는 피씨가 켜져 있지 않다면 또 문제가 있다.

그래서 간단하게 라즈베리 파이로 ssh 접속하여 미리 설정해둔 명령어를 실행하여
프로그램을 실행하는 간단한 프로그램을 하나 만들어 보려한다.

라즈베리 파이의 IP와 계정아이디 비밀번호 게임이름, 그리고 화면 설정값을 별도의 설정창에서
지정해 두고 게임별로 리스트로 관리하여 버튼 원클릭으로 미리 설정해둔 게임을 실행 하도록
만들어보자.

만들기 전에 만들고자 하는 핵심적인 요구 사항에 대해서 정리하자.



요구사항
1. 라즈베리 파이의 ip와 계정명 비밀번호는 별도로 설정하여 저장하고 한번 설정하면 추가 입력하지 않도록 한다.

2. 각 게임별로 설정 리스트를 만들어 원하는 게임을 각각 클릭하여 원하는 게임을 실행 할 수 있고 사용자는 해당 게임별 리스트를 삭제 또는 추가 할 수 있다.

3. 화면 설정 부분은 해상도와 fps 등 각종 설정을 미리 저장하여 별도로 입력 하지 않도록 한다.




windows 10 IoT Core App 개발 환경 구축

windows 10 IoT Core App을 개발하기 위해서는 visual studio 2015 버전이 필요합니다.

아래 사이트의 안내에 따라 설치를 진행합니다.


우선 VisualStudio 2015 RC 버전을 위 사이트를 통해서 다운로드 및 설치 합니다.

설치 완료 후

아래의 사이트에 가서 맨아래까지 스크롤을 하면  Other Downloads 라는 항목이 있습니다.



해당 항목중 2가지를 다운로드하여 설치 합니다.

설치가 끝나면
이전 포스트에서 다운로드 받은 라즈베리파이 이미지 압축파일에 있던
zip 파일안의 msi 파일을 설치합니다.

라즈베리파이를 랜에 물리고, 개발할 PC와 같은 네트워크 내에 물립니다.
(공유기나 같은 내부네트워크에 연결합니다.)

설치가 끝나면 라즈베라파이용 Windows 10 Iot Core App 개발을 위한 환경 설정이 끝납니다.

다음 포스팅은 설치한 Visual studio를 통해 앱 개발을 진행합니다.




windows 10 IoT Core for pi2 설치하기

pi2 판매시 부터 홍보하던 windows 10 pre-release 버전이 공개되었다.

Microsoft Connect를 통해 공개 테스트 하고 있는 이 버전을 다운로드 받아 실행해보자.

마이크로소프트는 아래와 같이 Step by Step 설명서를 제공한다.


위 사이트 내용을 따라 하나하나 진행하여 보자.


설치전 필수 사항
1.Windows 10 Insider Preview - Virtual Machine 이 아닌 진짜 물리적으로 설치 필요
2.라즈베리파이2
3. 5v micro usb 전원 : 적어도 1A이상 전류 공급 가능하여야함
4. 8기가이상 sd카드 - class10 이상
5. HDMI 케이블 (화면 볼라면)
6. RJ45 인터넷 케이블


SD카드에 windows10 IoT Core Insider Pre-Release 버전 넣기
윈도우10 빌드버전 10069 이상이 설치되어있어야 합니다.

마이크로소프트의 베타 릴리즈는 Microsoft Connect를 통해서 이루어집니다.

위 사이트에 접속하여 사이트에 로그인하고 (기존 마이크로소프트 계정 , 핫메일이라던지..)

windows embedded pre-release program을 찾아서 참여를 합니다.
EULA를 잘 읽어 보시고 동의하여 참여합니다.

다운로드 메뉴를 통하여 pi2 버전을 다운로드 합니다.





5월 30일 기준 가장 최근 날짜 이미지를 다운로드 합니다.

다운받은 Windows_IoT_Core_RPI2_BUILD.zip 파일의 압축을 풀고
Flash.ffu 파일을 접근하기 편한 폴더로 복사합니다.

sd카드를 sd카드 리더기에 넣고 PC에 연결합니다.

관리자 권한으로 CommandPrompt를 실행합니다.



diskpart를 입력하고 list disk 를 입력하여 sd카드 의 디스크 이름 (숫자)를 확인합니다.
exit를 눌러 diskpart를 종료합니다.

flash.ffu파일을 복사한 경로로 폴더를 이동하고 아래 명령어를 입력합니다.
N부분은 위에서 확인한 디스크의 번호로 변경합니다.

dism.exe /Apply-Image /ImageFile:flash.ffu /ApplyDrive:\\.\PhysicalDriveN /SkipPlatformCheck




SD카드 이미지가 만들어졌습니다.


라즈베리파이에 sd 카드를 넣고 hdmi케이블을 연결하고, 랜선을 연결하고 전원을 연결합니다.

처음 실행시 몇분 정도가 소요됩니다.

조금 더 기다리면 설치되어있는 기본앱이 실행됩니다.




이제 설치된 기본 앱과 같은 앱을 VisualStudio를 통해서 개발하여 배포할 수 있습니다.




테스트앱 개발은 다음 포스팅에서 이어집니다. 





라즈베리파이로 스팀 게임하기

인터넷 검색 중 라즈베리 파이2를 이용하여 엔비디아 쉴드 게임 스트리밍 서비스를 이용한
게임 스트리밍이 가능하다고 하여 테스트 진행하였다.
상세 방법은 아래 동영상을 참고 한다.

호환되는 그래픽 카드는 지포스 600 시리즈 이후 부터 지원되며, 660M 인가 670M 부터 지원된다.
비공식 꼼수로 650M도 되긴한다.(650M은 고해상도시 좀 느리기 때문에 출력 해상도는 720p 정도로 낮추면 할만하다.)

원래는 NVIDIA 쉴드 태블릿 용으로 만든것이지만 벌써 오픈소스 진영에서 호환 프로그램이 나와서
다운받아 구동하기만 하면 스트리밍을 통해 게임을 할 수 있다.

일단 라즈베리 파이2는 데비안이 설치된 상태여야 한다.

직접 키보드 마우스 연결하고 파이2에서 직접 진행 할 수도 있지만 링크 복사 붙여넣기는 SSH 로 하는게 더 편하다.    직접하면 x- window 가 실행중에는 실행이 불가능하다고 에러 메세지가 뜬다.


위의 사이트에 가서 libopus.so 파일과 limelight.jar 파일의 링크를 복사한다.



wget http://다운받을 파일 인터넷 URL
을 타이핑 하면 직접 라즈베리 파이에서 직접 다운받을 수 있다.

so 파일과 jar 파일 둘 다 다운로드 한다.



다운받은 파일을 아래 명령을 입력하여 스트리밍을 할 메인 피씨와 페어링 시킨다.

java -jar limelight.jar pair 호스트피씨아이피

위 명령을 입력하면 핀번호가 뜨는데 호스트 피씨에서 핀번호 입력 창이 팝업되면 입력해 준다.



페어링이 완료되었다고 메세지가 나오면

게임을 실행해 보자



호스트 피씨에 게임을 자동 검색하면 설치된 게임 목록이 나오는데 이 목록에 등록된 게임을 라즈베리에서 실행 할 수 있다.

본인은 Bioshock Infinite 를 실행하여보았다.

java -jar limelight.jar stream 호스트아이피  -1080 -30fps -app 게임이름

-1080은 해상도이므로 720p로 구동하려면 -720으로 수정한다.

등록된 게임 이름중에 띄어쓰기가 포함되어 있다면
게임이름에 따옴표를 앞뒤에 붙여준다

예를 들면
-app 'Bioshock Infinite'

이렇게 입력하면 된다.



입력하면 화면에 메인피씨의 게임화면이 스트리밍으로 나타난다.

720p에 30fps 기준으로 구동상 렉이 느껴지지 않고 빠르게 동작한다.

엔비디아 프로그램에 게임 자동 검색 말고 사용자가 직접 프로그램도 등록 할 수 있는데
굳이 게임이 아니더라도 지정하면 원격 접속 처럼도 사용가능하다.

스팀 계정이 있다면 스팀을 등록하여 Big Picture 모드로 실행하면 게임 콘솔 처럼 사용 할 수 있다.




I2C 테스트

이번에는 I2C 통신을 이용한 LSM303DLHC 센서 데이터 Read 예제이다.
중력가속도센서와 마그네틱 센서라고한다.

어짜피 Raspberry Pi용 소스 가지고 2버전에서 되는지 확인하는 수준이지만
소스 잘 살펴보면 다른 센서나 IC에서도 사용하기에 무리가 없으리라.

메인 Processor 말고는 변한게 없으니 당연히 잘되겠지만 그래도 확인은 해야하니
한번 해보자.

bcm2835.c와 bcm2835.h 파일을 해당 폴더로 복사하자.
물론 1.39버전 것을 사용하여야 한다.

이것도 역시 LSM303.c 파일의 Header 파일 경로를 따옴표로하여 수정하여준다.



그리고나서 make

그리고 실행
sudo ./LSM303



A가 붙은 값은 가속도이고 M이 붙은값은 마그네틱이다.

역시 I2C 설정법은 첨부한 소스파일을 참고하면된다.

그말인 즉 라즈베리파이1 의 라이브러리인 bcm2835 라이브러리만 최신버전으로 교체하면
기존 소스가 정삭적으로 동작한다는 말이다.




특별할것은 없지만 그래도 돈주고 산 악세사리인데 테스트는 해봐야 하지 않겠는가?




SPI 테스트

구매한 악세사리 보드 테스트용 모듈을 구동하여보았다.

기타 추가적인 라이브러리는 bcm2835.c  bcm2835.h
파일이 필요하다.

해당 파일은 지난번 포스팅때 올린 bcm2836 으로 활용가능한 bcm2835 라이브러리1.39버전을 다운로드 받아 압축 해제하면 src 폴더에 있다.

해당 파일을 Linux에서 도스의 Path 걸어주는거 같은게 있는데 그걸 해주거나
아니면 무식하게 같은폴더에 복사해서 써도된다.

리눅스 쓴지가 오래되어 가물가물하여 복사해서 진행하였다.

같은 폴더로 복사할 경우 아래 항목을 수정하여 준다.



같은 폴더내 reference할때 이렇게 따옴표로 수정한다.

그리고 make를 하여 기본 코드를 컴파일한다.

원래는 L3G4200D 데이터 시트보고 SPI 셋팅해주고 테스트 코드 작성해야 하지만
기본으로 있으니까 굳이 작성할 필요는 없겠다.

셋팅하는 부분 참고하는 분들을 위해 해당 소스 파일 첨부하니 설정 부분을 참고하면 된다.

ST에서 만든  자이로센서? 같은IC 인가보다 . Angular rate Sensor 란다. X , Y , Z 값이 출력되고 해당 보드를 기울이면 값이 바뀐다. 해당 좌표데이터를 SPI로 Read 할 수 있는 기본 예제이다.



다른 SPI IC 를 사용한다면 수정해야 겠지만 가진게 이것 뿐이니 데이터시트 보고 삽질은 할 필요가 없다.





악세사리 세트 구입

간단한 센서 모듈은 저렴한 가격에 가능하지만 집에서 작업하기에는 인두기부터 커넥터 등 가지고 있는게 없다 ㅡ,.ㅡ;

이것 저것 테스트하다가 살림 다 차리기보다 그냥 악세사리 세트 사는게 낫다 싶어 그냥 구입했다.

waveshare 라고 써있는 악세사리 세트인데 아마 중국산 인것 같은데 3.5인치 터치 LCD를 포함하여 IR 센서와 리모콘 까지 들어있다. I2C 테스트 보드랑 SPI ,  기타 GPIO (부져,조이스틱, IR(1wire)) 등이 있는거 같다.

원래 이 악세사리는 B+ 용인데 IO 핀 규격이 동일하니 그다지 테스트하기 무리가 있을것 같진 않지만
LCD 드라이버 쪽만 좀 확인하면 될 듯하다. 어짜피 해당 모듈 관련 소스는 제공하기 때문에
기본 제공 raspbian 이미지 사용 못하는것만 제외하면 사용에 지장이 없을 것 같다.






bcm2836 라이브러리 설치

라즈베리 파이 1 의 메인 AP는 broadcom 사의 bcm2835가 사용되었다.
파이2 버전에서는 bcm2836 (cortex a7 quard)가 사용되었으므로
해당 라이브러리를 다운받자

기존의 라이브러리 제공 사이트에서 제공하는 최신버전인 1.39버전부터는 bcm2836을 지원한다.

아래 링크를 통해서 설치 할 수 있다.


ssh를 통해서 터미널로 접근 및 설치 해보도록 한다.


1. ssh 접속

2. wget을 통한 다운로드



3. 압축 해제


4. 설치
cd bcm2835-1.39
./configure
make
sudo make check
sudo make install





라즈베리파이를 제어하기 위한 기본 라이브러리가 설치되었으므로 간단한 센서를 제어하는 코드를 작성해 보자