<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
		<id>http://lhdangerous.godohosting.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Doguin</id>
		<title>도구의인간 메이커스 위키 - 사용자 기여 [ko]</title>
		<link rel="self" type="application/atom+xml" href="http://lhdangerous.godohosting.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Doguin"/>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/Doguin"/>
		<updated>2026-04-18T07:01:40Z</updated>
		<subtitle>사용자 기여</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Google_API_python_client_%EC%82%AC%EC%9A%A9%EB%B2%95-simple&amp;diff=265</id>
		<title>Google API python client 사용법-simple</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Google_API_python_client_%EC%82%AC%EC%9A%A9%EB%B2%95-simple&amp;diff=265"/>
				<updated>2019-10-09T14:32:26Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Python Google&lt;br /&gt;
 API 사용하기&lt;br /&gt;
라즈베리파이에서 gmail등의 구글 서비스를 확인하고 조작 할 수 있는 python 코드 사용법. 구글의 표준  api를 사용한다. 이하에서는 Gmail과 Google calendar 를 예로 사용한다.&lt;br /&gt;
참고: https://developers.google.com/gmail/api/quickstart/python&lt;br /&gt;
&lt;br /&gt;
## Google OAuth2.0 을 통한 인증&lt;br /&gt;
참고:&lt;br /&gt;
* 구글 공식 개념설명: https://developers.google.com/identity/protocols/OAuth2&lt;br /&gt;
* 구글 샘플: https://developers.google.com/gmail/api/quickstart/python&lt;br /&gt;
* 라이브러리 도큐먼트: https://google-auth-oauthlib.readthedocs.io/en/latest/reference/google_auth_oauthlib.flow.html&lt;br /&gt;
&lt;br /&gt;
gmail 데이터를 사용하는 웹 서비스나 어플리케이션, 혹은 기기를 만든다고 하면, 신뢰와 관련한 2가지 문제가 발생한다.&lt;br /&gt;
1. 이 사용자가 정말 본인인가?&lt;br /&gt;
2. 이 어플이 어디까지 민감한 정보를 다루도록 허용할 것인가?&lt;br /&gt;
&lt;br /&gt;
1번 문제를 authentication의 문제라고하고, 두번째의 문제를 authorization의 문제라고 한다.&lt;br /&gt;
개인개발자가 해결하기에는 어려운 두가지 문제를 구글이라는 능력자에게 위탁해버리는 해결책이  OAuth2.0 이라는 프로토콜이다.&lt;br /&gt;
&lt;br /&gt;
간단히 요약하자면, 구글의 인증을 받은 프로젝트(구글인증서버에 대해 클라이언트)는 클라이언트 인증정보(Oauth2.0 client ID, Pass 등) 을 발급받아 가지고 있다가  Gmail 데이터가 필요한 순간에 사용자가 직접 어플에 구글 아이디를 입력하는 대신 구글의 로그인 창(consent screen)을 띄워주고, 구글측에서 사용자가 확인되면 사용자에게 '이러이러한 앱에서 너의  gmail 데이터에 접근하도록 허락할래?'라고 물어본 후, 허락들 받으면 어플에 gmil api에 리퀘스트를 보낼때 꼭 필요한 Access Token을 발급해주는 절차이다.&lt;br /&gt;
&lt;br /&gt;
  ![||600](https://cl.ly/333ddb/Screen%20Recording%202019-08-07%20at%2012.55%20PM-Animated%20Image%20(Small).gif)&lt;br /&gt;
&lt;br /&gt;
Oauth2.0의 개념에 대한 설명은 다양한 자료에서 다루고 있으므로 참고하도록 하고, 여기서는 Raspberry pi 상에서  Gmail 정보를 가져오은 python 스크립트를 구현하기 위한 실제적인 내용들만 확인하자.&lt;br /&gt;
&lt;br /&gt;
### 1. google cloud platform 가입&lt;br /&gt;
gmail api 는 구글 클라우드 플랫폼이라는 서비스의 일부이다. 먼저 구글 계정을 만들어 google cloud platform에 가입하고 프로젝트를 새로 생성한다.&lt;br /&gt;
http://www.google.com/cloud&lt;br /&gt;
기존의  gmail 계정을 사용해도 되며, 무료로 가입해도 대부분의 기본 기능을 마음껏 사용할 수 있다.(신용카드 등록을 해도 결제가 되지는 않는다. 신용카드 등록하지 않고 창을 닫아도 작동되는 듯 하다.)&lt;br /&gt;
&lt;br /&gt;
### 2. 새 프로젝트 생성&lt;br /&gt;
구글 클라우드 플랫폼 콘솔화면에서 새로운 프로젝트를 생성한다.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/ab0ad7/Image%202019-08-05%20at%205.45.31%20PM.png)&lt;br /&gt;
Gmail-test라고 이름지었다.&lt;br /&gt;
&lt;br /&gt;
### 3. Gmail API 켜기&lt;br /&gt;
API 및 서비스 &amp;gt; 대시보드 ( https://console.developers.google.com/apis )에서 Gamil api를 Enabled 시켜준다.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/a8753e/Image%202019-08-05%20at%205.49.35%20PM.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/3e7ee6/Image%202019-08-05%20at%205.59.36%20PM.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/24249b/Image%202019-08-05%20at%206.04.18%20PM.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/2017ec/Image%202019-08-02%20at%206.40.18%20PM.png)&lt;br /&gt;
&lt;br /&gt;
### 4. 인증정보 (OAuth Client ID, PASS) 생성&lt;br /&gt;
&amp;quot;이 프로그램은 너의 구글 계정에서 이러이러한 개인정보를 가져다가 쓸거야. 허용할래?&amp;quot; 라고 물어보는 화면을 consent screen이라고 한다. 메뉴 &amp;gt; APIs &amp;amp; Services &amp;gt; 사용자 인증정보 에서 인증 정보를 만든다. 3가지 방식 중 고를 수 있도록 되어있는데, 어떤 방식을 골라야 할지 잘 모른다면 마지막의 '사용자 인증정보 선택 도움말'을 활용한다. 우리는 OAuth 클라이언트 ID를 선택.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/9cd427/Image%202019-08-05%20at%206.23.17%20PM.png)&lt;br /&gt;
동의 화면 (구글 로그인창) 구성&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/1c08c7/Image%202019-08-05%20at%206.28.06%20PM.png)&lt;br /&gt;
프로젝트 이름, 로고, 문의사항 보낼 수 있는 지원 이메일 등등 넣을 수 있다.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/9f43dd/Image%202019-08-05%20at%206.32.38%20PM.png)&lt;br /&gt;
만들고 있는 프로젝트 유형에 따라 애플리케이션 유형을 선택한다.&lt;br /&gt;
우리는 raspberry pi 의 cli 환경에서 사용할 예정이므로 구글에서 제공하는 동의화면을 바로 디바이스에 띄울 수가 없고, 제3의 디바이스를 통해 접근토록 해야한다.&lt;br /&gt;
이런경우 반드시 **'기타'** 를 선택한다.&lt;br /&gt;
'OAuth 클라이언트 이름'은 프로젝트명과는 별개로, 나는 gmail_test라고 지었다.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/4b1766/Image%202019-08-05%20at%206.35.38%20PM.png)&lt;br /&gt;
인증정보 생성 완료!&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/4e7818/Image%202019-08-05%20at%206.36.31%20PM.png)&lt;br /&gt;
&lt;br /&gt;
인증정보 (credentials)를 다운로드 해 두면 번거롭게 한자씩 타이핑해 넣지 않아도 되므로 편하다.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/6972be/Image%202019-08-05%20at%206.37.49%20PM.png)&lt;br /&gt;
다운받은  .json 파일은 실행시킬 파이선 코드와 같은 위치에 넣어둔다.&lt;br /&gt;
&lt;br /&gt;
### 2. Google Client Library 를 설치한다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
$pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib&lt;br /&gt;
```&lt;br /&gt;
* [x] 라즈베리에서 설치하려니  sudo 권한이 필요한데, 확인 필요하다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### 3. Gmail api 공식 샘플 코드를 실행시켜 잘 작동하는지 확인&lt;br /&gt;
참고: https://developers.google.com/gmail/api/quickstart/python&lt;br /&gt;
* 27행의 'credentials.json' 은 앞서 받아둔 클라이언트 인증 정보파일로 파일명 바꾼다.&lt;br /&gt;
&lt;br /&gt;
* 우리는 라즈베리파이의 콘솔환경에서 실행시키고 있으므로, consent screen을 디바이스에 바로 띄울 수 없다. 제3의 디바이스에서 브라우저를 열고 consent screen 을 찾아가서 확인 코드를 받고 콘솔 창에 입력하는 방식으로 해야하는데, 이를 위해서는 28행의 'flow.run_local_server(port=0)' 은 'flow.run_console()'로 교체되어야 한다.  &lt;br /&gt;
참고: https://google-auth-oauthlib.readthedocs.io/en/latest/reference/google_auth_oauthlib.flow.html&lt;br /&gt;
&lt;br /&gt;
* 예제는 gmail에서 데이터를 읽어오는 것까지만 권한 요청한다. 만일 프로젝트에서 필요로하는 권한의 범위가 달라진다면 행8의  SCOPES = [...]를 수정, 혹은 추가 해야 한다.   &lt;br /&gt;
참고: https://developers.google.com/gmail/api/auth/scopes&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
# gmail-test.py&lt;br /&gt;
# raspberry pi 콘솔용.  gmail label 목록을 불러온다.&lt;br /&gt;
&lt;br /&gt;
import pickle&lt;br /&gt;
import os.path&lt;br /&gt;
from googleapiclient.discovery import build&lt;br /&gt;
from google_auth_oauthlib.flow import InstalledAppFlow&lt;br /&gt;
from google.auth.transport.requests import Request&lt;br /&gt;
&lt;br /&gt;
# If modifying these scopes, delete the file token.pickle.&lt;br /&gt;
SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Shows basic usage of the Gmail API.&lt;br /&gt;
    Lists the user's Gmail labels.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    creds = None&lt;br /&gt;
    # The file token.pickle stores the user's access and refresh tokens, and is&lt;br /&gt;
    # created automatically when the authorization flow completes for the first&lt;br /&gt;
    # time.&lt;br /&gt;
    if os.path.exists('token.pickle'):&lt;br /&gt;
        with open('token.pickle', 'rb') as token:&lt;br /&gt;
            creds = pickle.load(token)&lt;br /&gt;
    # If there are no (valid) credentials available, let the user log in.&lt;br /&gt;
    if not creds or not creds.valid:&lt;br /&gt;
        if creds and creds.expired and creds.refresh_token:&lt;br /&gt;
            creds.refresh(Request())&lt;br /&gt;
        else:&lt;br /&gt;
            flow = InstalledAppFlow.from_client_secrets_file(&lt;br /&gt;
                'client_secret_497460368822-l2vljgso619t68g4nnfbej5i9kel4767.apps.googleusercontent.com.json', SCOPES)&lt;br /&gt;
            creds = flow.run_console()&lt;br /&gt;
            print(creds)&lt;br /&gt;
        # Save the credentials for the next run&lt;br /&gt;
        with open('token.pickle', 'wb') as token:&lt;br /&gt;
            pickle.dump(creds, token)&lt;br /&gt;
&lt;br /&gt;
    service = build('gmail', 'v1', credentials=creds)&lt;br /&gt;
&lt;br /&gt;
    # Call the Gmail API&lt;br /&gt;
    results = service.users().labels().list(userId='me').execute()&lt;br /&gt;
    labels = results.get('labels', [])&lt;br /&gt;
&lt;br /&gt;
    if not labels:&lt;br /&gt;
        print('No labels found.')&lt;br /&gt;
    else:&lt;br /&gt;
        print('Labels:')&lt;br /&gt;
        for label in labels:&lt;br /&gt;
            print(label['name'])&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;![||600]( https://cl.ly/8829db/Screen%20Recording%202019-08-07%20at%2003.23%20PM-Animated%20Image%20(Large).gif )&lt;br /&gt;
&lt;br /&gt;
## Google api python library 사용법&lt;br /&gt;
구글 공식 문서: https://github.com/googleapis/google-api-python-client/blob/master/docs/start.md#building-and-calling-a-service  &lt;br /&gt;
google python 라이브러리가 지원하는 모든 google api 리스트와 사용법 reference: https://github.com/googleapis/google-api-python-client/blob/c977304a1af233058f572787538edafc2ef122e6/docs/dyn/index.md&lt;br /&gt;
&lt;br /&gt;
구글의 모든 서비스 api는 비슷한 구조를 가지고 있다. gmail도 마찬가지.&lt;br /&gt;
### 1. 구글 서비스 객체 만들기&lt;br /&gt;
* apiclient.discovery.build()사용해 서비스 객체 만든다.  &lt;br /&gt;
* 어떤 서비스 api를 사용할 것인지,  api버전은 어느 것 사용하는지, [link](https://github.com/googleapis/google-api-python-client/blob/c977304a1af233058f572787538edafc2ef122e6/docs/dyn/index.md) 중에서 선택한다.  &lt;br /&gt;
* 앞서 획득한 access token도 이때 전달한다.&lt;br /&gt;
```python&lt;br /&gt;
from apiclient.discovery import build&lt;br /&gt;
service = build('api_name', 'api_version', credencials='아까얻은 AcessToken')&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 2. collection&lt;br /&gt;
구글 서비스의 모든 데이터는 계층적인 집합을 이루고 있는데, 이 한 단위의 계층을 collection이라고 부른다.&lt;br /&gt;
gmail 같으면 user 콜렉션 아래에는 여러개의 message 콜렉션이 있고, 그 아래에는.... 하는 식이다.&lt;br /&gt;
이들 콜렉션에 아래와 같이 접근할 수 있다.&lt;br /&gt;
```python&lt;br /&gt;
collection = service.users().messages()&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 3. request and response&lt;br /&gt;
어떤 특정한 collection에 대해 구글에 요청할 수 있는 명령어는 콜렉션마다 다 다르다. [이곳](https://developers.google.com/gmail/api/v1/reference/) 에서 검색 할 수 있다.&lt;br /&gt;
gmail의 message 콜렉션이 list()명령을 가지고 있다면,&lt;br /&gt;
```python&lt;br /&gt;
request = service.users().messages().list(userId='me')&lt;br /&gt;
```&lt;br /&gt;
실제 request를 구글 api 서버에 보내고 응답을 받아오는 건  execute() 함수를 사용.&lt;br /&gt;
```python&lt;br /&gt;
response = request.execute()&lt;br /&gt;
# or&lt;br /&gt;
response = servie.users().mesages().list(userId='me').execute()&lt;br /&gt;
```&lt;br /&gt;
* 구글로부터의 답장은 원래는  JSON형식으로 온다. 그렇지만 우리가 사용하는 python api가 자동으로 사용하기 쉽게  python 데이터 타입(dict)로 바꾸어주기 때문에 get()함수로 원하는 항목을 쉽게 뽑아 쓸 수 있다.&lt;br /&gt;
&lt;br /&gt;
## 구글 캘린더 예제&lt;br /&gt;
구글 캘린더 api소개자료의 가장 기본 예제.  &lt;br /&gt;
참고: https://developers.google.com/calendar/quickstart/python&lt;br /&gt;
```python&lt;br /&gt;
# quickstart.py&lt;br /&gt;
# 사용자의 기본캘린더 (primary)에서&lt;br /&gt;
# 지금이후(timeMin=now)로 시작하는&lt;br /&gt;
# 10개의 이벤트(maxResult-10)를 가져와 표시하기&lt;br /&gt;
&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
import datetime&lt;br /&gt;
import pickle&lt;br /&gt;
import os.path&lt;br /&gt;
from googleapiclient.discovery import build&lt;br /&gt;
from google_auth_oauthlib.flow import InstalledAppFlow&lt;br /&gt;
from google.auth.transport.requests import Request&lt;br /&gt;
&lt;br /&gt;
# If modifying these scopes, delete the file token.pickle.&lt;br /&gt;
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Shows basic usage of the Google Calendar API.&lt;br /&gt;
    Prints the start and name of the next 10 events on the user's calendar.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    creds = None&lt;br /&gt;
    # The file token.pickle stores the user's access and refresh tokens, and is&lt;br /&gt;
    # created automatically when the authorization flow completes for the first&lt;br /&gt;
    # time.&lt;br /&gt;
    if os.path.exists('token.pickle'):&lt;br /&gt;
        with open('token.pickle', 'rb') as token:&lt;br /&gt;
            creds = pickle.load(token)&lt;br /&gt;
    # If there are no (valid) credentials available, let the user log in.&lt;br /&gt;
    if not creds or not creds.valid:&lt;br /&gt;
        if creds and creds.expired and creds.refresh_token:&lt;br /&gt;
            creds.refresh(Request())&lt;br /&gt;
        else:&lt;br /&gt;
            flow = InstalledAppFlow.from_client_secrets_file(&lt;br /&gt;
                'credentials.json', SCOPES)&lt;br /&gt;
            creds = flow.run_local_server(port=0)&lt;br /&gt;
        # Save the credentials for the next run&lt;br /&gt;
        with open('token.pickle', 'wb') as token:&lt;br /&gt;
            pickle.dump(creds, token)&lt;br /&gt;
&lt;br /&gt;
    service = build('calendar', 'v3', credentials=creds)&lt;br /&gt;
&lt;br /&gt;
    # Call the Calendar API&lt;br /&gt;
    now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time&lt;br /&gt;
    print('Getting the upcoming 10 events')&lt;br /&gt;
    events_result = service.events().list(calendarId='primary', timeMin=now,&lt;br /&gt;
                                        maxResults=10, singleEvents=True,&lt;br /&gt;
                                        orderBy='startTime').execute()&lt;br /&gt;
    events = events_result.get('items', [])&lt;br /&gt;
&lt;br /&gt;
    if not events:&lt;br /&gt;
        print('No upcoming events found.')&lt;br /&gt;
    for event in events:&lt;br /&gt;
        start = event['start'].get('dateTime', event['start'].get('date'))&lt;br /&gt;
        print(start, event['summary'])&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    main()&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## json module  for python&lt;br /&gt;
참고: https://www.w3schools.com/python/python_json.asp  &lt;br /&gt;
&lt;br /&gt;
Json 데이터를 다루어야 하는 경우, 파이썬에 기본 포함 되어있는 json모듈을 사용하면 JSON 파일/string을 파이썬  dictionary 나  list 로 만들어 사용할 수 있어 편리하다. 더우기 indent=  아규먼트를 사용하면 print() 로 표시할 때 줄 맞추어 주므로 보기에도 편하다.&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
import json&lt;br /&gt;
...&lt;br /&gt;
print json.dumps(response, sort_keys=True, indent=4)&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
For example, if the printed JSON is the following:&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;count&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;cents&amp;quot;: 5,&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;#586 1923-26 5-cent blue Theodore Roosevelt MLH perf 10&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;cents&amp;quot;: 5,&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;#628 1926 5-cent Ericsson Memorial MLH&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
# You can access the data like this:&lt;br /&gt;
print 'Num 5 cent stamps: %d' % response['count']&lt;br /&gt;
print 'First stamp name: %s' % response['items'][0]['name']&lt;br /&gt;
```&lt;br /&gt;
|method|용도 |&lt;br /&gt;
|-|-|&lt;br /&gt;
|json.load(json) / json.load**s**(json_string)|JSON 파일을 python dictionary 로 바꾸어 읽어들임 / json 문자열을 파이썬 데이타로 변환 |&lt;br /&gt;
|json.dump(puthon_object) / json.dump**s**(python_object)|python 데이터를 JSON으로 바꾸어 파일로 저장/ python 데이터를 json 형식 문자열로 변환.  &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;   parameter: sort_keys=(True/False), &amp;lt;br&amp;gt; parameter: indent= 들여쓰기칸수|&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Python_http_requests_module&amp;diff=264</id>
		<title>Python http requests module</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Python_http_requests_module&amp;diff=264"/>
				<updated>2019-09-15T05:30:13Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서: # HTTP request in Python : requests module python의 requests 모듈을 사용해  REST 프로토콜을 쉽게 다룰 수 있다. 너무 널리사용되는, 사실상의 파이선 내...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# HTTP request in Python : requests module&lt;br /&gt;
python의 requests 모듈을 사용해  REST 프로토콜을 쉽게 다룰 수 있다. 너무 널리사용되는, 사실상의 파이선 내장모듈이라고 볼 수 있다.&lt;br /&gt;
참고: https://realpython.com/api-integration-in-python/&lt;br /&gt;
공식문서: https://2.python-requests.org/en/master/  &lt;br /&gt;
&lt;br /&gt;
## 설치&lt;br /&gt;
```bash&lt;br /&gt;
$ pip install requests&lt;br /&gt;
```&lt;br /&gt;
* 아마도 대부분의 경우 기본으로 설치되어있음&lt;br /&gt;
&lt;br /&gt;
## 기본 사용법&lt;br /&gt;
### basic get&lt;br /&gt;
get(), post(), put() 메소드를 가지고 있고 서버의 응답이 이들 메소드의 리턴이 된다. 심플하다.&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
URL = ''https://todolist.example.com/tasks/''&lt;br /&gt;
resp = requests.get(URL)&lt;br /&gt;
if resp.status_code == 200: # OK&lt;br /&gt;
  for item in resp.json():&lt;br /&gt;
    print(item)&lt;br /&gt;
else :  # something wrong&lt;br /&gt;
  raise ApiError(resp.status_code)&lt;br /&gt;
```&lt;br /&gt;
* resp.json()의 리턴은 파이썬 오브젝트다 일반 딕셔너리나 리스트처럼 간편하게 다룰 수 있다.&lt;br /&gt;
* raw data를 그대로 보려면  'resp.text' 프로퍼티를 사용하면 된다.&lt;br /&gt;
&lt;br /&gt;
### parameter  전달&lt;br /&gt;
get() 메소드에 'params=' 아규먼트를 추가해 보낸다&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
params = {'key':'value'}&lt;br /&gt;
res = requests.get('http://www.tistoty.com', params=params)&lt;br /&gt;
print(res.url)&lt;br /&gt;
# http:./www.tistody.com/?key=value&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### header 전달&lt;br /&gt;
get(), post() 메소드에 'headers=' 아규먼트를 추가해 보낸다.&lt;br /&gt;
&lt;br /&gt;
### data 전달&lt;br /&gt;
post() 메소드에 'data=' 아규먼트를 추가해 보낸다.&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
body = {&amp;quot;key1&amp;quot;: &amp;quot;value1&amp;quot;, &amp;quot;key2&amp;quot;: &amp;quot;value2&amp;quot; }&lt;br /&gt;
resp = requests.post(URL,&lt;br /&gt;
                     data=json.dumps(body),&lt;br /&gt;
                     headers={'Content-Type':'application/json'},&lt;br /&gt;
                     )&lt;br /&gt;
```&lt;br /&gt;
혹은 'data=' 대신에 'json='아규먼트를 사용하면 requests가 알아서 딕셔너리를 json으로 바꾸어준다. 아래 예는 위 코드와 동일하다.&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
resp = requests.post(URL,json=body)&lt;br /&gt;
```&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=GPS_module_neo-6m&amp;diff=263</id>
		<title>GPS module neo-6m</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=GPS_module_neo-6m&amp;diff=263"/>
				<updated>2019-09-15T04:37:56Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서: # GPS + raspberry pi  ## gps module Neo-6m gps 모듈을 사용한다. 대부분의 gps 모듈이 serial UART 통신을 사용한다. 참고자료가 많은 쪽이 좋으므로  시...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# GPS + raspberry pi&lt;br /&gt;
&lt;br /&gt;
## gps module&lt;br /&gt;
Neo-6m gps 모듈을 사용한다.&lt;br /&gt;
대부분의 gps 모듈이 serial UART 통신을 사용한다. 참고자료가 많은 쪽이 좋으므로  시리얼 통신방식 부품을 고른다.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://www.makerlab-electronics.com/my_uploads/2017/06/GPS-Module-01.jpg)&lt;br /&gt;
&lt;br /&gt;
	5Hz position update rate&lt;br /&gt;
	EEPROM to save configuration settings&lt;br /&gt;
	Rechargeable battery for Backup&lt;br /&gt;
	The cold start time of 38 s and Hot start time of 1 s&lt;br /&gt;
	Configurable from 4800 Baud to 115200 Baud rates. (default 9600)&lt;br /&gt;
	SuperSense ® Indoor GPS: -162 dBm tracking sensitivity&lt;br /&gt;
	Support SBAS (WAAS, EGNOS, MSAS, GAGAN)&lt;br /&gt;
	Separated 18X18mm GPS antenna&lt;br /&gt;
	Supply voltage: 3.3 V&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## 회로 구성&lt;br /&gt;
라즈베리의 8번째, 10번째 핀이  시리얼 통신용이다.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cdn.instructables.com/FP7/CQBO/ICJLZ1TL/FP7CQBOICJLZ1TL.LARGE.jpg?auto=webp&amp;amp;frame=1&amp;amp;width=664&amp;amp;fit=bounds)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/49839d/Image%202019-08-30%20at%204.54.46%20PM.png)&lt;br /&gt;
&lt;br /&gt;
## 라즈베리파이 시리얼 포트 설정&lt;br /&gt;
참고: http://lhdangerous.godohosting.com/wiki/index.php/%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%8B%9C%EB%A6%AC%EC%96%BC_%ED%86%B5%EC%8B%A0_%EC%84%A4%EC%A0%95_(setting_up_Raspberry_pi_serial_connection_via_GPIO) &lt;br /&gt;
&lt;br /&gt;
##  GPS FIX&lt;br /&gt;
* gps에서 사용되는 중요한 개념중에  FIX라는 것이 있다.&lt;br /&gt;
디바이스를 부팅하고나서도 위성으로부터 전파를 받아 디바이스의 위치를 계산할 수 았으려면 조금 시간이 걸리는데, 이렇게 충분한 데이터를 모아 자신의 위치를 계산할 수 있게되면 fix되었다라고 이야기한다. 더 구체적인 내용은 공부를 더 해보자.&lt;br /&gt;
&lt;br /&gt;
* neo-6m gps는 유난히  fix 하는데 시간이 오래 걸리는 듯 하다. 위성 신호가 잘 잡혀도 길게는 10분정도 걸리는 경우가 있다.  &lt;br /&gt;
&lt;br /&gt;
## NMEA 프로토콜&lt;br /&gt;
gps 통신 표준을 관리하는 곳은 재미있게도 NMEA, 'National Marine Electronics Association' 해양전자협회? 이다. 그래서 gps표준 프로토콜 이름도 'NMEA-0183' 이다.  &lt;br /&gt;
잘 정리된 한글자료: https://techlog.gurucat.net/239 [하얀쿠아의 이것저것 만들기 Blog]&lt;br /&gt;
nmea 표준 레퍼런스: https://www.sparkfun.com/datasheets/GPS/NMEA%20Reference%20Manual-Rev2.1-Dec07.pdf  &lt;br /&gt;
&lt;br /&gt;
NMEA 데이터 형태&lt;br /&gt;
 ``` $GPGGA,141113.999,3730.0308,N,12655.2369,E,1,06,1.7,98.9,M,,,,0000*3E&lt;br /&gt;
&lt;br /&gt;
$GPGSA,A,3,02,07,01,20,04,13,,,,,,,3.7,1.7,3.2*31&lt;br /&gt;
&lt;br /&gt;
$GPRMC,141113.999,A,3730.0308,N,12655.2369,E,19.77,195.23,101200,,*3C&lt;br /&gt;
&lt;br /&gt;
$GPGGA,141114.999,3730.0264,N,12655.2351,E,1,07,1.2,98.8,M,,,,0000*3C&lt;br /&gt;
&lt;br /&gt;
$GPGSA,A,3,02,07,01,20,24,04,13,,,,,,2.3,1.2,1.9*3E&lt;br /&gt;
&lt;br /&gt;
$GPRMC,141114.999,A,3730.0264,N,12655.2351,E,15.51,202.12,101200,,*3C&lt;br /&gt;
&lt;br /&gt;
$GPGGA,141115.999,3730.0231,N,12655.2345,E,1,07,1.2,98.7,M,,,,0000*37&lt;br /&gt;
&lt;br /&gt;
$GPGSA,A,3,02,07,01,20,24,04,13,,,,,,2.3,1.2,1.9*3E&lt;br /&gt;
&lt;br /&gt;
$GPGSV,2,1,07,07,84,025,47,04,51,289,48,20,40,048,47,02,32,203,46*74&lt;br /&gt;
&lt;br /&gt;
$GPGSV,2,2,07,01,23,101,47,13,20,131,32,24,19,268,40*49&lt;br /&gt;
&lt;br /&gt;
$GPRMC,141115.999,A,3730.0231,N,12655.2345,E,12.14,194.75,101200,,*33&lt;br /&gt;
&lt;br /&gt;
$GPGGA,141116.999,3730.0210,N,12655.2330,E,1,07,1.2,98.5,M,,,,0000*37&lt;br /&gt;
&lt;br /&gt;
$GPGSA,A,3,02,07,01,20,24,04,13,,,,,,2.3,1.2,1.9*3E&lt;br /&gt;
&lt;br /&gt;
$GPRMC,141116.999,A,3730.0210,N,12655.2330,E,8.01,194.65,101200,,*0F&lt;br /&gt;
&lt;br /&gt;
$GPGGA,141117.998,3730.0199,N,12655.2320,E,1,06,1.3,98.2,M,,,,0000*33&lt;br /&gt;
&lt;br /&gt;
$GPGSA,A,3,02,07,01,20,24,04,,,,,,,2.4,1.3,2.0*30&lt;br /&gt;
```&lt;br /&gt;
* $ : 각 문장의 시작&lt;br /&gt;
* \n (CR/LF) : 각 문장의 끝&lt;br /&gt;
* sentence id : $다음에 오는 다섯 글자로,디바이스 종류를 밝히는두자(예를들어 GP) 와 이어지는 데이터 종류를 밝히는 3글자(예를들어 GGA)로 구성됨.&lt;br /&gt;
* 데이터: 콤마로 구분된 데이터들은  앞의 sentence id에 따라 해석하게 된다.&lt;br /&gt;
가장 기본적인 몇가지만 읽는 방법을 알아보자&lt;br /&gt;
### GPGGA&lt;br /&gt;
GPGGA는 'Global Positioning System Fix Data'를 의미한다.  아래의 GPGGA 예제 sentence를 살펴보자.&lt;br /&gt;
&lt;br /&gt;
 GPGGA는 총 17개의 field를 가진다.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/de0df9/Image%202019-09-04%20at%203.10.19%20PM.png)&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/69bb04/Image%202019-09-04%20at%203.10.36%20PM.png)&lt;br /&gt;
&lt;br /&gt;
### GPRMC&lt;br /&gt;
GPRMC는 'Recommended Minimum Specific GNSS Data'로 정의되어있다.&lt;br /&gt;
NMEA에는 GPS에서 필수적인 PVT(Position, Velocity, Time) 데이터의 고유한 버전이 있다.&lt;br /&gt;
그것을 RMC라고 부른다. 'RMC'에서 RM이 Recommended Minimum의 약자이고, C는 GNSS를 의미한다. RMA, RMB도 있으며 각각 LORAN-C와 Navigation을 의미한다. 상식으로 알아두자.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/fc6b5f/Image%202019-09-04%20at%203.11.51%20PM.png)&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/f09f14/Image%202019-09-04%20at%203.12.04%20PM.png)&lt;br /&gt;
&lt;br /&gt;
### GPGSV&lt;br /&gt;
GSV는 'GNSS Satellite in View' 를 의미한다. 각각 위성의 상태에 대해 나와있는 문장이다.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/50a166/Image%202019-09-04%20at%203.13.52%20PM.png)&lt;br /&gt;
&lt;br /&gt;
### checksum&lt;br /&gt;
NMEA checksum 계산방법 및 예제코드&lt;br /&gt;
지금까지 예제로 보여준 NMEA sentence들을 살펴보면 알겠지만, checksum은 * 뒤에 16진수 두자리로 표시한다.&lt;br /&gt;
&lt;br /&gt;
checksum의 계산은 $, * 의 사이에 있는 각 문자를 exclusive-or (XOR) 연산한 값을 표시한다.&lt;br /&gt;
&lt;br /&gt;
어떤 NMEA sentence가 주어지면, * 뒤에 있는 16진수 두자리의 checksum과 직접 XOR연산한 값이 일치하는지를 검사해야 한다. 일치하지 않는다면, 그 sentence는 통신상의 문제 등의 이유로, 결함이 있는 것으로 간주해야 하며, 사용하면 안된다.&lt;br /&gt;
예를 들어보자.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;$GPRMC,155123.000,A,4043.8432,N,07359.7653,W,0.15,83.25,200407,,\*28&lt;br /&gt;
&lt;br /&gt;
이와 같은 NMEA sentence가 주어졌을때, checksum계산을 위한 XOR연산은 아래 각 문자들에 대해서 수행하면 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;GPRMC,155123.000,A,4043.8432,N,07359.7653,W,0.15,83.25,200407,,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## python 에서  NMEA 데이터 사용 예제&lt;br /&gt;
### manually&lt;br /&gt;
참고: http://ozzmaker.com/using-python-with-a-gps-receiver-on-a-raspberry-pi/&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
import serial&lt;br /&gt;
&lt;br /&gt;
port = &amp;quot;/dev/serial0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def parseGPS(data):&lt;br /&gt;
#    print &amp;quot;raw:&amp;quot;, data #prints raw data&lt;br /&gt;
    if data[0:6] == &amp;quot;$GPRMC&amp;quot;:&lt;br /&gt;
        sdata = data.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
        if sdata[2] == 'V':&lt;br /&gt;
            print &amp;quot;no satellite data available&amp;quot;&lt;br /&gt;
            return&lt;br /&gt;
        print &amp;quot;---Parsing GPRMC---&amp;quot;,&lt;br /&gt;
        time = sdata[1][0:2] + &amp;quot;:&amp;quot; + sdata[1][2:4] + &amp;quot;:&amp;quot; + sdata[1][4:6]&lt;br /&gt;
        lat = decode(sdata[3]) #latitude&lt;br /&gt;
        dirLat = sdata[4]      #latitude direction N/S&lt;br /&gt;
        lon = decode(sdata[5]) #longitute&lt;br /&gt;
        dirLon = sdata[6]      #longitude direction E/W&lt;br /&gt;
        speed = sdata[7]       #Speed in knots&lt;br /&gt;
        trCourse = sdata[8]    #True course&lt;br /&gt;
        date = sdata[9][0:2] + &amp;quot;/&amp;quot; + sdata[9][2:4] + &amp;quot;/&amp;quot; + sdata[9][4:6]#date&lt;br /&gt;
&lt;br /&gt;
        print &amp;quot;time : %s, latitude : %s(%s), longitude : %s(%s), speed : %s, True Course : %s, Date : %s&amp;quot; %  (time,lat,dirLat,lon,dirLon,speed,trCourse,date)&lt;br /&gt;
&lt;br /&gt;
def decode(coord):&lt;br /&gt;
    #Converts DDDMM.MMMMM &amp;gt; DD deg MM.MMMMM min&lt;br /&gt;
    x = coord.split(&amp;quot;.&amp;quot;)&lt;br /&gt;
    head = x[0]&lt;br /&gt;
    tail = x[1]&lt;br /&gt;
    deg = head[0:-2]&lt;br /&gt;
    min = head[-2:]&lt;br /&gt;
    return deg + &amp;quot; deg &amp;quot; + min + &amp;quot;.&amp;quot; + tail + &amp;quot; min&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Receiving GPS data&amp;quot;&lt;br /&gt;
ser = serial.Serial(port, baudrate = 9600, timeout = 0.5)&lt;br /&gt;
while True:&lt;br /&gt;
   data = ser.readline()&lt;br /&gt;
   parseGPS(data)&lt;br /&gt;
 ```&lt;br /&gt;
&lt;br /&gt;
### pynmea2 library 사용&lt;br /&gt;
NMEA 데이터 파싱을 도와주는 pynmea2 라이브러리를 사용할 수 있다.&lt;br /&gt;
* 라이브러리 설치&lt;br /&gt;
```bash&lt;br /&gt;
$ pip install pynmea2&lt;br /&gt;
```&lt;br /&gt;
* 예제&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
import serial&lt;br /&gt;
import pynmea2&lt;br /&gt;
&lt;br /&gt;
port = &amp;quot;/dev/serial0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def parseGPS(str):&lt;br /&gt;
    if str.find('GGA') &amp;gt; 0:&lt;br /&gt;
        msg = pynmea2.parse(str)&lt;br /&gt;
        print &amp;quot;Timestamp: %s -- Lat: %s %s -- Lon: %s %s -- Altitude: %s %s -- Satellites: %s&amp;quot; % (msg.timestamp,msg.lat,msg.lat_dir,msg.lon,msg.lon_dir,msg.altitude,msg.altitude_units,msg.num_sats)&lt;br /&gt;
&lt;br /&gt;
serialPort = serial.Serial(port, baudrate = 9600, timeout = 0.5)&lt;br /&gt;
while True:&lt;br /&gt;
    str = serialPort.readline()&lt;br /&gt;
    parseGPS(str)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## GPSD&lt;br /&gt;
gpsd 는 GPS daemon의 약자로, 백그라운드에서 동작하면서  gps 사용을 도와주는 프로그램이다. 시리얼포트에서 들어오는 로데이터를 바로 사용할 수도 있지만, gpsd과, 이와 연계된 라이브러리를 사용하면 더 쉽게  gps가 제공하는 정보를 활용할 수 있다.&lt;br /&gt;
Adafruit 참고자료: https://learn.adafruit.com/adafruit-ultimate-gps-hat-for-raspberry-pi/use-gpsd&lt;br /&gt;
gpsd 공식문서:https://gpsd.gitlab.io/gpsd/index.html&lt;br /&gt;
&lt;br /&gt;
### gpsd 와 파이썬 라이브러리 설치&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo apt-get update&lt;br /&gt;
$ sudo apt-get install gpsd gpsd-clients python-gps&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 라즈비안의 디폴트 서비스 제거&lt;br /&gt;
라즈비안에서는 라즈베리파이에 USB를 통해 외부 gps장치를 연결이 감지되면 gpsd가 실행되도록하는 systemd 서비스가 기본 켜져있다. 이 부분이 간섭일으키므로  disable 시킨다.&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo systemctl stop gpsd.socket&lt;br /&gt;
$ sudo systemctl disable gpsd.socket&lt;br /&gt;
```&lt;br /&gt;
#### 부팅시 gpsd 자동으로 시작하기&lt;br /&gt;
* [ ] systemd를 죽이는 대신에 usb가 아닌 serial0에 연결된 gps 가 부팅과 동시에 실행되도록 하려면, /etc/default/gpsd 를 수정토록 한다.&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo nano /etc/default/gpsd&lt;br /&gt;
```&lt;br /&gt;
 from:&lt;br /&gt;
 &amp;gt;DEVICES=&amp;quot;&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
 to:&lt;br /&gt;
 &amp;gt;DEVICES=&amp;quot;/dev/serial0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 그리고  systemd  서비스는 다시 켜준다.&lt;br /&gt;
 ```bash&lt;br /&gt;
 $ sudo systemctl enable gpsd.socket&lt;br /&gt;
 $ sudo systemctl start gpsdsocket&lt;br /&gt;
 ```&lt;br /&gt;
&lt;br /&gt;
### gpsd 실행&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo gpsd /dev/serial0 -F /var/run/gpsd.sock&lt;br /&gt;
```&lt;br /&gt;
끌 때는&lt;br /&gt;
``` bash&lt;br /&gt;
$ sudo killall gpsd&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### test: cgps&lt;br /&gt;
gpsd가 제공하는 데이터를 실시간으로 확인할 수 있다.&lt;br /&gt;
```bash&lt;br /&gt;
$ cgps&lt;br /&gt;
```&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/dc6e40/Image%202019-09-04%20at%2012.36.37%20PM.png)&lt;br /&gt;
&lt;br /&gt;
### gpsd 가 제공하는 데이터 구조&lt;br /&gt;
gpsd의 데이터는 json 형식으로,  'class' attribute 에 따라 해석한다.&lt;br /&gt;
gpsd 프로토콜 공식문서: https://gpsd.gitlab.io/gpsd/gpsd_json.html&lt;br /&gt;
&lt;br /&gt;
####  gpsd + python 예제&lt;br /&gt;
* gpsd로부터  TPV (time, position, velocity) 기본정보 가져오기&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
#! /usr/bin/python&lt;br /&gt;
&lt;br /&gt;
from gps import *&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
gpsd = gps(mode=WATCH_ENABLE|WATCH_NEWSTYLE)&lt;br /&gt;
print 'latitude\tlongitude\ttime utc\t\t\taltitude\tepv\tept\tspeed\tclimb' # '\t' = TAB to try and output the data in columns.&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    while True:&lt;br /&gt;
        report = gpsd.next() #&lt;br /&gt;
        if report['class'] == 'TPV':&lt;br /&gt;
&lt;br /&gt;
            print  getattr(report,'lat',0.0),&amp;quot;\t&amp;quot;,&lt;br /&gt;
            print  getattr(report,'lon',0.0),&amp;quot;\t&amp;quot;,&lt;br /&gt;
            print getattr(report,'time',''),&amp;quot;\t&amp;quot;,&lt;br /&gt;
            print  getattr(report,'alt','nan'),&amp;quot;\t\t&amp;quot;,&lt;br /&gt;
            print  getattr(report,'epv','nan'),&amp;quot;\t&amp;quot;,&lt;br /&gt;
            print  getattr(report,'ept','nan'),&amp;quot;\t&amp;quot;,&lt;br /&gt;
            print  getattr(report,'speed','nan'),&amp;quot;\t&amp;quot;,&lt;br /&gt;
            print getattr(report,'climb','nan'),&amp;quot;\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        time.sleep(1)&lt;br /&gt;
&lt;br /&gt;
except (KeyboardInterrupt, SystemExit): #when you press ctrl+c&lt;br /&gt;
    print &amp;quot;Done.\nExiting.&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
* 인공위성 정보 가져오기&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
#! /usr/bin/python&lt;br /&gt;
&lt;br /&gt;
from gps import *&lt;br /&gt;
import time&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
gpsd = gps(mode=WATCH_ENABLE|WATCH_NEWSTYLE)&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    while True:&lt;br /&gt;
&lt;br /&gt;
        report = gpsd.next() #&lt;br /&gt;
        if report['class'] == 'SKY':&lt;br /&gt;
            os.system('clear')&lt;br /&gt;
            print ' Satellites (total of', len(gpsd.satellites) , ' in view)'&lt;br /&gt;
            for i in gpsd.satellites:&lt;br /&gt;
                print 't', i&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
            print '\n\n'&lt;br /&gt;
            print 'PRN = PRN ID of the satellite. 1-63 are GNSS satellites, 64-96 are GLONASS satellites, 100-164 are SBAS satellites'&lt;br /&gt;
            print 'E = Elevation in degrees'&lt;br /&gt;
            print 'As = Azimuth, degrees from true north'&lt;br /&gt;
            print 'ss = Signal stength in dB'&lt;br /&gt;
            print 'used = Used in current solution?'&lt;br /&gt;
&lt;br /&gt;
        time.sleep(1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
except (KeyboardInterrupt, SystemExit): #when you press ctrl+c&lt;br /&gt;
    print &amp;quot;Done.\nExiting.&amp;quot;&lt;br /&gt;
```&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%8B%9C%EB%A6%AC%EC%96%BC_%ED%86%B5%EC%8B%A0_%EC%84%A4%EC%A0%95_(setting_up_Raspberry_pi_serial_connection_via_GPIO)&amp;diff=262</id>
		<title>라즈베리파이 시리얼 통신 설정 (setting up Raspberry pi serial connection via GPIO)</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%8B%9C%EB%A6%AC%EC%96%BC_%ED%86%B5%EC%8B%A0_%EC%84%A4%EC%A0%95_(setting_up_Raspberry_pi_serial_connection_via_GPIO)&amp;diff=262"/>
				<updated>2019-09-15T01:25:03Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# 라즈베리파이 시리얼 통신  설정 (setting up Raspberry pi serial connection via GPIO)&lt;br /&gt;
참고: https://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/  &lt;br /&gt;
&lt;br /&gt;
## 회로 구성&lt;br /&gt;
라즈베리의 8번째, 10번째 핀이  시리얼 통신용이다.&lt;br /&gt;
![](https://cdn.instructables.com/FP7/CQBO/ICJLZ1TL/FP7CQBOICJLZ1TL.LARGE.jpg?auto=webp&amp;amp;frame=1&amp;amp;width=664&amp;amp;fit=bounds)  &lt;br /&gt;
&lt;br /&gt;
![](https://cl.ly/49839d/Image%202019-08-30%20at%204.54.46%20PM.png)&lt;br /&gt;
&lt;br /&gt;
### 시리얼 포트 확인&lt;br /&gt;
* 가장 먼저, 라스베리파이에서 시리얼 포트가 어디에 있는지 알아야한다. GPIO상 BCM 14,15번 핀이 시리얼통신용 (각각 TX, RX)인데, 라스비안에서 /dev/serial0으로 불린다. (ls 명령어로 찾아보자)&lt;br /&gt;
&lt;br /&gt;
* 원래 시리얼통신 포트 이름은 /dev/ttyAMA0이다. 그런데 파이3에서는, 이전까지 /dev/ttyAMA0에 할당되어있던 시리얼포트가 블루투스에 할당되었다. 시리얼포트는 /dev/ttyS0로 옮겨졌다.&lt;br /&gt;
&lt;br /&gt;
* 위와같은 이유로 rpi3와 그 이전 기계에서 함께쓰는 코드를 쓰려면 /dev/ttyAMA0라는 이름을 쓰면 안된다. 대신 /dev/serial0라는 이름-일종의 바로가기(aliase)-를 사용하면 된다. 즉 rpi1,2에서는 시리얼 == /dev/ttyAMA0 == /dev/serial0 그리고 rpi3에서는 시리얼 == /dev/ttyS0 == /dev/serial0 터미널에서 확인해보자.&lt;br /&gt;
```&lt;br /&gt;
$ ls -l /dev&lt;br /&gt;
```&lt;br /&gt;
![](https://cl.ly/3U0d47274025/Image%202017-10-27%20at%2011.01.08%20%EC%98%A4%EC%A0%84.png)&lt;br /&gt;
&lt;br /&gt;
 **결론적으로 이것저것 골치아프게 생각하지 말로 시리얼포트는  '/dev/serial0'을 사용하면 된다.**&lt;br /&gt;
&lt;br /&gt;
* rpi3에서 /dev/ttyS0포트는 UART(병렬&amp;lt;&amp;gt;직렬 컨버터 하드웨어)가 아닌, UART를 모사한 소프트웨어시리얼이다. 때문에 CPU상태에 따라 시리얼통신이 안정적이지 않은 경우가 있을 수 있다. 만약 블루투스를 소프트시리얼로 돌리고(혹은 사용하지 않고) 시리얼통신을 하드웨어 UART를 사용해 안정적으로 하고자한다면 GPIO 시리얼을 /dev/ttyAMA0에 할당할 수도 있다. 구체적인 방법은 위 자료 참고.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### UART 활성화 &amp;amp; 시리얼 콘솔 연결 (getty service) 비활성화&lt;br /&gt;
* 예전 컴튜터라는게 막 생겨난 시기, 다른 컴퓨터에 접속해 콘솔창을 띄우는 용도로 시리얼 포트를 사용하곤 했었는데, rpi에서 시리얼 포트를 그런 용도로 사용하는 것을 기본으로 설정해 두었다. (getty 서비스라고 함).&lt;br /&gt;
* 시리얼 포트를 다른 하드웨어와 연결해 우리 마음대로 다루고 싶다면 콘솔 연결을 비활성화 시켜야 한다.&lt;br /&gt;
* 콘솔연결은 비활성화하더라고 시리얼포트는 사용가능하게 두어야 한다.&lt;br /&gt;
&lt;br /&gt;
* raspi-config  프로그램으로 간단히 할 수 있다.  &lt;br /&gt;
터미널에서&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo raspi-config&lt;br /&gt;
```&lt;br /&gt;
![](https://cl.ly/2e1b57/Image%202019-08-31%20at%201.33.08%20PM.png)&lt;br /&gt;
![](https://cl.ly/167455/Image%202019-08-31%20at%201.33.39%20PM.png)&lt;br /&gt;
![](https://cl.ly/d81b49/Image%202019-08-31%20at%201.34.02%20PM.png)&lt;br /&gt;
![](https://cl.ly/59471d/Image%202019-08-31%20at%201.34.27%20PM.png)&lt;br /&gt;
&lt;br /&gt;
* 재부팅한다.&lt;br /&gt;
&lt;br /&gt;
* 혹은 GUI에서는  Raspberry Pi Configuration 창을 열어서&lt;br /&gt;
![](https://cl.ly/272s331I3o1c/download/[f885f30a8379f4df9a197b839fb7a5c8]_Image%202017-10-27%20at%2011.57.24%20%EC%98%A4%EC%A0%84.png)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### 시리얼 연결&lt;br /&gt;
시리얼로 들어오는 rawdata 확인해보자&lt;br /&gt;
* 먼저 시리얼 포트 설정&lt;br /&gt;
```bash&lt;br /&gt;
$ stty -F /dev/serial0 raw 9600 cs8 clocal -cstopb&lt;br /&gt;
```&lt;br /&gt;
* 시리얼포트로 들어오는 값을 살펴보자&lt;br /&gt;
```bash&lt;br /&gt;
$ cat /dev/serial0&lt;br /&gt;
```&lt;br /&gt;
![](https://cl.ly/563e3c/Image%202019-09-04%20at%2011.47.27%20AM.png)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
###putty 프로그램 설치, 테스트&lt;br /&gt;
GUI환경에서는 putty를 설치해 시리얼통신을 테스트해보면 편리하다&lt;br /&gt;
* 터미널에서 `sudo apt-get install putty`를 입력해 putty 설치.&lt;br /&gt;
![](https://cl.ly/2V1o1A011w2e/download/[520c2c126a40c227d1242196f3133325]_Image%202017-10-27%20at%2012.31.13%20%EC%98%A4%ED%9B%84.png)&lt;br /&gt;
시리얼 연결을 선택한 후, 시리얼 포트이름, 연결 속도를 정해준다. &lt;br /&gt;
&lt;br /&gt;
* 시리얼을 통해 연결될 상대측에는 무엇이 와도 좋다. 아두이노의 시리얼 모니터나 안드로이드 시리얼 모니터에 연결해보자&lt;br /&gt;
&lt;br /&gt;
* 잘 된다 ^^&lt;br /&gt;
&lt;br /&gt;
## pySerial 라이브러리 설치&lt;br /&gt;
파이썬에서 시리얼 통신 사용하기 위해서 pySerial 라이브러리 필요함.&lt;br /&gt;
참고: https://pyserial.readthedocs.io/en/latest/index.html&lt;br /&gt;
1. 터미널에서 `$python -m pip install pyserial`을 입력해 라이브러리 설치. ( -m은 모듈실행명령. pip는 파이썬 라이브러리 관리 모듈인 pipy를 의미.)&lt;br /&gt;
2. pySerial  샘플 코드를 실행해보자. (한 라인씩 넣어도 좋다)&lt;br /&gt;
```python&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&amp;quot;/dev/serial0&amp;quot;)    #Open named port &lt;br /&gt;
ser.baudrate = 57600                     #Set baud rate to 57600&lt;br /&gt;
data = ser.read(10)                     #Read ten characters from serial port to data&lt;br /&gt;
ser.write(data)                         #Send back the received data&lt;br /&gt;
ser.close()     &lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
[[category:raspberry pi]]&lt;br /&gt;
[[category:bluetooth]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Google_API_python_client_%EC%82%AC%EC%9A%A9%EB%B2%95-simple&amp;diff=261</id>
		<title>Google API python client 사용법-simple</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Google_API_python_client_%EC%82%AC%EC%9A%A9%EB%B2%95-simple&amp;diff=261"/>
				<updated>2019-09-14T06:39:47Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서: # Python Google  API 사용하기 라즈베리파이에서 gmail등의 구글 서비스를 확인하고 조작 할 수 있는 python 코드 사용법. 구글의 표준  api를 사용...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Python Google&lt;br /&gt;
 API 사용하기&lt;br /&gt;
라즈베리파이에서 gmail등의 구글 서비스를 확인하고 조작 할 수 있는 python 코드 사용법. 구글의 표준  api를 사용한다. 이하에서는 Gmail과 Google calendar 를 예로 사용한다.&lt;br /&gt;
참고: https://developers.google.com/gmail/api/quickstart/python&lt;br /&gt;
&lt;br /&gt;
## Google OAuth2.0 을 통한 인증&lt;br /&gt;
참고:&lt;br /&gt;
* 구글 공식 개념설명: https://developers.google.com/identity/protocols/OAuth2&lt;br /&gt;
* 구글 샘플: https://developers.google.com/gmail/api/quickstart/python&lt;br /&gt;
* 라이브러리 도큐먼트: https://google-auth-oauthlib.readthedocs.io/en/latest/reference/google_auth_oauthlib.flow.html&lt;br /&gt;
&lt;br /&gt;
gmail 데이터를 사용하는 웹 서비스나 어플리케이션, 혹은 기기를 만든다고 하면, 신뢰와 관련한 2가지 문제가 발생한다.&lt;br /&gt;
1. 이 사용자가 정말 본인인가?&lt;br /&gt;
2. 이 어플이 어디까지 민감한 정보를 다루도록 허용할 것인가?&lt;br /&gt;
&lt;br /&gt;
1번 문제를 authentication의 문제라고하고, 두번째의 문제를 authorization의 문제라고 한다.&lt;br /&gt;
개인개발자가 해결하기에는 어려운 두가지 문제를 구글이라는 능력자에게 위탁해버리는 해결책이  OAuth2.0 이라는 프로토콜이다.&lt;br /&gt;
&lt;br /&gt;
간단히 요약하자면, 구글의 인증을 받은 프로젝트(구글인증서버에 대해 클라이언트)는 클라이언트 인증정보(Oauth2.0 client ID, Pass 등) 을 발급받아 가지고 있다가  Gmail 데이터가 필요한 순간에 사용자가 직접 어플에 구글 아이디를 입력하는 대신 구글의 로그인 창(consent screen)을 띄워주고, 구글측에서 사용자가 확인되면 사용자에게 '이러이러한 앱에서 너의  gmail 데이터에 접근하도록 허락할래?'라고 물어본 후, 허락들 받으면 어플에 gmil api에 리퀘스트를 보낼때 꼭 필요한 Access Token을 발급해주는 절차이다.&lt;br /&gt;
&lt;br /&gt;
  ![||600](https://cl.ly/333ddb/Screen%20Recording%202019-08-07%20at%2012.55%20PM-Animated%20Image%20(Small).gif)&lt;br /&gt;
&lt;br /&gt;
Oauth2.0의 개념에 대한 설명은 다양한 자료에서 다루고 있으므로 참고하도록 하고, 여기서는 Raspberry pi 상에서  Gmail 정보를 가져오은 python 스크립트를 구현하기 위한 실제적인 내용들만 확인하자.&lt;br /&gt;
&lt;br /&gt;
### 1. google cloud platform 가입&lt;br /&gt;
gmail api 는 구글 클라우드 플랫폼이라는 서비스의 일부이다. 먼저 구글 계정을 만들어 google cloud platform에 가입하고 프로젝트를 새로 생성한다.&lt;br /&gt;
http://www.google.com/cloud&lt;br /&gt;
기존의  gmail 계정을 사용해도 되며, 무료로 가입해도 대부분의 기본 기능을 마음껏 사용할 수 있다.(신용카드 등록을 해도 결제가 되지는 않는다. 신용카드 등록하지 않고 창을 닫아도 작동되는 듯 하다.)&lt;br /&gt;
&lt;br /&gt;
### 2. 새 프로젝트 생성&lt;br /&gt;
구글 클라우드 플랫폼 콘솔화면에서 새로운 프로젝트를 생성한다.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/ab0ad7/Image%202019-08-05%20at%205.45.31%20PM.png)&lt;br /&gt;
Gmail-test라고 이름지었다.&lt;br /&gt;
&lt;br /&gt;
### 3. Gmail API 켜기&lt;br /&gt;
API 및 서비스 &amp;gt; 대시보드 ( https://console.developers.google.com/apis )에서 Gamil api를 Enabled 시켜준다.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/a8753e/Image%202019-08-05%20at%205.49.35%20PM.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/3e7ee6/Image%202019-08-05%20at%205.59.36%20PM.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/24249b/Image%202019-08-05%20at%206.04.18%20PM.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/2017ec/Image%202019-08-02%20at%206.40.18%20PM.png)&lt;br /&gt;
&lt;br /&gt;
### 4. 인증정보 (OAuth Client ID, PASS) 생성&lt;br /&gt;
&amp;quot;이 프로그램은 너의 구글 계정에서 이러이러한 개인정보를 가져다가 쓸거야. 허용할래?&amp;quot; 라고 물어보는 화면을 consent screen이라고 한다. 메뉴 &amp;gt; APIs &amp;amp; Services &amp;gt; 사용자 인증정보 에서 인증 정보를 만든다. 3가지 방식 중 고를 수 있도록 되어있는데, 어떤 방식을 골라야 할지 잘 모른다면 마지막의 '사용자 인증정보 선택 도움말'을 활용한다. 우리는 OAuth 클라이언트 ID를 선택.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/9cd427/Image%202019-08-05%20at%206.23.17%20PM.png)&lt;br /&gt;
동의 화면 (구글 로그인창) 구성&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/1c08c7/Image%202019-08-05%20at%206.28.06%20PM.png)&lt;br /&gt;
프로젝트 이름, 로고, 문의사항 보낼 수 있는 지원 이메일 등등 넣을 수 있다.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/9f43dd/Image%202019-08-05%20at%206.32.38%20PM.png)&lt;br /&gt;
만들고 있는 프로젝트 유형에 따라 애플리케이션 유형을 선택한다.&lt;br /&gt;
우리는 raspberry pi 의 cli 환경에서 사용할 예정이므로 구글에서 제공하는 동의화면을 바로 디바이스에 띄울 수가 없고, 제3의 디바이스를 통해 접근토록 해야한다.&lt;br /&gt;
이런경우 반드시 **'기타'** 를 선택한다.&lt;br /&gt;
'OAuth 클라이언트 이름'은 프로젝트명과는 별개로, 나는 gmail_test라고 지었다.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/4b1766/Image%202019-08-05%20at%206.35.38%20PM.png)&lt;br /&gt;
인증정보 생성 완료!&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/4e7818/Image%202019-08-05%20at%206.36.31%20PM.png)&lt;br /&gt;
&lt;br /&gt;
인증정보 (credentials)를 다운로드 해 두면 번거롭게 한자씩 타이핑해 넣지 않아도 되므로 편하다.&lt;br /&gt;
&amp;lt;br&amp;gt;![||600](https://cl.ly/6972be/Image%202019-08-05%20at%206.37.49%20PM.png)&lt;br /&gt;
다운받은  .json 파일은 실행시킬 파이선 코드와 같은 위치에 넣어둔다.&lt;br /&gt;
&lt;br /&gt;
### 2. Google Client Library 를 설치한다.&lt;br /&gt;
* [x] *나는 이런저런 모듈로 작업환경이 복잡해지는게 꺼려져서 virtualenv 로 GmailAPI라는 가상환경을 만들어서 테스트했다.*&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
$pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib&lt;br /&gt;
```&lt;br /&gt;
* [x] 라즈베리에서 설치하려니  sudo 권한이 필요한데, 이게  라즈베리이기 때문인지 혹은  virtualenv 내에 설치 하지 않아서인지는 확인 필요하다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### 3. Gmail api 공식 샘플 코드를 실행시켜 잘 작동하는지 확인&lt;br /&gt;
참고: https://developers.google.com/gmail/api/quickstart/python&lt;br /&gt;
* 27행의 'credentials.json' 은 앞서 받아둔 클라이언트 인증 정보파일로 파일명 바꾼다.&lt;br /&gt;
&lt;br /&gt;
* 우리는 라즈베리파이의 콘솔환경에서 실행시키고 있으므로, consent screen을 디바이스에 바로 띄울 수 없다. 제3의 디바이스에서 브라우저를 열고 consent screen 을 찾아가서 확인 코드를 받고 콘솔 창에 입력하는 방식으로 해야하는데, 이를 위해서는 28행의 'flow.run_local_server(port=0)' 은 'flow.run_console()'로 교체되어야 한다.  &lt;br /&gt;
참고: https://google-auth-oauthlib.readthedocs.io/en/latest/reference/google_auth_oauthlib.flow.html&lt;br /&gt;
&lt;br /&gt;
* 예제는 gmail에서 데이터를 읽어오는 것까지만 권한 요청한다. 만일 프로젝트에서 필요로하는 권한의 범위가 달라진다면 행8의  SCOPES = [...]를 수정, 혹은 추가 해야 한다.   &lt;br /&gt;
참고: https://developers.google.com/gmail/api/auth/scopes&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
# gmail-test.py&lt;br /&gt;
# raspberry pi 콘솔용.  gmail label 목록을 불러온다.&lt;br /&gt;
&lt;br /&gt;
import pickle&lt;br /&gt;
import os.path&lt;br /&gt;
from googleapiclient.discovery import build&lt;br /&gt;
from google_auth_oauthlib.flow import InstalledAppFlow&lt;br /&gt;
from google.auth.transport.requests import Request&lt;br /&gt;
&lt;br /&gt;
# If modifying these scopes, delete the file token.pickle.&lt;br /&gt;
SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Shows basic usage of the Gmail API.&lt;br /&gt;
    Lists the user's Gmail labels.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    creds = None&lt;br /&gt;
    # The file token.pickle stores the user's access and refresh tokens, and is&lt;br /&gt;
    # created automatically when the authorization flow completes for the first&lt;br /&gt;
    # time.&lt;br /&gt;
    if os.path.exists('token.pickle'):&lt;br /&gt;
        with open('token.pickle', 'rb') as token:&lt;br /&gt;
            creds = pickle.load(token)&lt;br /&gt;
    # If there are no (valid) credentials available, let the user log in.&lt;br /&gt;
    if not creds or not creds.valid:&lt;br /&gt;
        if creds and creds.expired and creds.refresh_token:&lt;br /&gt;
            creds.refresh(Request())&lt;br /&gt;
        else:&lt;br /&gt;
            flow = InstalledAppFlow.from_client_secrets_file(&lt;br /&gt;
                'client_secret_497460368822-l2vljgso619t68g4nnfbej5i9kel4767.apps.googleusercontent.com.json', SCOPES)&lt;br /&gt;
            creds = flow.run_console()&lt;br /&gt;
            print(creds)&lt;br /&gt;
        # Save the credentials for the next run&lt;br /&gt;
        with open('token.pickle', 'wb') as token:&lt;br /&gt;
            pickle.dump(creds, token)&lt;br /&gt;
&lt;br /&gt;
    service = build('gmail', 'v1', credentials=creds)&lt;br /&gt;
&lt;br /&gt;
    # Call the Gmail API&lt;br /&gt;
    results = service.users().labels().list(userId='me').execute()&lt;br /&gt;
    labels = results.get('labels', [])&lt;br /&gt;
&lt;br /&gt;
    if not labels:&lt;br /&gt;
        print('No labels found.')&lt;br /&gt;
    else:&lt;br /&gt;
        print('Labels:')&lt;br /&gt;
        for label in labels:&lt;br /&gt;
            print(label['name'])&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;![||600]( https://cl.ly/8829db/Screen%20Recording%202019-08-07%20at%2003.23%20PM-Animated%20Image%20(Large).gif )&lt;br /&gt;
&lt;br /&gt;
## Google api python library 사용법&lt;br /&gt;
구글 공식 문서: https://github.com/googleapis/google-api-python-client/blob/master/docs/start.md#building-and-calling-a-service  &lt;br /&gt;
google python 라이브러리가 지원하는 모든 google api 리스트와 사용법 reference: https://github.com/googleapis/google-api-python-client/blob/c977304a1af233058f572787538edafc2ef122e6/docs/dyn/index.md&lt;br /&gt;
&lt;br /&gt;
구글의 모든 서비스 api는 비슷한 구조를 가지고 있다. gmail도 마찬가지.&lt;br /&gt;
### 1. 구글 서비스 객체 만들기&lt;br /&gt;
* apiclient.discovery.build()사용해 서비스 객체 만든다.  &lt;br /&gt;
* 어떤 서비스 api를 사용할 것인지,  api버전은 어느 것 사용하는지, [link](https://github.com/googleapis/google-api-python-client/blob/c977304a1af233058f572787538edafc2ef122e6/docs/dyn/index.md) 중에서 선택한다.  &lt;br /&gt;
* 앞서 획득한 access token도 이때 전달한다.&lt;br /&gt;
```python&lt;br /&gt;
from apiclient.discovery import build&lt;br /&gt;
service = build('api_name', 'api_version', credencials='아까얻은 AcessToken')&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 2. collection&lt;br /&gt;
구글 서비스의 모든 데이터는 계층적인 집합을 이루고 있는데, 이 한 단위의 계층을 collection이라고 부른다.&lt;br /&gt;
gmail 같으면 user 콜렉션 아래에는 여러개의 message 콜렉션이 있고, 그 아래에는.... 하는 식이다.&lt;br /&gt;
이들 콜렉션에 아래와 같이 접근할 수 있다.&lt;br /&gt;
```python&lt;br /&gt;
collection = service.users().messages()&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 3. request and response&lt;br /&gt;
어떤 특정한 collection에 대해 구글에 요청할 수 있는 명령어는 콜렉션마다 다 다르다. [이곳](https://developers.google.com/gmail/api/v1/reference/) 에서 검색 할 수 있다.&lt;br /&gt;
gmail의 message 콜렉션이 list()명령을 가지고 있다면,&lt;br /&gt;
```python&lt;br /&gt;
request = service.users().messages().list(userId='me')&lt;br /&gt;
```&lt;br /&gt;
실제 request를 구글 api 서버에 보내고 응답을 받아오는 건  execute() 함수를 사용.&lt;br /&gt;
```python&lt;br /&gt;
response = request.execute()&lt;br /&gt;
# or&lt;br /&gt;
response = servie.users().mesages().list(userId='me').execute()&lt;br /&gt;
```&lt;br /&gt;
* 구글로부터의 답장은 원래는  JSON형식으로 온다. 그렇지만 우리가 사용하는 python api가 자동으로 사용하기 쉽게  python 데이터 타입(dict)로 바꾸어주기 때문에 get()함수로 원하는 항목을 쉽게 뽑아 쓸 수 있다.&lt;br /&gt;
&lt;br /&gt;
## 구글 캘린더 예제&lt;br /&gt;
구글 캘린더 api소개자료의 가장 기본 예제.  &lt;br /&gt;
참고: https://developers.google.com/calendar/quickstart/python&lt;br /&gt;
```python&lt;br /&gt;
# quickstart.py&lt;br /&gt;
# 사용자의 기본캘린더 (primary)에서&lt;br /&gt;
# 지금이후(timeMin=now)로 시작하는&lt;br /&gt;
# 10개의 이벤트(maxResult-10)를 가져와 표시하기&lt;br /&gt;
&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
import datetime&lt;br /&gt;
import pickle&lt;br /&gt;
import os.path&lt;br /&gt;
from googleapiclient.discovery import build&lt;br /&gt;
from google_auth_oauthlib.flow import InstalledAppFlow&lt;br /&gt;
from google.auth.transport.requests import Request&lt;br /&gt;
&lt;br /&gt;
# If modifying these scopes, delete the file token.pickle.&lt;br /&gt;
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Shows basic usage of the Google Calendar API.&lt;br /&gt;
    Prints the start and name of the next 10 events on the user's calendar.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    creds = None&lt;br /&gt;
    # The file token.pickle stores the user's access and refresh tokens, and is&lt;br /&gt;
    # created automatically when the authorization flow completes for the first&lt;br /&gt;
    # time.&lt;br /&gt;
    if os.path.exists('token.pickle'):&lt;br /&gt;
        with open('token.pickle', 'rb') as token:&lt;br /&gt;
            creds = pickle.load(token)&lt;br /&gt;
    # If there are no (valid) credentials available, let the user log in.&lt;br /&gt;
    if not creds or not creds.valid:&lt;br /&gt;
        if creds and creds.expired and creds.refresh_token:&lt;br /&gt;
            creds.refresh(Request())&lt;br /&gt;
        else:&lt;br /&gt;
            flow = InstalledAppFlow.from_client_secrets_file(&lt;br /&gt;
                'credentials.json', SCOPES)&lt;br /&gt;
            creds = flow.run_local_server(port=0)&lt;br /&gt;
        # Save the credentials for the next run&lt;br /&gt;
        with open('token.pickle', 'wb') as token:&lt;br /&gt;
            pickle.dump(creds, token)&lt;br /&gt;
&lt;br /&gt;
    service = build('calendar', 'v3', credentials=creds)&lt;br /&gt;
&lt;br /&gt;
    # Call the Calendar API&lt;br /&gt;
    now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time&lt;br /&gt;
    print('Getting the upcoming 10 events')&lt;br /&gt;
    events_result = service.events().list(calendarId='primary', timeMin=now,&lt;br /&gt;
                                        maxResults=10, singleEvents=True,&lt;br /&gt;
                                        orderBy='startTime').execute()&lt;br /&gt;
    events = events_result.get('items', [])&lt;br /&gt;
&lt;br /&gt;
    if not events:&lt;br /&gt;
        print('No upcoming events found.')&lt;br /&gt;
    for event in events:&lt;br /&gt;
        start = event['start'].get('dateTime', event['start'].get('date'))&lt;br /&gt;
        print(start, event['summary'])&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    main()&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## json module  for python&lt;br /&gt;
참고: https://www.w3schools.com/python/python_json.asp  &lt;br /&gt;
&lt;br /&gt;
Json 데이터를 다루어야 하는 경우, 파이썬에 기본 포함 되어있는 json모듈을 사용하면 JSON 파일/string을 파이썬  dictionary 나  list 로 만들어 사용할 수 있어 편리하다. 더우기 indent=  아규먼트를 사용하면 print() 로 표시할 때 줄 맞추어 주므로 보기에도 편하다.&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
import json&lt;br /&gt;
...&lt;br /&gt;
print json.dumps(response, sort_keys=True, indent=4)&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
For example, if the printed JSON is the following:&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;count&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;items&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;cents&amp;quot;: 5,&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;#586 1923-26 5-cent blue Theodore Roosevelt MLH perf 10&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;cents&amp;quot;: 5,&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;#628 1926 5-cent Ericsson Memorial MLH&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
# You can access the data like this:&lt;br /&gt;
print 'Num 5 cent stamps: %d' % response['count']&lt;br /&gt;
print 'First stamp name: %s' % response['items'][0]['name']&lt;br /&gt;
```&lt;br /&gt;
|method|용도 |&lt;br /&gt;
|-|-|&lt;br /&gt;
|json.load(json) / json.load**s**(json_string)|JSON 파일을 python dictionary 로 바꾸어 읽어들임 / json 문자열을 파이썬 데이타로 변환 |&lt;br /&gt;
|json.dump(puthon_object) / json.dump**s**(python_object)|python 데이터를 JSON으로 바꾸어 파일로 저장/ python 데이터를 json 형식 문자열로 변환.  &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;   parameter: sort_keys=(True/False), &amp;lt;br&amp;gt; parameter: indent= 들여쓰기칸수|&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_pi_%EC%97%90%EC%84%9C_python%EC%9C%BC%EB%A1%9C_GPIO_%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0&amp;diff=260</id>
		<title>Raspberry pi 에서 python으로 GPIO 사용하기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_pi_%EC%97%90%EC%84%9C_python%EC%9C%BC%EB%A1%9C_GPIO_%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0&amp;diff=260"/>
				<updated>2019-09-14T03:01:21Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# RPi.GPIO 라이브러리 사용법&lt;br /&gt;
파이썬에서 라즈베리파이의 gpio핀을 제어할 수 있도록 해주는 라이브러리. 라즈비안에 기본 설치 되어있다.&lt;br /&gt;
참고: https://sourceforge.net/p/raspberry-gpio-python/wiki/Home/&lt;br /&gt;
&lt;br /&gt;
## 기본 사용법1(순서)&lt;br /&gt;
### 1. 먼저 모듈을 임포트한다. (필수)&lt;br /&gt;
* *RPi.GPIO 모듈은 하드웨어를 건드리기 때문에 슈퍼유저 권한이 필요하다. 실행할 때 `$sudo python3 my-gpio-project.py`해야한다.*&lt;br /&gt;
&lt;br /&gt;
``` python&lt;br /&gt;
import RPi.GPIO as GPIO&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 2. 핀 넘버를 부르는 방식을 선택한다.(필수)&lt;br /&gt;
``` python&lt;br /&gt;
GPIO.setmode(GPIO.BOARD)&lt;br /&gt;
#or&lt;br /&gt;
GPIO.setmode(GPIO.BCM)&lt;br /&gt;
```&lt;br /&gt;
GPIO.BOARD 는 라즈베리파이에 배열된 순서대로 핀 이름을 부르겠다는 의미이고, GPIO.BCM은 (Broadcom chip-specific pin numbers) 로  Broadcom SOC 칩에서 사용하는 핀이름을 사용하겠다는 의미.&lt;br /&gt;
즉, GPIO.BOARD 모드에서 8번핀은 GPIO.BCM  모드에서 14번 핀과 동일하다.&lt;br /&gt;
![Raspberry Pi GPIO 배치](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/4/2/4/header_pinout.jpg)&lt;br /&gt;
&lt;br /&gt;
* tip: 위 그림에 나온 BCM 핀 배치도는 라즈비안에 기본 설치된 pinout  명령으로 언제든 확인 할 수 있다. (i2c 핀이라든가... 가 표시되지 않아 아쉬움이 있다.)&lt;br /&gt;
 ![](https://cl.ly/cf40ac/Image%202019-08-01%20at%203.42.06%20PM.png) raspberry pi zero 에서 실행한 경우&lt;br /&gt;
&lt;br /&gt;
### 3.  핀 모드를 설정한다 (입력핀 or 출력핀...). 아두이노에서 `pinMode()` 와 같은 역할.(필수)&lt;br /&gt;
 ```python&lt;br /&gt;
 GPIO.setup(18, GPIO.OUT)&lt;br /&gt;
 #or&lt;br /&gt;
 GPIO.setup(18, GPIO.IN)&lt;br /&gt;
 ```&lt;br /&gt;
 list를 사용해 한번에 여러 핀을 설정 할 수도 있고, output 모드로 설정하는 경우 초기값을 줄 수도 있다.&lt;br /&gt;
 ``` python&lt;br /&gt;
 GPIO.setup([18, 19, 20], GPIO.OUT, initial=GPIO.HIGH)&lt;br /&gt;
 ```&lt;br /&gt;
&lt;br /&gt;
### 4.  input, output 등등 원하는대로 사용한다.&lt;br /&gt;
### 5. 프로그램을 종료하기전, 리소스를 반납한다. (필수)&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
GPIO.cleanup()&lt;br /&gt;
```&lt;br /&gt;
### 결론&lt;br /&gt;
종합하자면, 일반적으로 무한루프를 돌며 사용자와 인터렉션 하는 GPIO 활용 프로그램의 특성상 아래와 같은 구조를 갖는 경우가 많다.&lt;br /&gt;
&lt;br /&gt;
``` python&lt;br /&gt;
# 라이브러리 임포트&lt;br /&gt;
import RPi.GPIO as GPIO&lt;br /&gt;
...&lt;br /&gt;
# GPIO setup&lt;br /&gt;
GPIO.setmode(GPIO.BCM)&lt;br /&gt;
GPIO.setup(12, GPIO.IN)&lt;br /&gt;
GPIO.setup(18, GPIO.OUT)&lt;br /&gt;
...&lt;br /&gt;
# 메인 쓰레드&lt;br /&gt;
try:&lt;br /&gt;
    while 1:&lt;br /&gt;
        button = GPIO.input(12)&lt;br /&gt;
        ...&lt;br /&gt;
        GPIO.output(18, GPIO.HIGH)&lt;br /&gt;
        ...&lt;br /&gt;
# 반드시 클린업&lt;br /&gt;
finally:&lt;br /&gt;
    GPIO.cleanup()&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## 기본 사용법 2&lt;br /&gt;
### Digital Output&lt;br /&gt;
 ``` python&lt;br /&gt;
 import time&lt;br /&gt;
&lt;br /&gt;
 GPIO.output(18, GPIO.HIGH)&lt;br /&gt;
 time.sleep(0.1)	# 100 millisecond 딜레이&lt;br /&gt;
 GPIO.output(18,GPIO.LOW)&lt;br /&gt;
 ```&lt;br /&gt;
 `GPIO.HIGH` 대신 `True `나 `1`을 써도 좋다. `GPIO.LOW` 대신에는 `False`나 `0`&lt;br /&gt;
&lt;br /&gt;
### Analog Output (PWM)&lt;br /&gt;
RPi는 기본적으로 2개의 hardware PWM 채널을 가지고 있는데, 아쉽게도 RPi.GPIO에서는 사용할 방법이 없다. (C로 wiringPi를 사용하는경우 1개 채널(GPIO18) 사용가능.) 대신 software PWM을 어느 핀에서든 사용할 수 있다. 동시에 여러개도 가능하다.&lt;br /&gt;
(참고:https://www.raspberrypi.org/forums/viewtopic.php?f=44&amp;amp;t=31714)&lt;br /&gt;
``` python&lt;br /&gt;
#swPWM 초기화&lt;br /&gt;
myPwm = GPIO.PWM(18, 1000) # pin, frequency&lt;br /&gt;
myPwm.start(50) #dutycycle (0~100사이 값). 아두이노로 치면 analogWrite(18, 128)과 동일.&lt;br /&gt;
&lt;br /&gt;
# 출력값 변경 (0~100%)&lt;br /&gt;
myPwm.ChangeDutyCycle(75)&lt;br /&gt;
&lt;br /&gt;
# Frequency  변경 (Hz)&lt;br /&gt;
myPwm.ChangeFrequency(1500)&lt;br /&gt;
&lt;br /&gt;
#swPWM 정지&lt;br /&gt;
myPwm.stop()&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### Digital Input&lt;br /&gt;
``` python&lt;br /&gt;
pin_read = GPIO.input(18)	#True / False&lt;br /&gt;
```&lt;br /&gt;
* tip: 출력핀에 GPIO.input(outputPin) 함수를 사용할 수도 있는데, 현재 GPIO.HIGH가 출력되고 있는지, GPIO.LOW가 출력되고 있는지 알아보는 용도.&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
# toggle button&lt;br /&gt;
# 12 번 핀이 GPIO.OUT으로 setup 되어있는 상태에서...&lt;br /&gt;
GPIO.output(12, not GPIO.input(12))&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### Analog Input&lt;br /&gt;
안타깝게도 라즈베리파이는 analog input이 불가능하다. ADC(analog-digital converter)회로가 필요하다. **MCP3008** 을 사용하도록 하자. (참고: https://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi/overview) 혹은 간이로 만들수도 있다(참고: https://www.allaboutcircuits.com/projects/building-raspberry-pi-controllers-part-5-reading-analog-data-with-an-rpi/)&lt;br /&gt;
&lt;br /&gt;
## 고급 사용법&lt;br /&gt;
### 내장 pull-down, pull-up 저항 사용&lt;br /&gt;
스위치에  pull-down, pull-up 회로를 만들어주는게 별 거아니지만 귀찮을 때가 많다. 그럴 줄 알고 라즈베리파이 내부에 풀다운/풀업 저항을 만들어 놓고 sw로 활성화 할 수 있도록 되어있다.&lt;br /&gt;
&lt;br /&gt;
``` python&lt;br /&gt;
GPIO.setup(18, GPIO.IN, pull_up_down = GPIO.PUD_UP) # 스위치 안눌렸을 때 on, 눌렸을 때 off&lt;br /&gt;
#or&lt;br /&gt;
GPIO.setup(18, GPIO.IN, pull_up_down = GPIO.PUD_DOWN) # 스위치 안눌렸을 때 off, 눌렸을 때 on&lt;br /&gt;
```&lt;br /&gt;
### interrupt 사용&lt;br /&gt;
전체 코드 중 'GPIO.input(channel)'이 실행되는 그 순간에만 스위치가 눌렸는지를 알 수 있기 때문에 코드의 다른 부분이 실행되는 때에 스위치를 누르면 컴퓨터가 감지하지 못하고 넘어가버리는 일이 종종 있다. 이럴 때 사용하는게 인터럽트.&lt;br /&gt;
인터럽트라는게 별게 아니고 별도의 쓰레드에서 스위치가 눌렸는지만 아주 짧은 주기로 계속 보고있다가 스위치가 눌리면 메인 스레드로 이를 알려주어 callback 함수가 동작하도록 하는 것. GUI sw 개발할 때의 event-driven 과 같은 것이라고 보면 된다.&lt;br /&gt;
&lt;br /&gt;
RPi.GPIO에서는 인터럽트 구현을 위해 GPIO.wait_for_edge(channel, edge_type) 함수와 GPIO.add_event_detect(channel, edge_type), GPIO.event_detected(channel) 함수가 준비되어있다.&lt;br /&gt;
&lt;br /&gt;
**GPIO.RISING, GPIO.FALLING, GPIO.BOTH** 를 감지할 수 있다.&lt;br /&gt;
&lt;br /&gt;
대표적인 사용법:&lt;br /&gt;
```python&lt;br /&gt;
def my_callback(channel):&lt;br /&gt;
    print('Edge detected on channel %s'%channel)&lt;br /&gt;
&lt;br /&gt;
GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback)  # add rising edge detection on a channel&lt;br /&gt;
...the rest of your program...&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
# gpio-interrupt-test.py&lt;br /&gt;
# GPIO12에 입력이 들어오면 문장을 출력한다.&lt;br /&gt;
&lt;br /&gt;
# 라이브러리 불러오기&lt;br /&gt;
import RPi.GPIO as GPIO&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
# 스위치 눌렸을 때 콜백함수&lt;br /&gt;
def switchPressed(channel):&lt;br /&gt;
    print('channel %s pressed!!'%channel)&lt;br /&gt;
&lt;br /&gt;
# GPIO setup&lt;br /&gt;
GPIO.setmode(GPIO.BCM)&lt;br /&gt;
GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)&lt;br /&gt;
# interrupt 선언&lt;br /&gt;
GPIO.add_event_detect(12, GPIO.RISING, callback=switchPressed)&lt;br /&gt;
# 메인 쓰레드&lt;br /&gt;
try:&lt;br /&gt;
    while 1:&lt;br /&gt;
        print(&amp;quot;.&amp;quot;)&lt;br /&gt;
        time.sleep(0.1)&lt;br /&gt;
finally:&lt;br /&gt;
    GPIO.cleanup()&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## 스위치  debounce&lt;br /&gt;
버튼을 한번 눌렀는데 두번 눌린 것으로 인식하는 현상을 '튐, bounce' 라고 한다.&lt;br /&gt;
![](http://www.electronics-lab.com/wp-content/uploads/2018/03/graph.jpg)&lt;br /&gt;
위 그림은 스위치 눌리는 순간의 전류흐름을 보여주는 것인데, 기대처럼 한번에 깔금하게 0v -&amp;gt; 3.3v 가 되지는 않음을 보여준다. 이 때문에 바운스 현상 발생한다.&lt;br /&gt;
해결책으로는...&lt;br /&gt;
* add a 0.1uF capacitor across your switch.&lt;br /&gt;
* software debouncing (기본적으로 스위치가 눌린 직후의 수 millisecond 를 무시하는 것이다.)&lt;br /&gt;
* a combination of both&lt;br /&gt;
&lt;br /&gt;
RPi.GPIO에서 software debouncing을 활성화 하기 위해서는,&lt;br /&gt;
```python&lt;br /&gt;
GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback, bouncetime=200)&lt;br /&gt;
#or&lt;br /&gt;
GPIO.add_event_callback(channel, my_callback, bouncetime=200)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## 참고&lt;br /&gt;
RPi.GPIO wiki: https://sourceforge.net/p/raspberry-gpio-python/wiki/BasicUsage/&lt;br /&gt;
https://learn.sparkfun.com/tutorials/raspberry-gpio&lt;br /&gt;
http://studymake.tistory.com/498&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Python_datetime_%EB%AA%A8%EB%93%88_quick_reference&amp;diff=259</id>
		<title>Python datetime 모듈 quick reference</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Python_datetime_%EB%AA%A8%EB%93%88_quick_reference&amp;diff=259"/>
				<updated>2019-09-11T10:21:49Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서: # datetime 모듈 quick reference 공식문서 참고: https://docs.python.org/ko/3/library/datetime.html 쉬운 한글자료: https://python.bakyeono.net/chapter-11-3.html 일상생...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# datetime 모듈 quick reference&lt;br /&gt;
공식문서 참고: https://docs.python.org/ko/3/library/datetime.html&lt;br /&gt;
쉬운 한글자료: https://python.bakyeono.net/chapter-11-3.html&lt;br /&gt;
일상생활에서 사용하는 날짜와 시간을 다루기 위한 파이썬 기본 모듈.&lt;br /&gt;
날짜를 나타내는  datetime.date class, 시각을 나타내는 datetime.time class, 둘 모두를 나타내는 datetime.datetime class 를 가지고 있다.&lt;br /&gt;
&lt;br /&gt;
당연하게도  OS에서 현재  timezone과 시간이 올바르게 셋팅되어있어야한다.&lt;br /&gt;
라즈베리파이에서는  raspi-config 프로그램으로 타임존을 셋팅해주면 된다.&lt;br /&gt;
&lt;br /&gt;
OS 기반의 시간을 다루는 time 모듈도 있으니 참고.&lt;br /&gt;
&lt;br /&gt;
## datetime.date class&lt;br /&gt;
* 특정날짜 객체 생성: datetime.date(1978,8,6)&lt;br /&gt;
* 오늘날짜 객체 생성: datetime.date.today()&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
# datetime.date-test.py&lt;br /&gt;
from datetime import date&lt;br /&gt;
&lt;br /&gt;
print(date(1978,8,6))&lt;br /&gt;
print(date.today())&lt;br /&gt;
&lt;br /&gt;
# 1978-08-06&lt;br /&gt;
# 2019-08-14&lt;br /&gt;
```&lt;br /&gt;
|datetime.date class 속성 또는 메서드	|값 또는 기능|&lt;br /&gt;
|-|-|&lt;br /&gt;
year|	년&lt;br /&gt;
month	|월&lt;br /&gt;
day|	일&lt;br /&gt;
weekday()	|요일 (월요일=0, 일요일=6)&lt;br /&gt;
isoformat()	|ISO 표준 문자열 표현&amp;lt;br&amp;gt;“년-월-일”(예: 1986-03-06)과 같은 형식&lt;br /&gt;
strftime(format)	| 형식을 지정하여 표현 (자료 참고)&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
# datetime.date-test.py&lt;br /&gt;
from datetime import date&lt;br /&gt;
&lt;br /&gt;
myBirthDay = date(1978,8,6)&lt;br /&gt;
today = date.today()&lt;br /&gt;
print(myBirthDay)&lt;br /&gt;
print(today)&lt;br /&gt;
&lt;br /&gt;
# 1978-08-06&lt;br /&gt;
# 2019-08-14&lt;br /&gt;
&lt;br /&gt;
print('나는 %d년 %d월 %d일에 태어남' %(myBirthDay.year, myBirthDay.month,myBirthDay.day))&lt;br /&gt;
# 나는 1978년 8월 6일에 태어남&lt;br /&gt;
&lt;br /&gt;
day = '월화수목금토일'[today.weekday()]&lt;br /&gt;
print('오늘은 %s요일이에요' %day)&lt;br /&gt;
# 오늘은 수요일이에요&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## datetime.time class&lt;br /&gt;
밀리세컨드까지 특정해 표현가능.&lt;br /&gt;
* 특정 시각 객체 생성: datetime.time(13,30,0,100000) # 13시30분0초.100000&lt;br /&gt;
|datetime.time class 속성 또는 메서드|	값 또는 기능|&lt;br /&gt;
|-|-|&lt;br /&gt;
hour	|시&lt;br /&gt;
minute|	분&lt;br /&gt;
second	|초&lt;br /&gt;
microsecond	|마이크로초&lt;br /&gt;
isoformat()	I|SO 표준 문자열 표현&lt;br /&gt;
strftime(format)	|임의 형식으로 문자열 표현&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
# python interpreter&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from datetime import time&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; at = time(15, 30, 45)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; at.hour, at.minute, at.second  # 시, 분, 초&lt;br /&gt;
(15, 30, 45)&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; at.microsecond                 # 마이크로초&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; at.isoformat()                 # ISO 표준 문자열 표현&lt;br /&gt;
'15:30:45'&lt;br /&gt;
```&lt;br /&gt;
### isoformat 문자열을 다시  datetime객체로&lt;br /&gt;
* datetime.fromisoformat(string)&lt;br /&gt;
&lt;br /&gt;
## datetime.datetime class&lt;br /&gt;
datetime.date 와 datetime.time 을 합쳐놓은 class. 양쪽의 속성과 메소드를 모두 사용할 수 있다.&lt;br /&gt;
* 특정 일시 객체 생성: datetime(년, 월, 일, 시, 분, 초, 마이크로초)&lt;br /&gt;
* 현재 일시 객체 생성: datetime.now()&lt;br /&gt;
* 날짜와 시각 결합: datetime.combine(날짜, 시각)&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
# python interpreter&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from datetime import datetime&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; datetime(2017, 11, 14)&lt;br /&gt;
datetime.datetime(2017, 11, 14, 0, 0)&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; datetime(2017, 11, 14, 8, 30)&lt;br /&gt;
datetime.datetime(2017, 11, 14, 8, 30)&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; datetime(2017, 11, 14, 8, 30, 50, 200000)&lt;br /&gt;
datetime.datetime(2017, 11, 14, 8, 30, 50, 200000)&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; datetime.now()  # 현재 일시&lt;br /&gt;
datetime.datetime(2017, 11, 14, 19, 4, 7, 950704)&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; datetime.combine(date.today(), time(15))  # 오늘 3시&lt;br /&gt;
datetime.datetime(2017, 11, 14, 15, 0)&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; now = datetime.now()&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; now.year, now.month, now.day, '월화수목금토일'[now.weekday()]&lt;br /&gt;
(2017, 11, 14, '화')&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; now.hour, now.minute, now.second, now.microsecond&lt;br /&gt;
(19, 8, 52, 283277)&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; now.date(), now.time()&lt;br /&gt;
(datetime.date(2017, 11, 14), datetime.time(19, 8, 52, 283277))&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; now.isoformat()&lt;br /&gt;
'2017-11-14T19:08:52.283277'&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## datetime.timedelta class&lt;br /&gt;
두시간 사이의 차를 나타내는 timedelta class를 사용가능하다.&lt;br /&gt;
예를 들어,&lt;br /&gt;
date2 = date1 + timedelta&lt;br /&gt;
timedelta = date1 - date2&lt;br /&gt;
와 같은 연산이 가능하다.&lt;br /&gt;
자세한 내용은 참고자료 검토.&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
# python interpreter&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from datetime import datetime, timedelta&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; now = datetime.now()                 # 현재 일시&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; after_1000h = timedelta(hours=1000)  # 1천 시간&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; now + after_1000h                    # 지금부터 1천 시간 후&lt;br /&gt;
datetime.datetime(2017, 12, 26, 11, 42, 32, 103816)&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; birthday = date(1986, 3, 6)          # 생년월일&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; today = date.toady()                 # 오늘&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; today - birthday                     # 태어난 뒤 오늘까지의 기간&lt;br /&gt;
datetime.timedelta(11576)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## 세계시계 datetime.tzinfo class&lt;br /&gt;
* time 이나 datetime 오브젝트의 멤버변수인 tzinfo가 None이 아닌 값(tzinfo나 그 서브클래스인 timezone 오브젝트)을 갖는 경우 세계시계로 작동하게 된다. (공식 문서에서 aware 라고 표현됨.)&lt;br /&gt;
* 생성자에  `tzinfo=` 아규먼트를 넣어줌으로써 세계시계작동시킨다.&lt;br /&gt;
* 써머타임 등 고려해 직접 tzinfo의 서브클래스를 작성 토록되어있지만(tzinfo는 추상클래스다) utc+9:00(서울 ) 등등 대부분의 간단한 경우를 나타내기 위해 이미 만들어져있는 timezone class를 사용할 수 있다.  &lt;br /&gt;
참고: https://spoqa.github.io/2019/02/15/python-timezone.html&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from datetime import datetime,  timedelta, tzinfo, timezone&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; datetime.utcnow()&lt;br /&gt;
datetime.datetime(2019, 8, 14, 21, 12, 22, 857347) # 영국 그리니치의 현재시간을 표시하고있기는 하지만 tzinfo=None으로, 세계시간 aware 하지는 않다.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; datetime.now(timezone.utc)&lt;br /&gt;
datetime.datetime(2019, 8, 14, 21, 14, 17, 112890, tzinfo=datetime.timezone.utc) # 세계시간 aware한 세계표준시&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; seoulnow = datetime.now(timezone(timedelta(hours=9))) # utc+9:00 (서울표준시)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; seoulnow&lt;br /&gt;
datetime.datetime(2019, 8, 15, 6, 18, 34, 177299, tzinfo=datetime.timezone(datetime.timedelta(0, 32400)))&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; seoulnow.utcoffset()&lt;br /&gt;
datetime.timedelta(0, 32400) # 세계표준시와 시차&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; seoulnow.tzname()&lt;br /&gt;
'UTC+09:00' # 타임존 이름보기&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; seoulnow.astimezone(timezone(timedelta(hours=-4))) # 같은 시간을 뉴욕표준시(utc-4:00)로 표현하면?  &lt;br /&gt;
datetime.datetime(2019, 8, 14, 17, 18, 34, 177299, tzinfo=datetime.timezone(datetime.timedelta(-1, 72000)))&lt;br /&gt;
```&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=PIL_(python_image_library)_/_pillow_quick_reference&amp;diff=258</id>
		<title>PIL (python image library) / pillow quick reference</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=PIL_(python_image_library)_/_pillow_quick_reference&amp;diff=258"/>
				<updated>2019-09-11T10:01:50Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서: # PIL (python Imaging library) Quick reference python 에서 비트맵 이미지를 그리고 편집하고 등등 여러가지 할 수 있는 오픈소스 이미지 프로세싱 라...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# PIL (python Imaging library) Quick reference&lt;br /&gt;
python 에서 비트맵 이미지를 그리고 편집하고 등등 여러가지 할 수 있는 오픈소스 이미지 프로세싱 라이브러리. 간편해서 매우널리 쓰인다.&lt;br /&gt;
&lt;br /&gt;
## PIL 설치&lt;br /&gt;
* 오리지날 PIL 은 개발중단 되었고,  pillow  프로젝트가 뒤를 잇고 있다. 대부분의 사용방법이 동일하다.&lt;br /&gt;
* 더 다양한 기능을 활용하기 위해 아래 외부 라이브러리를 먼저 설치해도 좋다.&lt;br /&gt;
(아래는 라즈베리파이에서  apt-get을 사용해 설치했으나 macos 에서는 homebrew사용해 설치 할 수 잇다.)&lt;br /&gt;
참고: https://pillow.readthedocs.io/en/stable/installation.html#external-libraries&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo apt-get install libjpeg-dev -y&lt;br /&gt;
$ sudo apt-get install zlib1g-dev -y&lt;br /&gt;
$ sudo apt-get install libfreetype6-dev -y&lt;br /&gt;
$ sudo apt-get install liblcms1-dev -y&lt;br /&gt;
$ sudo apt-get install libopenjp2-7 -y&lt;br /&gt;
$ sudo apt-get install libtiff5 -y&lt;br /&gt;
&lt;br /&gt;
$ sudo pip3 install pillow&lt;br /&gt;
```&lt;br /&gt;
## Image class&lt;br /&gt;
PIL 의 가장 기본이 되는 클래스. 비트맵 이미지 데이터를 갖는다.&lt;br /&gt;
* Image.open() 을 사용해 비트맵 이미지를 불러들여 Image 오브젝트 만들 수 있다.&lt;br /&gt;
&lt;br /&gt;
 ```python&lt;br /&gt;
form PIL import Image&lt;br /&gt;
im = Image.open(&amp;quot;hopper.ppm&amp;quot;)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
* 혹은 Image.new(mode, size, color=0) 를 통해 수동으로 이미지 오브젝트를 만들 수도 있다.&lt;br /&gt;
&lt;br /&gt;
|parameter|설명|&lt;br /&gt;
|-|-|&lt;br /&gt;
|mode| 1 (1-bit pixels, black and white, stored with one pixel per byte),&lt;br /&gt;
 ||L (8-bit pixels, black and white),&lt;br /&gt;
 ||P (8-bit pixels, mapped to any other mode using a color palette)&lt;br /&gt;
||RGB (3x8-bit pixels, true color)&lt;br /&gt;
||RGBA (4x8-bit pixels, true color with transparency mask)&lt;br /&gt;
||CMYK (4x8-bit pixels, color separation)&lt;br /&gt;
||YCbCr (3x8-bit pixels, color video format)&lt;br /&gt;
||Note that this refers to the JPEG, and not the ITU-R BT.2020, standard&lt;br /&gt;
||HSV (3x8-bit pixels, Hue, Saturation, Value color space)&lt;br /&gt;
||I (32-bit signed integer pixels)&lt;br /&gt;
||F (32-bit floating point pixels)|&lt;br /&gt;
|size| 2-tuple (width, height)|&lt;br /&gt;
|color|  배경색. RGB 모드인 경우 3-tuple|&lt;br /&gt;
&lt;br /&gt;
* array 로부터 이미지를 만들 수도 있는데, Numpy 사용하는 경우 유용하다.&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
from PIL import Image&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
im = Image.open('hopper.jpg')&lt;br /&gt;
a = np.asarray(im)&lt;br /&gt;
&lt;br /&gt;
im = Image.fromarray(a)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
* image.show()를 사용해 이미지를 미리보기 할 수 있다.&lt;br /&gt;
os의 미리보기 유틸리티를 활용한다. macos에서 는 quicklook으로 이미지를 보여준다.&lt;br /&gt;
&lt;br /&gt;
 ```python&lt;br /&gt;
im.show()&lt;br /&gt;
```&lt;br /&gt;
* image.save(filename) 으로 파일로 저장할 수 있다.&lt;br /&gt;
파일명에 따라 파일포맷을 자동으로 결정한다.&lt;br /&gt;
&lt;br /&gt;
 ```python&lt;br /&gt;
import os, sys&lt;br /&gt;
from PIL import Image&lt;br /&gt;
&lt;br /&gt;
 f,e = os,path.splitext(filename) # 파일명과 확장자로 나눔&lt;br /&gt;
outfile = f + &amp;quot;.jpg&amp;quot;&lt;br /&gt;
if filename != outfile:&lt;br /&gt;
  try:&lt;br /&gt;
    Image.open(filename).save(outfile) # .jpg로 save하면 자동으로 jpg 포맷으로 변환&lt;br /&gt;
  except:&lt;br /&gt;
    print(&amp;quot;cannot convert&amp;quot;, filename)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
* crop(), transpose(), paste() 할 수 있다.&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
box = (100,100,400,400)&lt;br /&gt;
region = im.crop(box)&lt;br /&gt;
&lt;br /&gt;
region = region.transpose(Image.ROTATE_180)&lt;br /&gt;
im.paste(region, box)&lt;br /&gt;
```&lt;br /&gt;
|Parameters| 기능|&lt;br /&gt;
|-|-|&lt;br /&gt;
|PIL.Image.FLIP_LEFT_RIGHT|좌우반전|&lt;br /&gt;
|PIL.Image.FLIP_TOP_BOTTOM|상하반전|&lt;br /&gt;
| PIL.Image.ROTATE_90|90도 회전|&lt;br /&gt;
| PIL.Image.ROTATE_180|180도 회전 |&lt;br /&gt;
|PIL.Image.ROTATE_270|-90도 회전 |&lt;br /&gt;
| PIL.Image.TRANSPOSE||&lt;br /&gt;
|PIL.Image.TRANSVERSE|-|&lt;br /&gt;
&lt;br /&gt;
## ImageDraw class&lt;br /&gt;
* Image  object 위에 간단한  2d drawing .&lt;br /&gt;
1. 빈 image를 만든다.&lt;br /&gt;
2. ImageDraw.Draw(image)로 drawing context를 득한다.&lt;br /&gt;
3. 여러가지 그림도 그리고 글씨도(!) 쓴다.&lt;br /&gt;
4. image.show()로 디스플레이한다.&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
from PIL import Image, ImageDraw, ImageFont&lt;br /&gt;
# get an image&lt;br /&gt;
base = Image.open('Pillow/Tests/images/hopper.png').convert('RGBA')&lt;br /&gt;
&lt;br /&gt;
# make a blank image for the text, initialized to transparent text color&lt;br /&gt;
txt = Image.new('RGBA', base.size, (255,255,255,0))&lt;br /&gt;
&lt;br /&gt;
# get a font&lt;br /&gt;
fnt = ImageFont.truetype('Pillow/Tests/fonts/FreeMono.ttf', 40)&lt;br /&gt;
# get a drawing context&lt;br /&gt;
d = ImageDraw.Draw(txt)&lt;br /&gt;
&lt;br /&gt;
# draw text, half opacity&lt;br /&gt;
d.text((10,10), &amp;quot;Hello&amp;quot;, font=fnt, fill=(255,255,255,128))&lt;br /&gt;
# draw text, full opacity&lt;br /&gt;
d.text((10,60), &amp;quot;World&amp;quot;, font=fnt, fill=(255,255,255,255))&lt;br /&gt;
&lt;br /&gt;
out = Image.alpha_composite(base, txt)&lt;br /&gt;
&lt;br /&gt;
out.show()&lt;br /&gt;
```&lt;br /&gt;
* ImageDraw.Draw(im, mode=None)&lt;br /&gt;
  im - 그림그릴 이미지 오브젝트&lt;br /&gt;
  mode - 흑백모드 '1',  grayscale모드 'L' , RGB, RGBA ...&lt;br /&gt;
&lt;br /&gt;
* ImageDraw.ImageDraw.point(xy, fill=None)&lt;br /&gt;
  xy - 점들의 좌표. 2-tuples like [(x, y), (x, y), ...] or numeric values like [x, y, x, y, ...]&lt;br /&gt;
  fill - 점 색&lt;br /&gt;
&lt;br /&gt;
* ImageDraw.ImageDraw.rectangle(xy, fill=None, outline=None, width=0)&lt;br /&gt;
  xy - 두 대각 꼭지점. [(x0, y0), (x1, y1)] or [x0, y0, x1, y1]&lt;br /&gt;
  outline - 선 색&lt;br /&gt;
  fill - 채움 색&lt;br /&gt;
  width - 라인 두께&lt;br /&gt;
&lt;br /&gt;
* ImageDraw.ImageDraw.line(xy, fill=None, width=0, joint=None)&lt;br /&gt;
  xy - 선분을 이루는 점의 연속. [(x, y), (x, y), ...] or [x, y, x, y, ...]&lt;br /&gt;
  fill - 채움 색&lt;br /&gt;
  width - 라인 두께 (pixel)&lt;br /&gt;
  joint - None or &amp;quot;curve&amp;quot; 모서리 둥글리기&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
from PIL import Image, ImageDraw&lt;br /&gt;
&lt;br /&gt;
im = Image.open(&amp;quot;hopper.jpg&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
draw = ImageDraw.Draw(im)&lt;br /&gt;
draw.line((0, 0) + im.size, fill=128)&lt;br /&gt;
draw.line((0, im.size[1], im.size[0], 0), fill=128)&lt;br /&gt;
&lt;br /&gt;
# write to stdout&lt;br /&gt;
im.save(sys.stdout, &amp;quot;PNG&amp;quot;)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
* ImageDraw.ImageDraw.arc(xy, start, end, fill=None, width=0)&lt;br /&gt;
  xy - 아크 외접 사각형. [(x0, y0), (x1, y1)] or [x0, y0, x1, y1]&lt;br /&gt;
  start - 출발각(degree), 3시방향이 0˚부터 시작해서 시계방향으로 증가.&lt;br /&gt;
  end - 도착각&lt;br /&gt;
  fill - 도형의 색&lt;br /&gt;
  width - 라인 두께 (pixel)&lt;br /&gt;
&lt;br /&gt;
* ImageDraw.ImageDraw.ellipse(xy, fill=None, outline=None, width=0)&lt;br /&gt;
  xy - 타원 외접 사각형. [(x0, y0), (x1, y1)] or [x0, y0, x1, y1]&lt;br /&gt;
  outline - 선 색&lt;br /&gt;
  fill - 채움 색&lt;br /&gt;
  width - 라인 두께(pixel)&lt;br /&gt;
&lt;br /&gt;
## ImageText class -  text 표시하기&lt;br /&gt;
폰트를 로딩한 후, ImageDraw.text() 를 사용해 텍스트를 표시할 수 있다.&lt;br /&gt;
&lt;br /&gt;
*  ImageFont.truetype(font=None, size=10, index=0, encoding='', layout_engine=None)&lt;br /&gt;
font - truetype font  파일.&lt;br /&gt;
size - 폰트 크기. piont 단위&lt;br /&gt;
index - light, bold  등 fontface  선택. 디폴트는 index=0&lt;br /&gt;
encoding - 'unic'(unicode. default), 'symb'(Microsoft Symbol), 'ADOB'(Adobe Standard), 'ADBE'(Adobe Export), 'armn'(Apple Roman)&lt;br /&gt;
&lt;br /&gt;
  ```python&lt;br /&gt;
  from PIL import Image, ImageDraw, ImageFont&lt;br /&gt;
&lt;br /&gt;
  im = Image.new('RGB', (128,64),0)&lt;br /&gt;
  draw = ImageDraw.Draw(im)&lt;br /&gt;
&lt;br /&gt;
  font = ImageFont.truetype(&amp;quot;Arial.ttf&amp;quot;,15)&lt;br /&gt;
&lt;br /&gt;
  draw.text((10,10), &amp;quot;hello world\n I'm a boy \n You are a girl&amp;quot;, font=font)&lt;br /&gt;
  im.show()&lt;br /&gt;
&lt;br /&gt;
  ```&lt;br /&gt;
&lt;br /&gt;
* ImageDraw.ImageDraw.text(xy, text, fill=None, font=None, anchor=None, spacing=0, align=&amp;quot;left&amp;quot;, direction=None, features=None, language=None)&lt;br /&gt;
텍스트를 표시한다.&lt;br /&gt;
xy - 텍스트 위치. 텍스트 상자의 좌상단위치임.&lt;br /&gt;
text - 표시할 텍스트.&lt;br /&gt;
fill - 텍스트 컬러&lt;br /&gt;
font - ImageFont instance&lt;br /&gt;
spacing - 줄 간격,(pixel)&lt;br /&gt;
align - &amp;quot;left&amp;quot;, &amp;quot;center&amp;quot; or &amp;quot;right&amp;quot;&lt;br /&gt;
direction - 'rtl'(right to left) or 'ltr' or 'ttb'(top to bottom). libraqm 라이브러리 필요함.&lt;br /&gt;
features - opentype의 다양한 기능&lt;br /&gt;
language - https://www.w3.org/International/articles/language-tags/&lt;br /&gt;
&lt;br /&gt;
* ImageDraw.ImageDraw.textsize(text, font=None, spacing=4, direction=None, features=None, language=None)&lt;br /&gt;
 표시될 text의 크기를 (가로, 세로)(pixel) 로 리턴한다.&lt;br /&gt;
text - 표시할 텍스트&lt;br /&gt;
font - ImageFont instance&lt;br /&gt;
spacing - 행 간격&lt;br /&gt;
&lt;br /&gt;
### 한글표시&lt;br /&gt;
* 한글폰트가 잘 표시되지 않는다는 리포트가 많이 있었으나 테스트 결과 별다른 조작 없이 잘 된다.&lt;br /&gt;
python2에서 유니코드 지원이 원활치 않아 있었던 문제로 생각된다. python3에서는 잘 된다.&lt;br /&gt;
* 폰트파일의 위치는 중요하다. 기본적으로 cwd(currunt working directory - 디폴트는 실행중인 스크립트와 같은 위치) 에서 폰트를 찾고, 못찾으면 os에 설치된 폰트 파일을 찾아서 사용한다.(똑똑한데?) 그럼에도 내가 한참 헤맨 이유는 atom editor의 script  package가 편집중인 스크립트의 위치가 아닌 프로젝트의 위치를  cwd 로 하도록 설정되어있었기 때문... script package 설정변경으로 간단히 해결됨.&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
from PIL import Image, ImageDraw, ImageFont&lt;br /&gt;
&lt;br /&gt;
im = Image.new('RGB', (128,64),0)&lt;br /&gt;
draw = ImageDraw.Draw(im)&lt;br /&gt;
&lt;br /&gt;
font = ImageFont.truetype(&amp;quot;malgun.ttf&amp;quot;,15,0)&lt;br /&gt;
&lt;br /&gt;
draw.text(&lt;br /&gt;
(10,10),&lt;br /&gt;
'''세종대왕&lt;br /&gt;
만만세''',&lt;br /&gt;
font=font)&lt;br /&gt;
&lt;br /&gt;
im.show()&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
![||600](https://cl.ly/5d93f4/Image%202019-07-30%20at%2010.13.53%20PM.png)&lt;br /&gt;
&lt;br /&gt;
## Image sequences (GIF animation)&lt;br /&gt;
* Image.open(&amp;quot;....gif&amp;quot;) 로 여러 프레임이 있는 이미지를 열었다면, image.seek() 과 image.tell()로 특정 프레임을 로드하고 볼 수 있다.  파일 끝에서는  EOFError 발생한다.&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
from PIL import Image&lt;br /&gt;
im = Image.open(&amp;quot;source.gif&amp;quot;)&lt;br /&gt;
im.seek(1)&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    while 1:&lt;br /&gt;
        im.seek(im.tell()+1)&lt;br /&gt;
        im.show()&lt;br /&gt;
except EOFError:&lt;br /&gt;
    pass&lt;br /&gt;
```&lt;br /&gt;
* ImageSequence.Iterator 를 사용하면 좀 더 편하게 프레임을 조작 할 수 있다.&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
from PIL import Image&lt;br /&gt;
from PIL import ImageSequence&lt;br /&gt;
&lt;br /&gt;
im = Image.open(&amp;quot;source.gif&amp;quot;)&lt;br /&gt;
for frame in ImageSequence.Iterator(im):&lt;br /&gt;
    frame.show()&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## 두개의 image 합치기&lt;br /&gt;
* Image.paste(im, box= None, mask= None)  &lt;br /&gt;
함수를 사용해서 원래의 이미지 위해 다른 이미지를 덧씌울 수 있다.&lt;br /&gt;
 * im : 덧씌울 Image  object&lt;br /&gt;
 * box: 2-tuple or 4-tuple 로, 덧씌울 이미지의 위치&lt;br /&gt;
 * mask: 원한다면  mask적용할 수도 있다('1'mode 이미지, 혹은  RGBA 모드 이미지가 사용되면  A channel). 255 값을 갖는 점은 이미지가 덧씌워지고, 0값을 갖는 점은 원래의 이미지가 그대로 사용된다.&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_pi%EC%9D%98_Headless_%EC%84%A4%EC%A0%95&amp;diff=257</id>
		<title>Raspberry pi의 Headless 설정</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_pi%EC%9D%98_Headless_%EC%84%A4%EC%A0%95&amp;diff=257"/>
				<updated>2019-09-11T07:33:49Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: Doguin님이 Raspberry pi의 Headless 설정 문서를 Raspberry pi zero 설정 ( headless ) 문서로 이동했습니다&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#넘겨주기 [[Raspberry pi zero 설정 ( headless )]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_pi_zero_%EC%84%A4%EC%A0%95_(_headless_)&amp;diff=256</id>
		<title>Raspberry pi zero 설정 ( headless )</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_pi_zero_%EC%84%A4%EC%A0%95_(_headless_)&amp;diff=256"/>
				<updated>2019-09-11T07:33:49Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: Doguin님이 Raspberry pi의 Headless 설정 문서를 Raspberry pi zero 설정 ( headless ) 문서로 이동했습니다&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Raspberry pi zero w 셋업&lt;br /&gt;
## 킷트 내용물 확인&lt;br /&gt;
![||600](https://cl.ly/89bb93/Image%202019-06-07%20at%2011.03.03%20AM.png)&lt;br /&gt;
## 방열판 부착&lt;br /&gt;
![||600](https://cl.ly/010ca3/Image%202019-06-07%20at%2011.13.35%20AM.png)&lt;br /&gt;
&lt;br /&gt;
## GPIO 연결이 쉽도록 핀헤더 납땜한다.&lt;br /&gt;
더 슬림하게 만들려면 핀헤더를 통으로 붙이지 않고 선택적으로 직접 와이어를 납땜하여도 좋다.&lt;br /&gt;
&lt;br /&gt;
## raspbian 다운로드&lt;br /&gt;
https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
&lt;br /&gt;
![||600](https://cl.ly/140bab/Screen%20Recording%202019-06-07%20at%2011.16%20AM.gif)&lt;br /&gt;
## 이미지 버닝 툴 사용해 sd카드에 os 담기&lt;br /&gt;
### etcher : 크로스 플랫폼 이미지 버닝 툴&lt;br /&gt;
다운로드: https://www.balena.io/etcher/&lt;br /&gt;
![||600](https://cl.ly/07dc25/Screen%20Recording%202019-06-07%20at%2011.36%20AM.gif)&lt;br /&gt;
&lt;br /&gt;
## 네트워크 연결을 위한 사전작업&lt;br /&gt;
완성된 SD카드 뽑았다가 다시 꽂아보면, boot 라는 이름으로 라즈비안 이 설치되어있다. 여기에 몇개 파일을 수정해주어야 한다.&lt;br /&gt;
![||600](https://cl.ly/smt5/Image%202018-07-07%20at%202.59.16%20PM.png)&lt;br /&gt;
&lt;br /&gt;
참고: https://medium.com/@aallan/setting-up-a-headless-raspberry-pi-zero-3ded0b83f274&lt;br /&gt;
참고: https://www.losant.com/blog/getting-started-with-the-raspberry-pi-zero-w-without-a-monitor&lt;br /&gt;
&lt;br /&gt;
## 네트워크 연결 위한 설정파일 수정&lt;br /&gt;
wifi를 사용하거나, 혹은 wifi동글이 없거나 공유기가 없다면 USB케이블을 사용할해 노트북에 연결할 수 있다.&lt;br /&gt;
&lt;br /&gt;
### SSH 켜기 설정&lt;br /&gt;
SD카드의 루트 디렉토리 `/boot`에 `ssh`라는 이름의 빈 파일을 하나 새로 만든다.(확장자 없음) 그러면 부팅시 SSH가 켜진다.&lt;br /&gt;
&lt;br /&gt;
#### mac&lt;br /&gt;
터미널을 연다.&lt;br /&gt;
```bash&lt;br /&gt;
$ touch /Volumes/boot/ssh&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/d1ca13/Image%202019-06-07%20at%2012.12.23%20PM.png)&lt;br /&gt;
#### windows&lt;br /&gt;
notepad(메모장)을 연다.&lt;br /&gt;
아무런 내용 없이 Save as...한다.&lt;br /&gt;
반드시 file type을 all로 선택하고 확장자 없이 저장한다.&lt;br /&gt;
![||600](https://cl.ly/c40175/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA(1).png)&lt;br /&gt;
&lt;br /&gt;
### wifi 켜기 설정&lt;br /&gt;
마찬가지로 `/boot`에 `wpa_supplicant.conf`파일을 아래 내용으로 만든다. 일반적인 텍스트 에디터 사용한다.&lt;br /&gt;
```&lt;br /&gt;
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev&lt;br /&gt;
update_config=1&lt;br /&gt;
&lt;br /&gt;
network={&lt;br /&gt;
	ssid=&amp;quot;와이파이 이름(SSID)&amp;quot;&lt;br /&gt;
	psk=&amp;quot;암호&amp;quot;&lt;br /&gt;
	key_mgmt=WPA-PSK&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/98fcb7/Image%202019-06-07%20at%2012.20.13%20PM.png)&lt;br /&gt;
&lt;br /&gt;
#### tip. wifi 설정의 변경&lt;br /&gt;
 &amp;gt;/boot 에 만든 wap_supplicant.conf 파일은 부팅시 자동으로 `/etc/wpa_supplicant/wpa_supplicant.conf`위치로 옮겨진다.&lt;br /&gt;
&amp;gt;이후 wifi 설정을 수정해야 하는 경우가 생긴다면 (집에서 사용하던 라즈베리를 사무실로 옮긴다던지...) 이 위치에서 직접 수정하면 된다.&lt;br /&gt;
&amp;gt;```bash&lt;br /&gt;
&amp;gt;$ sudo nano /etc/wpa_supplicant/wap_supplicant.conf&lt;br /&gt;
&amp;gt;```&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### USB OTG 켜기 설정&lt;br /&gt;
raspberry pi model A,B의 경우에는 ethernet 단자가 있으므로 wifi연결이 안되어있다고 해도 바로 연결해 사용할 수 있지만 이더넷 단자가 없는 zero 모델같으면 USB 포트에 IP address를 부여할 수 있도록 해 주어 usb를 통해 ssh나 VNC 연결을 할 수 있다.&lt;br /&gt;
zero의 경우에도 wifi나 usb otg 둘 중 하나만 작동되면 되지만 일단 둘 다 켜두자. 특히 집에서 사용하다가 사무실로 옮겼다던지 하는 상황에서 wifi 연결을 재설정하려면 필요하다.&lt;br /&gt;
`/boot` 디렉토리에 `config.txt`파일을 열어서 편집한다.&lt;br /&gt;
```&lt;br /&gt;
dtoverlay=dwc2&lt;br /&gt;
```&lt;br /&gt;
라는 항목이 있는지 살펴보고 (아마 아래쪽에 있을 것임) 만약 없다면 추가한다.&lt;br /&gt;
![||600](https://cl.ly/345dea/Image%202019-06-07%20at%2012.27.45%20PM.png)&lt;br /&gt;
또한 `cmdline.txt`파일을 열어서 (정확하게) 아래와 같이 `rootwait` 뒤에 한 칸 띄고&lt;br /&gt;
`modules-load=dwc2,g_ether`를 추가한다.&lt;br /&gt;
&lt;br /&gt;
원래 cmdline.txt 내용:&lt;br /&gt;
```&lt;br /&gt;
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=020c3677–02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
수정 후 cmdline.txt 내용:&lt;br /&gt;
```&lt;br /&gt;
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=020c3677–02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
##  USB를 통해 노트북-라즈베리파이 네트워크 구성(RNDIS)&lt;br /&gt;
sd 카드를 삽입하고, 노트북과 usb로 연결한다. 이때,  PWR가 아닌  USB에 연결한다.&lt;br /&gt;
![||600](https://cl.ly/52ffbe/Image%202019-06-07%20at%2012.49.20%20PM.png)&lt;br /&gt;
&lt;br /&gt;
#### 이 때! windows는 RNDIS 드라이버를 설치해야 usb를 네트워크 포트로 쓸 수 있다.&lt;br /&gt;
참고: https://www.factoryforward.com/pi-zero-w-headless-setup-windows10-rndis-driver-issue-resolved/&lt;br /&gt;
* 윈도우10 용 RNDIS 드라이버를 다운로드후 압축을 푼다. [여기에서](http://web1.moddevices.com/shared/mod-duo-rndis.zip)&lt;br /&gt;
* 라즈베리파이를 usb에 꽂는다.&lt;br /&gt;
* 장치관리자를 열어 com&amp;amp;port 항목에 있는 라즈베리파이를 우클릭한다.&lt;br /&gt;
![||600](https://cl.ly/b6080b/Image%2525202019-06-13%252520at%2525204.53.36%252520PM.png)&lt;br /&gt;
* 드라이버 업데이트 &amp;gt; 컴퓨터에서 드라이버 소프트웨어 검색 &amp;gt; 아까 압축 풀어둔 RNDIS 드라이버 폴더 선택![||600](https://cl.ly/da4a5e/Image%2525202019-06-13%252520at%2525204.58.27%252520PM.png)&lt;br /&gt;
* 이제 장치관리자에서 '네트워크 어댑터' 아래에 'USB Ethernet/ RNDIS Gadget'이 보인다.&lt;br /&gt;
![||600](https://cl.ly/23c055/Image%202019-06-13%20at%204.59.38%20PM.png)&lt;br /&gt;
&lt;br /&gt;
#### 인터넷 공유&lt;br /&gt;
##### mac&lt;br /&gt;
* usb 네트워크로 인터넷을 사용할 수 있도록 맥북에서 인터넷 공유를 켜준다.&lt;br /&gt;
* system 설정 -&amp;gt; 공유 -&amp;gt; 인터넷 공유&lt;br /&gt;
![||600](https://cl.ly/aec3ec/Image%202019-08-31%20at%2012.38.48%20PM.png)  &lt;br /&gt;
&lt;br /&gt;
#### windows&lt;br /&gt;
* 시작메뉴 우클릭 &amp;gt; 네트워크 연결 &amp;gt; 어댑터 옵션 변경 &amp;gt; 현재 인터넷 연결된 네트워크(이더넷 or wifi) 선택. 우클릭 &amp;gt; 속성 &amp;gt; 공유탭 &amp;gt; '다른 네트워크 사용자가 이 컴퓨터의 인터넷 연결을 통해 연결할 수 있도록 허용' 선택 &amp;gt; 확인&lt;br /&gt;
![||600](https://cl.ly/474173/Image%202019-09-11%20at%203.40.39%20PM.png)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## ssh 접속&lt;br /&gt;
```bash&lt;br /&gt;
$ssh pi@raspberrypi.local&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/b12f8a/Image%2525202019-06-10%252520at%25252010.00.26%252520PM.png)&lt;br /&gt;
![||600](https://cl.ly/ebff11/Image%2525202019-06-10%252520at%25252010.11.31%252520PM.png)&lt;br /&gt;
&lt;br /&gt;
### 위의 방법으로 안되는 경우...(raspberrypi.local이름이 충돌...)&lt;br /&gt;
도메인명이 아니라 ip주소를 직접 알아내 입력하자.&lt;br /&gt;
#### windows는 먼저 Bonjour를 설치한다.&lt;br /&gt;
https://support.apple.com/kb/DL999?locale=en_US&amp;amp;viewlocale=ko_KR&lt;br /&gt;
![||600](https://cl.ly/96c268/Image%2525202019-06-10%252520at%2525209.36.36%252520PM.png)&lt;br /&gt;
설치가 끝나면 이제 명령행에서 `dns-sd`명령어를 쓸 수 있다.&lt;br /&gt;
#### mac, windows 공통&lt;br /&gt;
* 윈도우는 `cmd`, 맥은 `terminal`을 실행시킨다.&lt;br /&gt;
* `dns-sd` 명령어의  `-G v4 &amp;lt;NAME&amp;gt;`  옵션을 사용하면 맨 마지막에 오는 것이 그 컴퓨터(&amp;lt;NAME&amp;gt;의 컴퓨터)가 사용하는 ip 주소이다. (dns-sd 프로그램을 끝낼 때에는 `ctrl+C`)&lt;br /&gt;
```bash&lt;br /&gt;
$ dns-sd -G v4 raspberrypi.local&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/skI6/Image%202018-07-06%20at%207.28.34%20PM.png)&lt;br /&gt;
&lt;br /&gt;
이렇게 알아낸 주소로 ssh접속한다. ID: pi, PW: raspberry 가 디폴트이다.&lt;br /&gt;
```bash&lt;br /&gt;
$ ssh pi@위에서 알아낸 IP주소&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/sjtn/Image%202018-07-06%20at%207.35.16%20PM.png)&lt;br /&gt;
### 윈도우에 SSH가 설치되어있지 않는 경우&lt;br /&gt;
putty를 설치해 사용한다.&lt;br /&gt;
&lt;br /&gt;
### warning: possible dns spoofing detected! 메시지 해결법&lt;br /&gt;
![||600](https://cl.ly/a0c94b/Image%202019-06-10%20at%2010.13.28%20PM.png)&lt;br /&gt;
ㅊㅏㅁㄱㅗ:http://www.coolio.so/ssh-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%A0%91%EC%86%8D%EC%8B%9C-known_hosts-%EC%B6%A9%EB%8F%8C-%EC%97%90%EB%9F%AC-%EB%B0%9C%EC%83%9D%EC%8B%9C/&lt;br /&gt;
&lt;br /&gt;
가장 빠르고 쉬운 방법은 아래와 같이  ssh-keygen 명령으로 ip에 대해 유효한 연결을 업데이트 하는 것이다.&lt;br /&gt;
```bash&lt;br /&gt;
$ ssh-keygen -R 192.168.0.108 # 연결하려고하는  IP&lt;br /&gt;
```&lt;br /&gt;
### hostname  변경&lt;br /&gt;
여러대의 라즈베리가 동일한 네트워크에 있는 경우, 연결할 때 헷갈린다. 그러므로 네트워크에서 보이는 장치명을 변경해 구분할 수 있도록 해주자.&lt;br /&gt;
기본값은   raspberrypi 로 되어있는데, 이를 각자 마음에 드는 이름으로 바꾸어주면 된다.&lt;br /&gt;
* raspi-config  프로그램으로 간단히 할 수 있다.&lt;br /&gt;
```bash&lt;br /&gt;
$ raspi-config&lt;br /&gt;
```&lt;br /&gt;
raspi-config 프로그램실행 -&amp;gt; 2.Network Options&lt;br /&gt;
![||600](https://cl.ly/eb9ae8/Image%202019-09-04%20at%2011.15.48%20AM.png)&lt;br /&gt;
-&amp;gt; N1 Hostname&lt;br /&gt;
![||600](https://cl.ly/ac0143/Image%202019-09-04%20at%2011.17.04%20AM.png)&lt;br /&gt;
-&amp;gt; 원하는 이름으로 바꾸어준다.(여기서는 raspberrypi -&amp;gt; doguinpi 로 바꾸었다.)&lt;br /&gt;
![||600](https://cl.ly/6abd47/Screen%20Recording%202019-09-04%20at%2011.19%20AM.gif)&lt;br /&gt;
그다음부턴 새로운 이름으로 접속할 수 있다.&lt;br /&gt;
![||600](https://cl.ly/4ffc4a/Image%202019-09-04%20at%2011.20.54%20AM.png)&lt;br /&gt;
&lt;br /&gt;
## GUI환경 사용(VNC로 화면 공유)&lt;br /&gt;
### 라이브러리 목록 업데이트 &amp;amp; 업그레이드&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo apt-get update&lt;br /&gt;
```&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo apt-get upgrade&lt;br /&gt;
```&lt;br /&gt;
업그레이드 완료되면 다운로드된 업데이트 파일을 지워 용량 확보&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo apt-get clean&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### VNC Server 설치&lt;br /&gt;
* 최근의 라즈비안에는 realVNC가 기본탑재되어있다. 새로인 install 할 필요는 없다. 구지 해야한다면&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo apt-get update&lt;br /&gt;
$ sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&lt;br /&gt;
```&lt;br /&gt;
* 설치가 끝나면 `raspi-config`를 실행해 vnc 옵션을 켜준다.&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo raspi-config&lt;br /&gt;
```&lt;br /&gt;
Interfacing Option -&amp;gt; P3 VNC -&amp;gt; YES를 선택.&lt;br /&gt;
![||600](https://cl.ly/sm1u/Image%202018-07-08%20at%207.56.01%20AM.png)&lt;br /&gt;
&lt;br /&gt;
재부팅한다.&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
```&lt;br /&gt;
### 노트북에 vnc viewer 설치 및 화면 공유 실행&lt;br /&gt;
* `dns-sd -G v4 raspberrypi.local` 명령어를 사용 RPI 의 IP address를 알 수 있다.&lt;br /&gt;
&lt;br /&gt;
* 노트북에 VNC viewer를 설치한다. 여기에서 받을 수 있다. https://www.realvnc.com/en/connect/download/viewer/&lt;br /&gt;
주소창에 'raspberrypi.local' 혹은 위에서 얻은 라즈베리파이의 IP주소를 넣는다. 처음 연결할 때 뭐라고 경고가 뜬다. 연결해도 되겠냐고 확인하는 거다.&lt;br /&gt;
&lt;br /&gt;
![||600](https://cl.ly/f088c7/Image%202019-06-10%20at%2010.49.50%20PM.png)&lt;br /&gt;
&lt;br /&gt;
* 기본 로그인 아이디는 ‘pi’, 패스워드는 ’raspberry’이다.&lt;br /&gt;
* 최초 연결하면 언어와 타임존 등을 설정한다.&lt;br /&gt;
* 키보드와 마우스, 모니터 없이 노트북에서 잘 컨트롤 됨을 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxbP/Image%202018-03-06%20at%205.04.06%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
* 해상도를 적절히 (작게)하면 속도가 만족스럽다. 1024x768정도면 괜찮은듯. (위에서 한 번 나온 configuration메뉴에서 설정할 수 있다.)&lt;br /&gt;
* 마지막으로, ip address는 보통 고정되어있지 않고 부팅할 때마다 바뀌기 때문에, 어느날 갑자기 VNC연결이 안 될 수도 있다.&lt;br /&gt;
&lt;br /&gt;
* 노트북과 라즈베리파이 사이에 파일교환이 필요한 경우 VNC viewer의 화살표 아이콘을 누르거나, 라즈베리파이의 작업표시줄상 VNC아이콘을 누르면 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/2h333e1Z3R3X/Image%202017-10-24%20at%208.11.24%20%EC%98%A4%ED%9B%84.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
## 한글설치&lt;br /&gt;
&lt;br /&gt;
참고: http://cccding.tistory.com/96&lt;br /&gt;
1. 한글폰트 설치&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
sudo apt-get install fonts-unfonts-core&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxzH/Image%202018-03-06%20at%204.57.23%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. ibus한글 입력기 설치&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo apt-get install ibus-hangul&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
3. Raspberry Pi configuration의 Localisation 설정.&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxFi/Image%202018-03-06%20at%204.58.18%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pycS/Image%202018-03-06%20at%204.58.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxkS/Image%202018-03-06%20at%204.58.40%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timezone은 Asia &amp;gt; Seoul로 …&lt;br /&gt;
OK를 누르면 재부팅~!&lt;br /&gt;
&lt;br /&gt;
* 재부팅 후 우상단에 EN아이콘을 눌러 한글 입력기를 선택.&lt;br /&gt;
* 다시 한번 눌러 한글상태에 체크&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyTR/Image%202018-03-06%20at%204.59.14%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 메뉴도 한글로 되어있고 한글 입력도 잘 된다. 한&amp;lt;-&amp;gt;영 변환키는 [shift]+[space]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxVm/Image%202018-03-06%20at%205.02.15%20AM.png&amp;quot; width=600&amp;gt;&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_pi_zero_%EC%84%A4%EC%A0%95_(_headless_)&amp;diff=255</id>
		<title>Raspberry pi zero 설정 ( headless )</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_pi_zero_%EC%84%A4%EC%A0%95_(_headless_)&amp;diff=255"/>
				<updated>2019-09-11T07:32:32Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Raspberry pi zero w 셋업&lt;br /&gt;
## 킷트 내용물 확인&lt;br /&gt;
![||600](https://cl.ly/89bb93/Image%202019-06-07%20at%2011.03.03%20AM.png)&lt;br /&gt;
## 방열판 부착&lt;br /&gt;
![||600](https://cl.ly/010ca3/Image%202019-06-07%20at%2011.13.35%20AM.png)&lt;br /&gt;
&lt;br /&gt;
## GPIO 연결이 쉽도록 핀헤더 납땜한다.&lt;br /&gt;
더 슬림하게 만들려면 핀헤더를 통으로 붙이지 않고 선택적으로 직접 와이어를 납땜하여도 좋다.&lt;br /&gt;
&lt;br /&gt;
## raspbian 다운로드&lt;br /&gt;
https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
&lt;br /&gt;
![||600](https://cl.ly/140bab/Screen%20Recording%202019-06-07%20at%2011.16%20AM.gif)&lt;br /&gt;
## 이미지 버닝 툴 사용해 sd카드에 os 담기&lt;br /&gt;
### etcher : 크로스 플랫폼 이미지 버닝 툴&lt;br /&gt;
다운로드: https://www.balena.io/etcher/&lt;br /&gt;
![||600](https://cl.ly/07dc25/Screen%20Recording%202019-06-07%20at%2011.36%20AM.gif)&lt;br /&gt;
&lt;br /&gt;
## 네트워크 연결을 위한 사전작업&lt;br /&gt;
완성된 SD카드 뽑았다가 다시 꽂아보면, boot 라는 이름으로 라즈비안 이 설치되어있다. 여기에 몇개 파일을 수정해주어야 한다.&lt;br /&gt;
![||600](https://cl.ly/smt5/Image%202018-07-07%20at%202.59.16%20PM.png)&lt;br /&gt;
&lt;br /&gt;
참고: https://medium.com/@aallan/setting-up-a-headless-raspberry-pi-zero-3ded0b83f274&lt;br /&gt;
참고: https://www.losant.com/blog/getting-started-with-the-raspberry-pi-zero-w-without-a-monitor&lt;br /&gt;
&lt;br /&gt;
## 네트워크 연결 위한 설정파일 수정&lt;br /&gt;
wifi를 사용하거나, 혹은 wifi동글이 없거나 공유기가 없다면 USB케이블을 사용할해 노트북에 연결할 수 있다.&lt;br /&gt;
&lt;br /&gt;
### SSH 켜기 설정&lt;br /&gt;
SD카드의 루트 디렉토리 `/boot`에 `ssh`라는 이름의 빈 파일을 하나 새로 만든다.(확장자 없음) 그러면 부팅시 SSH가 켜진다.&lt;br /&gt;
&lt;br /&gt;
#### mac&lt;br /&gt;
터미널을 연다.&lt;br /&gt;
```bash&lt;br /&gt;
$ touch /Volumes/boot/ssh&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/d1ca13/Image%202019-06-07%20at%2012.12.23%20PM.png)&lt;br /&gt;
#### windows&lt;br /&gt;
notepad(메모장)을 연다.&lt;br /&gt;
아무런 내용 없이 Save as...한다.&lt;br /&gt;
반드시 file type을 all로 선택하고 확장자 없이 저장한다.&lt;br /&gt;
![||600](https://cl.ly/c40175/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA(1).png)&lt;br /&gt;
&lt;br /&gt;
### wifi 켜기 설정&lt;br /&gt;
마찬가지로 `/boot`에 `wpa_supplicant.conf`파일을 아래 내용으로 만든다. 일반적인 텍스트 에디터 사용한다.&lt;br /&gt;
```&lt;br /&gt;
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev&lt;br /&gt;
update_config=1&lt;br /&gt;
&lt;br /&gt;
network={&lt;br /&gt;
	ssid=&amp;quot;와이파이 이름(SSID)&amp;quot;&lt;br /&gt;
	psk=&amp;quot;암호&amp;quot;&lt;br /&gt;
	key_mgmt=WPA-PSK&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/98fcb7/Image%202019-06-07%20at%2012.20.13%20PM.png)&lt;br /&gt;
&lt;br /&gt;
#### tip. wifi 설정의 변경&lt;br /&gt;
 &amp;gt;/boot 에 만든 wap_supplicant.conf 파일은 부팅시 자동으로 `/etc/wpa_supplicant/wpa_supplicant.conf`위치로 옮겨진다.&lt;br /&gt;
&amp;gt;이후 wifi 설정을 수정해야 하는 경우가 생긴다면 (집에서 사용하던 라즈베리를 사무실로 옮긴다던지...) 이 위치에서 직접 수정하면 된다.&lt;br /&gt;
&amp;gt;```bash&lt;br /&gt;
&amp;gt;$ sudo nano /etc/wpa_supplicant/wap_supplicant.conf&lt;br /&gt;
&amp;gt;```&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### USB OTG 켜기 설정&lt;br /&gt;
raspberry pi model A,B의 경우에는 ethernet 단자가 있으므로 wifi연결이 안되어있다고 해도 바로 연결해 사용할 수 있지만 이더넷 단자가 없는 zero 모델같으면 USB 포트에 IP address를 부여할 수 있도록 해 주어 usb를 통해 ssh나 VNC 연결을 할 수 있다.&lt;br /&gt;
zero의 경우에도 wifi나 usb otg 둘 중 하나만 작동되면 되지만 일단 둘 다 켜두자. 특히 집에서 사용하다가 사무실로 옮겼다던지 하는 상황에서 wifi 연결을 재설정하려면 필요하다.&lt;br /&gt;
`/boot` 디렉토리에 `config.txt`파일을 열어서 편집한다.&lt;br /&gt;
```&lt;br /&gt;
dtoverlay=dwc2&lt;br /&gt;
```&lt;br /&gt;
라는 항목이 있는지 살펴보고 (아마 아래쪽에 있을 것임) 만약 없다면 추가한다.&lt;br /&gt;
![||600](https://cl.ly/345dea/Image%202019-06-07%20at%2012.27.45%20PM.png)&lt;br /&gt;
또한 `cmdline.txt`파일을 열어서 (정확하게) 아래와 같이 `rootwait` 뒤에 한 칸 띄고&lt;br /&gt;
`modules-load=dwc2,g_ether`를 추가한다.&lt;br /&gt;
&lt;br /&gt;
원래 cmdline.txt 내용:&lt;br /&gt;
```&lt;br /&gt;
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=020c3677–02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
수정 후 cmdline.txt 내용:&lt;br /&gt;
```&lt;br /&gt;
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=020c3677–02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
##  USB를 통해 노트북-라즈베리파이 네트워크 구성(RNDIS)&lt;br /&gt;
sd 카드를 삽입하고, 노트북과 usb로 연결한다. 이때,  PWR가 아닌  USB에 연결한다.&lt;br /&gt;
![||600](https://cl.ly/52ffbe/Image%202019-06-07%20at%2012.49.20%20PM.png)&lt;br /&gt;
&lt;br /&gt;
#### 이 때! windows는 RNDIS 드라이버를 설치해야 usb를 네트워크 포트로 쓸 수 있다.&lt;br /&gt;
참고: https://www.factoryforward.com/pi-zero-w-headless-setup-windows10-rndis-driver-issue-resolved/&lt;br /&gt;
* 윈도우10 용 RNDIS 드라이버를 다운로드후 압축을 푼다. [여기에서](http://web1.moddevices.com/shared/mod-duo-rndis.zip)&lt;br /&gt;
* 라즈베리파이를 usb에 꽂는다.&lt;br /&gt;
* 장치관리자를 열어 com&amp;amp;port 항목에 있는 라즈베리파이를 우클릭한다.&lt;br /&gt;
![||600](https://cl.ly/b6080b/Image%2525202019-06-13%252520at%2525204.53.36%252520PM.png)&lt;br /&gt;
* 드라이버 업데이트 &amp;gt; 컴퓨터에서 드라이버 소프트웨어 검색 &amp;gt; 아까 압축 풀어둔 RNDIS 드라이버 폴더 선택![||600](https://cl.ly/da4a5e/Image%2525202019-06-13%252520at%2525204.58.27%252520PM.png)&lt;br /&gt;
* 이제 장치관리자에서 '네트워크 어댑터' 아래에 'USB Ethernet/ RNDIS Gadget'이 보인다.&lt;br /&gt;
![||600](https://cl.ly/23c055/Image%202019-06-13%20at%204.59.38%20PM.png)&lt;br /&gt;
&lt;br /&gt;
#### 인터넷 공유&lt;br /&gt;
##### mac&lt;br /&gt;
* usb 네트워크로 인터넷을 사용할 수 있도록 맥북에서 인터넷 공유를 켜준다.&lt;br /&gt;
* system 설정 -&amp;gt; 공유 -&amp;gt; 인터넷 공유&lt;br /&gt;
![||600](https://cl.ly/aec3ec/Image%202019-08-31%20at%2012.38.48%20PM.png)  &lt;br /&gt;
&lt;br /&gt;
#### windows&lt;br /&gt;
* 시작메뉴 우클릭 &amp;gt; 네트워크 연결 &amp;gt; 어댑터 옵션 변경 &amp;gt; 현재 인터넷 연결된 네트워크(이더넷 or wifi) 선택. 우클릭 &amp;gt; 속성 &amp;gt; 공유탭 &amp;gt; '다른 네트워크 사용자가 이 컴퓨터의 인터넷 연결을 통해 연결할 수 있도록 허용' 선택 &amp;gt; 확인&lt;br /&gt;
![||600](https://cl.ly/474173/Image%202019-09-11%20at%203.40.39%20PM.png)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## ssh 접속&lt;br /&gt;
```bash&lt;br /&gt;
$ssh pi@raspberrypi.local&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/b12f8a/Image%2525202019-06-10%252520at%25252010.00.26%252520PM.png)&lt;br /&gt;
![||600](https://cl.ly/ebff11/Image%2525202019-06-10%252520at%25252010.11.31%252520PM.png)&lt;br /&gt;
&lt;br /&gt;
### 위의 방법으로 안되는 경우...(raspberrypi.local이름이 충돌...)&lt;br /&gt;
도메인명이 아니라 ip주소를 직접 알아내 입력하자.&lt;br /&gt;
#### windows는 먼저 Bonjour를 설치한다.&lt;br /&gt;
https://support.apple.com/kb/DL999?locale=en_US&amp;amp;viewlocale=ko_KR&lt;br /&gt;
![||600](https://cl.ly/96c268/Image%2525202019-06-10%252520at%2525209.36.36%252520PM.png)&lt;br /&gt;
설치가 끝나면 이제 명령행에서 `dns-sd`명령어를 쓸 수 있다.&lt;br /&gt;
#### mac, windows 공통&lt;br /&gt;
* 윈도우는 `cmd`, 맥은 `terminal`을 실행시킨다.&lt;br /&gt;
* `dns-sd` 명령어의  `-G v4 &amp;lt;NAME&amp;gt;`  옵션을 사용하면 맨 마지막에 오는 것이 그 컴퓨터(&amp;lt;NAME&amp;gt;의 컴퓨터)가 사용하는 ip 주소이다. (dns-sd 프로그램을 끝낼 때에는 `ctrl+C`)&lt;br /&gt;
```bash&lt;br /&gt;
$ dns-sd -G v4 raspberrypi.local&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/skI6/Image%202018-07-06%20at%207.28.34%20PM.png)&lt;br /&gt;
&lt;br /&gt;
이렇게 알아낸 주소로 ssh접속한다. ID: pi, PW: raspberry 가 디폴트이다.&lt;br /&gt;
```bash&lt;br /&gt;
$ ssh pi@위에서 알아낸 IP주소&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/sjtn/Image%202018-07-06%20at%207.35.16%20PM.png)&lt;br /&gt;
### 윈도우에 SSH가 설치되어있지 않는 경우&lt;br /&gt;
putty를 설치해 사용한다.&lt;br /&gt;
&lt;br /&gt;
### warning: possible dns spoofing detected! 메시지 해결법&lt;br /&gt;
![||600](https://cl.ly/a0c94b/Image%202019-06-10%20at%2010.13.28%20PM.png)&lt;br /&gt;
ㅊㅏㅁㄱㅗ:http://www.coolio.so/ssh-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%A0%91%EC%86%8D%EC%8B%9C-known_hosts-%EC%B6%A9%EB%8F%8C-%EC%97%90%EB%9F%AC-%EB%B0%9C%EC%83%9D%EC%8B%9C/&lt;br /&gt;
&lt;br /&gt;
가장 빠르고 쉬운 방법은 아래와 같이  ssh-keygen 명령으로 ip에 대해 유효한 연결을 업데이트 하는 것이다.&lt;br /&gt;
```bash&lt;br /&gt;
$ ssh-keygen -R 192.168.0.108 # 연결하려고하는  IP&lt;br /&gt;
```&lt;br /&gt;
### hostname  변경&lt;br /&gt;
여러대의 라즈베리가 동일한 네트워크에 있는 경우, 연결할 때 헷갈린다. 그러므로 네트워크에서 보이는 장치명을 변경해 구분할 수 있도록 해주자.&lt;br /&gt;
기본값은   raspberrypi 로 되어있는데, 이를 각자 마음에 드는 이름으로 바꾸어주면 된다.&lt;br /&gt;
* raspi-config  프로그램으로 간단히 할 수 있다.&lt;br /&gt;
```bash&lt;br /&gt;
$ raspi-config&lt;br /&gt;
```&lt;br /&gt;
raspi-config 프로그램실행 -&amp;gt; 2.Network Options&lt;br /&gt;
![||600](https://cl.ly/eb9ae8/Image%202019-09-04%20at%2011.15.48%20AM.png)&lt;br /&gt;
-&amp;gt; N1 Hostname&lt;br /&gt;
![||600](https://cl.ly/ac0143/Image%202019-09-04%20at%2011.17.04%20AM.png)&lt;br /&gt;
-&amp;gt; 원하는 이름으로 바꾸어준다.(여기서는 raspberrypi -&amp;gt; doguinpi 로 바꾸었다.)&lt;br /&gt;
![||600](https://cl.ly/6abd47/Screen%20Recording%202019-09-04%20at%2011.19%20AM.gif)&lt;br /&gt;
그다음부턴 새로운 이름으로 접속할 수 있다.&lt;br /&gt;
![||600](https://cl.ly/4ffc4a/Image%202019-09-04%20at%2011.20.54%20AM.png)&lt;br /&gt;
&lt;br /&gt;
## GUI환경 사용(VNC로 화면 공유)&lt;br /&gt;
### 라이브러리 목록 업데이트 &amp;amp; 업그레이드&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo apt-get update&lt;br /&gt;
```&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo apt-get upgrade&lt;br /&gt;
```&lt;br /&gt;
업그레이드 완료되면 다운로드된 업데이트 파일을 지워 용량 확보&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo apt-get clean&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### VNC Server 설치&lt;br /&gt;
* 최근의 라즈비안에는 realVNC가 기본탑재되어있다. 새로인 install 할 필요는 없다. 구지 해야한다면&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo apt-get update&lt;br /&gt;
$ sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&lt;br /&gt;
```&lt;br /&gt;
* 설치가 끝나면 `raspi-config`를 실행해 vnc 옵션을 켜준다.&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo raspi-config&lt;br /&gt;
```&lt;br /&gt;
Interfacing Option -&amp;gt; P3 VNC -&amp;gt; YES를 선택.&lt;br /&gt;
![||600](https://cl.ly/sm1u/Image%202018-07-08%20at%207.56.01%20AM.png)&lt;br /&gt;
&lt;br /&gt;
재부팅한다.&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
```&lt;br /&gt;
### 노트북에 vnc viewer 설치 및 화면 공유 실행&lt;br /&gt;
* `dns-sd -G v4 raspberrypi.local` 명령어를 사용 RPI 의 IP address를 알 수 있다.&lt;br /&gt;
&lt;br /&gt;
* 노트북에 VNC viewer를 설치한다. 여기에서 받을 수 있다. https://www.realvnc.com/en/connect/download/viewer/&lt;br /&gt;
주소창에 'raspberrypi.local' 혹은 위에서 얻은 라즈베리파이의 IP주소를 넣는다. 처음 연결할 때 뭐라고 경고가 뜬다. 연결해도 되겠냐고 확인하는 거다.&lt;br /&gt;
&lt;br /&gt;
![||600](https://cl.ly/f088c7/Image%202019-06-10%20at%2010.49.50%20PM.png)&lt;br /&gt;
&lt;br /&gt;
* 기본 로그인 아이디는 ‘pi’, 패스워드는 ’raspberry’이다.&lt;br /&gt;
* 최초 연결하면 언어와 타임존 등을 설정한다.&lt;br /&gt;
* 키보드와 마우스, 모니터 없이 노트북에서 잘 컨트롤 됨을 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxbP/Image%202018-03-06%20at%205.04.06%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
* 해상도를 적절히 (작게)하면 속도가 만족스럽다. 1024x768정도면 괜찮은듯. (위에서 한 번 나온 configuration메뉴에서 설정할 수 있다.)&lt;br /&gt;
* 마지막으로, ip address는 보통 고정되어있지 않고 부팅할 때마다 바뀌기 때문에, 어느날 갑자기 VNC연결이 안 될 수도 있다.&lt;br /&gt;
&lt;br /&gt;
* 노트북과 라즈베리파이 사이에 파일교환이 필요한 경우 VNC viewer의 화살표 아이콘을 누르거나, 라즈베리파이의 작업표시줄상 VNC아이콘을 누르면 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/2h333e1Z3R3X/Image%202017-10-24%20at%208.11.24%20%EC%98%A4%ED%9B%84.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
## 한글설치&lt;br /&gt;
&lt;br /&gt;
참고: http://cccding.tistory.com/96&lt;br /&gt;
1. 한글폰트 설치&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
sudo apt-get install fonts-unfonts-core&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxzH/Image%202018-03-06%20at%204.57.23%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. ibus한글 입력기 설치&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo apt-get install ibus-hangul&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
3. Raspberry Pi configuration의 Localisation 설정.&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxFi/Image%202018-03-06%20at%204.58.18%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pycS/Image%202018-03-06%20at%204.58.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxkS/Image%202018-03-06%20at%204.58.40%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timezone은 Asia &amp;gt; Seoul로 …&lt;br /&gt;
OK를 누르면 재부팅~!&lt;br /&gt;
&lt;br /&gt;
* 재부팅 후 우상단에 EN아이콘을 눌러 한글 입력기를 선택.&lt;br /&gt;
* 다시 한번 눌러 한글상태에 체크&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyTR/Image%202018-03-06%20at%204.59.14%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 메뉴도 한글로 되어있고 한글 입력도 잘 된다. 한&amp;lt;-&amp;gt;영 변환키는 [shift]+[space]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxVm/Image%202018-03-06%20at%205.02.15%20AM.png&amp;quot; width=600&amp;gt;&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=254</id>
		<title>Raspberry Pi setup 라즈베리파이 설치하기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=254"/>
				<updated>2018-09-15T22:54:45Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: /* Raspberry Pi setup (Raspbian version9, stretch기준) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WIKI}}&lt;br /&gt;
= Raspberry Pi setup (Raspbian version9, stretch기준) =&lt;br /&gt;
&lt;br /&gt;
== 준비물 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyVs/Image%202018-03-06%20at%204.34.03%20AM.png&amp;quot; width=600 &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspbian 설치 ==&lt;br /&gt;
 '''라즈베리파이에 키보드나 마우스, 모니터 매번 연결하려니 번거롭다. 특히 pi-zero 같은 경우엔 usb포트는 하나밖에 없고 hdmi단자도 많이 쓰이지 않는 mini규격이라 난감하기 그지없다. 모니터 키보드 마우스 연결않고 (심지어 wifi동글 없어도!) 다른 노트북이나 데스크탑을 사용해 제어할 수 있는데, Headless 설정이라고 한다. (모니터 없다는 의미) [[Raspberry pi의 Headless 설정]] 문서를 참고하자'''&lt;br /&gt;
&lt;br /&gt;
** 2018년 6월 버전의 Raspbian이 ibus 한글입력기와 호환성 문제가 있는 것 같다. 한글을 써야한다면 다른 버전을 설치하자. 보다 안정적인 예전 버전의  raspbian Jessie 는 이곳에서...: http://downloads.raspberrypi.org/raspbian/images/raspbian-2017-07-05/2017-07-05-raspbian-jessie.zip **&lt;br /&gt;
=== Noobs 사용(더 쉽다) ===&lt;br /&gt;
* 설치방법 참고: https://www.raspberrypi.org/learning/software-guide/quickstart/&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ‘NOOBS’ 다운로드 https://www.raspberrypi.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src = &amp;quot;https://cl.ly/pwrJ/Image%202018-03-06%20at%204.39.37%20AM.png&amp;quot; width = 600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사할 수도 있다. 더 빠르고, 단계가 적다.''&lt;br /&gt;
# ‘SD formatter’ 다운로드 &amp;amp;amp; 설치 https://www.sdcard.org/downloads/formatter_4/index.html&lt;br /&gt;
# SD카드를 노트북에 삽입하고 SD formatter 실행. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwqB/Image%202018-03-06%20at%204.42.19%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''다른 방법을 통해 SD카드에 raspbian 설치해도 좋지만 FAT32로 포맷되어야함을 잊지말것. FATex는 안됨.''&lt;br /&gt;
# NOOPS zip파일을 풀어 SD카드에 모두 복사&lt;br /&gt;
# RPI에 usb(파워), HDMI( 모니터), 키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
# os 선택하도록 하는데, Raspbian 을 선택. 아래에서 언어는 한글로, 키보드레이아웃은 kr로… ’설치’를 눌러 설치 진행.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxxt/Image%202018-03-06%20at%204.49.56%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
# 기다리면 설치 완료&lt;br /&gt;
&lt;br /&gt;
===  NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (더 빠르고, 단계가 적다.) ===&lt;br /&gt;
참고: https://www.raspberrypi.org/documentation/installation/installing-images/README.md &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Raspbian 이미지 다운로드 &amp;amp; 압축풀기.&lt;br /&gt;
https://www.raspberrypi.org/downloads/raspbian/ &lt;br /&gt;
압축해제시 문제 발생하는 경우 7zip(윈도)나 the Unarchiver (mac) 사용.&lt;br /&gt;
Desktop 버전은 윈도우와 같은 GUI환경이고, Lite버전은 DOS같은 콘솔환경이다. &lt;br /&gt;
잘 모르겠다면 Desktop 버전을 설치.&lt;br /&gt;
&lt;br /&gt;
2. Etcher 다운로드 &amp;amp; 설치 ( 이미지 버닝 툴 - 이미지파일을 sd카드로 옮겨줌.)&lt;br /&gt;
&lt;br /&gt;
https://etcher.io/&lt;br /&gt;
&lt;br /&gt;
3. Echer 사용해 다운받은 이미지를 SD카드에 굽기.&lt;br /&gt;
&lt;br /&gt;
4. RPI에 usb(파워),  HDMI( 모니터),  키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
&lt;br /&gt;
== wifi 연결 ==&lt;br /&gt;
&lt;br /&gt;
# usb wifi 동글을 꽂는다.&lt;br /&gt;
# xwindow 우상단에 네트워크 아이콘을 클릭해 AP를 선택하고 비번을 입력하면 끝. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwv0/Image%202018-03-06%20at%204.50.27%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 소프트웨어 업데이트 ==&lt;br /&gt;
&lt;br /&gt;
# 터미널을 열고 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwlh/Image%202018-03-06%20at%204.52.39%20AM.png&amp;quot; width=300&amp;gt;&lt;br /&gt;
# 다음을 입력해 업데이트 필요한 소프트웨어 목록을 로드한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyP6/Image%202018-03-06%20at%204.56.43%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;upgrade 명령으로 업데이트를 설치한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get upgrade&amp;lt;/source&amp;gt;&lt;br /&gt;
업그레이드 할건지 확인하면 [y] [Enter]. 4. 한참 기다린 후 업그레이드가 완료되면 다운로드한 업데이트 파일을 지워서 용량을 확보한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get clean&amp;lt;/source&amp;gt;&lt;br /&gt;
== 한글설치 ==&lt;br /&gt;
&lt;br /&gt;
참고: http://cccding.tistory.com/96 1. 한글폰트 설치&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get install fonts-unfonts-core&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxzH/Image%202018-03-06%20at%204.57.23%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ibus한글 입력기 설치&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; sudo apt-get install ibus-hangul&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raspberry Pi configuration의 Localisation 설정. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxFi/Image%202018-03-06%20at%204.58.18%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pycS/Image%202018-03-06%20at%204.58.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxkS/Image%202018-03-06%20at%204.58.40%20AM.png&amp;quot; width=600&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Timezone은 Asia &amp;amp;gt; Seoul로 …&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK를 누르면 재부팅~!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;재부팅 후 우상단에 EN아이콘을 눌러 한글 입력기를 선택. 다시 한번 눌러 한글상태에 체크 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyTR/Image%202018-03-06%20at%204.59.14%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;메뉴도 한글로 되어있고 한글 입력도 잘 된다. 한&amp;amp;lt;-&amp;amp;gt;영 변환키는 [shift]+[space] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxVm/Image%202018-03-06%20at%205.02.15%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 라즈베리파이 화면공유 ==&lt;br /&gt;
&lt;br /&gt;
안그래도 좁은 책상위에 라즈베리파이용 키보드와 마우스까지 올라와있으니 안되겠다. 게다가 순간순간 어느 키보드를 눌러야 하는지 헷갈린다. 또 노트북에 물려 듀얼로 사용하던 모니터를 라즈베리파이에 연결하고나니 노트북 작업능률이 떨어진다. 이럴 때. VNC를 통해 라즈베리파이 화면을 노트북에 공유하고 노트북의 키보드와 마우스로 라즈베리파이를 제어한다. 참고: https://www.raspberrypi.org/documentation/remote-access/vnc/&lt;br /&gt;
&lt;br /&gt;
# 최근의 라즈비안에는 realVNC가 기본탑재되어있다. 새로인 install 할 필요는 없다. 구지 해야한다면&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;menu &amp;amp;gt; 기본설정(preferences) &amp;amp;gt; Raspberry Pi Configuration &amp;amp;gt; Interfaces 에 들어가서 VNC 항목을 Enabled에 체크 후 OK한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
내부 네트워크를 사용해 연결할 수 도, 인터넷을 통해 연결할 수도 있는데, 우리는 내부망을 사용하도록 하자. (아마 성능, 보안상 낫지 않을까?) 3. 작업표시줄 우측의 VNC아이콘을 누르면 RPI 의 IP address를 알 수 있다. &lt;br /&gt;
&lt;br /&gt;
https://www.realvnc.com/en/connect/_images/raspberry-pi-direct-address.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;노트북에 VNC viewer를 설치한다. 여기에서 받을 수 있다. https://www.realvnc.com/en/connect/download/viewer/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;주소창에 위에서 얻은 라즈베리파이의 IP주소를 넣는다. 처음 연결할 때 뭐라고 경고가 뜬다. 연결해도 되겠냐고 확인하는 거다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyRD/Image%202018-03-06%20at%205.03.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;기본 로그인 아이디는 ‘pi’, 패스워드는 ’raspberry’이다.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;키보드와 마우스, 모니터를 다 뽑고 재부팅한다. 노트북에서 잘 컨트롤 됨을 확인한다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxbP/Image%202018-03-06%20at%205.04.06%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;해상도를 적절히 (작게)하면 속도가 만족스럽다. 1024x768정도면 괜찮은듯. (위에서 한 번 나온 configuration메뉴에서 설정할 수 있다.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;마지막으로, ip address는 보통 고정되어있지 않고 부팅할 때마다 바뀌기 때문에, 어느날 갑자기 VNC연결이 안 될 수도 있다. 공유기 설정에서 라즈베리파이(에 연결된 ipTIME usb 동글)에 항상 정해진 ip 주소를 할당토록 설정한다. 방법은 공유기마다 다르겠지만… &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwvV/Image%202018-03-06%20at%205.04.36%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;노트북과 라즈베리파이 사이에 파일교환이 필요한 경우 VNC viewer의 화살표 아이콘을 누르거나, 라즈베리파이의 작업표시줄상 VNC아이콘을 누르면 된다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/2h333e1Z3R3X/Image%202017-10-24%20at%208.11.24%20%EC%98%A4%ED%9B%84.png&amp;quot; width=600&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspberry leaf (GPIO 라벨)설치 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;http://2.bp.blogspot.com/-AC6Gq5TaABU/USIcnBrnZaI/AAAAAAAAEfQ/bkCrzm4BZMc/s320/leaf+-+web.jpg&lt;br /&gt;
&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
참고: http://www.doctormonk.com/2013/02/raspberry-pi-and-breadboard-raspberry.html * GPIO에 라벨을 프린트해 붙여놓으면 편하겠다. * 26핀( model A, modelB 1)용 https://github.com/simonmonk/wiki_images/raw/master/raspberry%20leaf%20r2.pdf * 40핀(modelB2,3, model zero)용 https://github.com/splitbrain/rpibplusleaf&lt;br /&gt;
&lt;br /&gt;
[[category:raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=253</id>
		<title>Raspberry Pi setup 라즈베리파이 설치하기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=253"/>
				<updated>2018-09-15T22:16:03Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: /* ibus 입력기 대신 uim 사용 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WIKI}}&lt;br /&gt;
= Raspberry Pi setup (Raspbian version9, stretch기준) =&lt;br /&gt;
&lt;br /&gt;
== 준비물 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyVs/Image%202018-03-06%20at%204.34.03%20AM.png&amp;quot; width=600 &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspbian 설치 ==&lt;br /&gt;
 '''라즈베리파이에 키보드나 마우스, 모니터 매번 연결하려니 번거롭다. 특히 pi-zero 같은 경우엔 usb포트는 하나밖에 없고 hdmi단자도 많이 쓰이지 않는 mini규격이라 난감하기 그지없다. 모니터 키보드 마우스 연결않고 (심지어 wifi동글 없어도!) 다른 노트북이나 데스크탑을 사용해 제어할 수 있는데, Headless 설정이라고 한다. (모니터 없다는 의미) [[Raspberry pi의 Headless 설정]] 문서를 참고하자'''&lt;br /&gt;
&lt;br /&gt;
=== Noobs 사용(더 쉽다) ===&lt;br /&gt;
* 설치방법 참고: https://www.raspberrypi.org/learning/software-guide/quickstart/&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ‘NOOBS’ 다운로드 https://www.raspberrypi.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src = &amp;quot;https://cl.ly/pwrJ/Image%202018-03-06%20at%204.39.37%20AM.png&amp;quot; width = 600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사할 수도 있다. 더 빠르고, 단계가 적다.''&lt;br /&gt;
# ‘SD formatter’ 다운로드 &amp;amp;amp; 설치 https://www.sdcard.org/downloads/formatter_4/index.html&lt;br /&gt;
# SD카드를 노트북에 삽입하고 SD formatter 실행. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwqB/Image%202018-03-06%20at%204.42.19%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''다른 방법을 통해 SD카드에 raspbian 설치해도 좋지만 FAT32로 포맷되어야함을 잊지말것. FATex는 안됨.''&lt;br /&gt;
# NOOPS zip파일을 풀어 SD카드에 모두 복사&lt;br /&gt;
# RPI에 usb(파워), HDMI( 모니터), 키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
# os 선택하도록 하는데, Raspbian 을 선택. 아래에서 언어는 한글로, 키보드레이아웃은 kr로… ’설치’를 눌러 설치 진행.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxxt/Image%202018-03-06%20at%204.49.56%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
# 기다리면 설치 완료&lt;br /&gt;
&lt;br /&gt;
===  NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (더 빠르고, 단계가 적다.) ===&lt;br /&gt;
참고: https://www.raspberrypi.org/documentation/installation/installing-images/README.md &lt;br /&gt;
&lt;br /&gt;
** 2018년 6월 버전의 Raspbian이 ibus 한글입력기와 호환성 문제가 있는 것 같다. 한글을 써야한다면 다른 버전을 설치하자. 보다 안정적인 예전 버전의  raspbian Jessie 는 이곳에서...: http://downloads.raspberrypi.org/raspbian/images/raspbian-2017-07-05/2017-07-05-raspbian-jessie.zip **&lt;br /&gt;
&lt;br /&gt;
1. Raspbian 이미지 다운로드 &amp;amp; 압축풀기.&lt;br /&gt;
https://www.raspberrypi.org/downloads/raspbian/ &lt;br /&gt;
압축해제시 문제 발생하는 경우 7zip(윈도)나 the Unarchiver (mac) 사용.&lt;br /&gt;
Desktop 버전은 윈도우와 같은 GUI환경이고, Lite버전은 DOS같은 콘솔환경이다. &lt;br /&gt;
잘 모르겠다면 Desktop 버전을 설치.&lt;br /&gt;
&lt;br /&gt;
2. Etcher 다운로드 &amp;amp; 설치 ( 이미지 버닝 툴 - 이미지파일을 sd카드로 옮겨줌.)&lt;br /&gt;
&lt;br /&gt;
https://etcher.io/&lt;br /&gt;
&lt;br /&gt;
3. Echer 사용해 다운받은 이미지를 SD카드에 굽기.&lt;br /&gt;
&lt;br /&gt;
4. RPI에 usb(파워),  HDMI( 모니터),  키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
&lt;br /&gt;
== wifi 연결 ==&lt;br /&gt;
&lt;br /&gt;
# usb wifi 동글을 꽂는다.&lt;br /&gt;
# xwindow 우상단에 네트워크 아이콘을 클릭해 AP를 선택하고 비번을 입력하면 끝. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwv0/Image%202018-03-06%20at%204.50.27%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 소프트웨어 업데이트 ==&lt;br /&gt;
&lt;br /&gt;
# 터미널을 열고 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwlh/Image%202018-03-06%20at%204.52.39%20AM.png&amp;quot; width=300&amp;gt;&lt;br /&gt;
# 다음을 입력해 업데이트 필요한 소프트웨어 목록을 로드한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyP6/Image%202018-03-06%20at%204.56.43%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;upgrade 명령으로 업데이트를 설치한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get upgrade&amp;lt;/source&amp;gt;&lt;br /&gt;
업그레이드 할건지 확인하면 [y] [Enter]. 4. 한참 기다린 후 업그레이드가 완료되면 다운로드한 업데이트 파일을 지워서 용량을 확보한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get clean&amp;lt;/source&amp;gt;&lt;br /&gt;
== 한글설치 ==&lt;br /&gt;
&lt;br /&gt;
참고: http://cccding.tistory.com/96 1. 한글폰트 설치&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get install fonts-unfonts-core&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxzH/Image%202018-03-06%20at%204.57.23%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ibus한글 입력기 설치&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; sudo apt-get install ibus-hangul&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raspberry Pi configuration의 Localisation 설정. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxFi/Image%202018-03-06%20at%204.58.18%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pycS/Image%202018-03-06%20at%204.58.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxkS/Image%202018-03-06%20at%204.58.40%20AM.png&amp;quot; width=600&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Timezone은 Asia &amp;amp;gt; Seoul로 …&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK를 누르면 재부팅~!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;재부팅 후 우상단에 EN아이콘을 눌러 한글 입력기를 선택. 다시 한번 눌러 한글상태에 체크 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyTR/Image%202018-03-06%20at%204.59.14%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;메뉴도 한글로 되어있고 한글 입력도 잘 된다. 한&amp;amp;lt;-&amp;amp;gt;영 변환키는 [shift]+[space] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxVm/Image%202018-03-06%20at%205.02.15%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 라즈베리파이 화면공유 ==&lt;br /&gt;
&lt;br /&gt;
안그래도 좁은 책상위에 라즈베리파이용 키보드와 마우스까지 올라와있으니 안되겠다. 게다가 순간순간 어느 키보드를 눌러야 하는지 헷갈린다. 또 노트북에 물려 듀얼로 사용하던 모니터를 라즈베리파이에 연결하고나니 노트북 작업능률이 떨어진다. 이럴 때. VNC를 통해 라즈베리파이 화면을 노트북에 공유하고 노트북의 키보드와 마우스로 라즈베리파이를 제어한다. 참고: https://www.raspberrypi.org/documentation/remote-access/vnc/&lt;br /&gt;
&lt;br /&gt;
# 최근의 라즈비안에는 realVNC가 기본탑재되어있다. 새로인 install 할 필요는 없다. 구지 해야한다면&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;menu &amp;amp;gt; 기본설정(preferences) &amp;amp;gt; Raspberry Pi Configuration &amp;amp;gt; Interfaces 에 들어가서 VNC 항목을 Enabled에 체크 후 OK한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
내부 네트워크를 사용해 연결할 수 도, 인터넷을 통해 연결할 수도 있는데, 우리는 내부망을 사용하도록 하자. (아마 성능, 보안상 낫지 않을까?) 3. 작업표시줄 우측의 VNC아이콘을 누르면 RPI 의 IP address를 알 수 있다. &lt;br /&gt;
&lt;br /&gt;
https://www.realvnc.com/en/connect/_images/raspberry-pi-direct-address.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;노트북에 VNC viewer를 설치한다. 여기에서 받을 수 있다. https://www.realvnc.com/en/connect/download/viewer/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;주소창에 위에서 얻은 라즈베리파이의 IP주소를 넣는다. 처음 연결할 때 뭐라고 경고가 뜬다. 연결해도 되겠냐고 확인하는 거다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyRD/Image%202018-03-06%20at%205.03.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;기본 로그인 아이디는 ‘pi’, 패스워드는 ’raspberry’이다.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;키보드와 마우스, 모니터를 다 뽑고 재부팅한다. 노트북에서 잘 컨트롤 됨을 확인한다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxbP/Image%202018-03-06%20at%205.04.06%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;해상도를 적절히 (작게)하면 속도가 만족스럽다. 1024x768정도면 괜찮은듯. (위에서 한 번 나온 configuration메뉴에서 설정할 수 있다.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;마지막으로, ip address는 보통 고정되어있지 않고 부팅할 때마다 바뀌기 때문에, 어느날 갑자기 VNC연결이 안 될 수도 있다. 공유기 설정에서 라즈베리파이(에 연결된 ipTIME usb 동글)에 항상 정해진 ip 주소를 할당토록 설정한다. 방법은 공유기마다 다르겠지만… &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwvV/Image%202018-03-06%20at%205.04.36%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;노트북과 라즈베리파이 사이에 파일교환이 필요한 경우 VNC viewer의 화살표 아이콘을 누르거나, 라즈베리파이의 작업표시줄상 VNC아이콘을 누르면 된다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/2h333e1Z3R3X/Image%202017-10-24%20at%208.11.24%20%EC%98%A4%ED%9B%84.png&amp;quot; width=600&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspberry leaf (GPIO 라벨)설치 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;http://2.bp.blogspot.com/-AC6Gq5TaABU/USIcnBrnZaI/AAAAAAAAEfQ/bkCrzm4BZMc/s320/leaf+-+web.jpg&lt;br /&gt;
&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
참고: http://www.doctormonk.com/2013/02/raspberry-pi-and-breadboard-raspberry.html * GPIO에 라벨을 프린트해 붙여놓으면 편하겠다. * 26핀( model A, modelB 1)용 https://github.com/simonmonk/wiki_images/raw/master/raspberry%20leaf%20r2.pdf * 40핀(modelB2,3, model zero)용 https://github.com/splitbrain/rpibplusleaf&lt;br /&gt;
&lt;br /&gt;
[[category:raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=252</id>
		<title>Raspberry Pi setup 라즈베리파이 설치하기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=252"/>
				<updated>2018-09-15T22:15:12Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: /* NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (더 빠르고, 단계가 적다.) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WIKI}}&lt;br /&gt;
= Raspberry Pi setup (Raspbian version9, stretch기준) =&lt;br /&gt;
&lt;br /&gt;
== 준비물 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyVs/Image%202018-03-06%20at%204.34.03%20AM.png&amp;quot; width=600 &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspbian 설치 ==&lt;br /&gt;
 '''라즈베리파이에 키보드나 마우스, 모니터 매번 연결하려니 번거롭다. 특히 pi-zero 같은 경우엔 usb포트는 하나밖에 없고 hdmi단자도 많이 쓰이지 않는 mini규격이라 난감하기 그지없다. 모니터 키보드 마우스 연결않고 (심지어 wifi동글 없어도!) 다른 노트북이나 데스크탑을 사용해 제어할 수 있는데, Headless 설정이라고 한다. (모니터 없다는 의미) [[Raspberry pi의 Headless 설정]] 문서를 참고하자'''&lt;br /&gt;
&lt;br /&gt;
=== Noobs 사용(더 쉽다) ===&lt;br /&gt;
* 설치방법 참고: https://www.raspberrypi.org/learning/software-guide/quickstart/&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ‘NOOBS’ 다운로드 https://www.raspberrypi.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src = &amp;quot;https://cl.ly/pwrJ/Image%202018-03-06%20at%204.39.37%20AM.png&amp;quot; width = 600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사할 수도 있다. 더 빠르고, 단계가 적다.''&lt;br /&gt;
# ‘SD formatter’ 다운로드 &amp;amp;amp; 설치 https://www.sdcard.org/downloads/formatter_4/index.html&lt;br /&gt;
# SD카드를 노트북에 삽입하고 SD formatter 실행. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwqB/Image%202018-03-06%20at%204.42.19%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''다른 방법을 통해 SD카드에 raspbian 설치해도 좋지만 FAT32로 포맷되어야함을 잊지말것. FATex는 안됨.''&lt;br /&gt;
# NOOPS zip파일을 풀어 SD카드에 모두 복사&lt;br /&gt;
# RPI에 usb(파워), HDMI( 모니터), 키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
# os 선택하도록 하는데, Raspbian 을 선택. 아래에서 언어는 한글로, 키보드레이아웃은 kr로… ’설치’를 눌러 설치 진행.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxxt/Image%202018-03-06%20at%204.49.56%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
# 기다리면 설치 완료&lt;br /&gt;
&lt;br /&gt;
===  NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (더 빠르고, 단계가 적다.) ===&lt;br /&gt;
참고: https://www.raspberrypi.org/documentation/installation/installing-images/README.md &lt;br /&gt;
&lt;br /&gt;
** 2018년 6월 버전의 Raspbian이 ibus 한글입력기와 호환성 문제가 있는 것 같다. 한글을 써야한다면 다른 버전을 설치하자. 보다 안정적인 예전 버전의  raspbian Jessie 는 이곳에서...: http://downloads.raspberrypi.org/raspbian/images/raspbian-2017-07-05/2017-07-05-raspbian-jessie.zip **&lt;br /&gt;
&lt;br /&gt;
1. Raspbian 이미지 다운로드 &amp;amp; 압축풀기.&lt;br /&gt;
https://www.raspberrypi.org/downloads/raspbian/ &lt;br /&gt;
압축해제시 문제 발생하는 경우 7zip(윈도)나 the Unarchiver (mac) 사용.&lt;br /&gt;
Desktop 버전은 윈도우와 같은 GUI환경이고, Lite버전은 DOS같은 콘솔환경이다. &lt;br /&gt;
잘 모르겠다면 Desktop 버전을 설치.&lt;br /&gt;
&lt;br /&gt;
2. Etcher 다운로드 &amp;amp; 설치 ( 이미지 버닝 툴 - 이미지파일을 sd카드로 옮겨줌.)&lt;br /&gt;
&lt;br /&gt;
https://etcher.io/&lt;br /&gt;
&lt;br /&gt;
3. Echer 사용해 다운받은 이미지를 SD카드에 굽기.&lt;br /&gt;
&lt;br /&gt;
4. RPI에 usb(파워),  HDMI( 모니터),  키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
&lt;br /&gt;
== wifi 연결 ==&lt;br /&gt;
&lt;br /&gt;
# usb wifi 동글을 꽂는다.&lt;br /&gt;
# xwindow 우상단에 네트워크 아이콘을 클릭해 AP를 선택하고 비번을 입력하면 끝. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwv0/Image%202018-03-06%20at%204.50.27%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 소프트웨어 업데이트 ==&lt;br /&gt;
&lt;br /&gt;
# 터미널을 열고 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwlh/Image%202018-03-06%20at%204.52.39%20AM.png&amp;quot; width=300&amp;gt;&lt;br /&gt;
# 다음을 입력해 업데이트 필요한 소프트웨어 목록을 로드한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyP6/Image%202018-03-06%20at%204.56.43%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;upgrade 명령으로 업데이트를 설치한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get upgrade&amp;lt;/source&amp;gt;&lt;br /&gt;
업그레이드 할건지 확인하면 [y] [Enter]. 4. 한참 기다린 후 업그레이드가 완료되면 다운로드한 업데이트 파일을 지워서 용량을 확보한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get clean&amp;lt;/source&amp;gt;&lt;br /&gt;
== 한글설치 ==&lt;br /&gt;
&lt;br /&gt;
참고: http://cccding.tistory.com/96 1. 한글폰트 설치&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get install fonts-unfonts-core&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxzH/Image%202018-03-06%20at%204.57.23%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ibus한글 입력기 설치&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; sudo apt-get install ibus-hangul&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raspberry Pi configuration의 Localisation 설정. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxFi/Image%202018-03-06%20at%204.58.18%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pycS/Image%202018-03-06%20at%204.58.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxkS/Image%202018-03-06%20at%204.58.40%20AM.png&amp;quot; width=600&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Timezone은 Asia &amp;amp;gt; Seoul로 …&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK를 누르면 재부팅~!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;재부팅 후 우상단에 EN아이콘을 눌러 한글 입력기를 선택. 다시 한번 눌러 한글상태에 체크 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyTR/Image%202018-03-06%20at%204.59.14%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;메뉴도 한글로 되어있고 한글 입력도 잘 된다. 한&amp;amp;lt;-&amp;amp;gt;영 변환키는 [shift]+[space] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxVm/Image%202018-03-06%20at%205.02.15%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ibus 입력기 대신 uim 사용 ===&lt;br /&gt;
라즈베리파이 3 B+ 에 rasbian stretch 2018년6월배포를 설치했을 때 ibus 한글 입력기가 작동하지 않는 버그가 있다.&lt;br /&gt;
기타 ibus 가 제대로 작동하지 않는 경우 보다 안정적인 UIM 입력기로 대체한다.&lt;br /&gt;
&lt;br /&gt;
1. 일단 ibus 삭제 &amp;amp; 재부팅&lt;br /&gt;
``` bash&lt;br /&gt;
$ sudo apt-get remove ibus ibus-hangul&lt;br /&gt;
$ reboot&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
2. uim 설치&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo apt-get install uim &lt;br /&gt;
$ sudo apt-get install uim-byeoru&lt;br /&gt;
reboot&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
3. `시작` &amp;gt; `기본설정` &amp;gt; '입력기(uim 환경설정)` &lt;br /&gt;
&lt;br /&gt;
`전체적인 설정` &amp;gt; `입력기 이용 준비` &amp;gt; `디폴트 입력기 지정` 체크,  디폴트 입력기 = 벼루, `입력기 토글` &amp;gt; `입력기 토글키` &amp;gt; `편집`버튼을 눌러 원하는 한/영 변환키 지정. (나는 shift+space로...)`&lt;br /&gt;
`적용` &amp;amp; `확인`&lt;br /&gt;
&lt;br /&gt;
재부팅&lt;br /&gt;
&lt;br /&gt;
4. `시작` &amp;gt; `기본설정` &amp;gt; '입력기`&lt;br /&gt;
&lt;br /&gt;
확인&lt;br /&gt;
&lt;br /&gt;
예&lt;br /&gt;
&lt;br /&gt;
== 라즈베리파이 화면공유 ==&lt;br /&gt;
&lt;br /&gt;
안그래도 좁은 책상위에 라즈베리파이용 키보드와 마우스까지 올라와있으니 안되겠다. 게다가 순간순간 어느 키보드를 눌러야 하는지 헷갈린다. 또 노트북에 물려 듀얼로 사용하던 모니터를 라즈베리파이에 연결하고나니 노트북 작업능률이 떨어진다. 이럴 때. VNC를 통해 라즈베리파이 화면을 노트북에 공유하고 노트북의 키보드와 마우스로 라즈베리파이를 제어한다. 참고: https://www.raspberrypi.org/documentation/remote-access/vnc/&lt;br /&gt;
&lt;br /&gt;
# 최근의 라즈비안에는 realVNC가 기본탑재되어있다. 새로인 install 할 필요는 없다. 구지 해야한다면&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;menu &amp;amp;gt; 기본설정(preferences) &amp;amp;gt; Raspberry Pi Configuration &amp;amp;gt; Interfaces 에 들어가서 VNC 항목을 Enabled에 체크 후 OK한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
내부 네트워크를 사용해 연결할 수 도, 인터넷을 통해 연결할 수도 있는데, 우리는 내부망을 사용하도록 하자. (아마 성능, 보안상 낫지 않을까?) 3. 작업표시줄 우측의 VNC아이콘을 누르면 RPI 의 IP address를 알 수 있다. &lt;br /&gt;
&lt;br /&gt;
https://www.realvnc.com/en/connect/_images/raspberry-pi-direct-address.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;노트북에 VNC viewer를 설치한다. 여기에서 받을 수 있다. https://www.realvnc.com/en/connect/download/viewer/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;주소창에 위에서 얻은 라즈베리파이의 IP주소를 넣는다. 처음 연결할 때 뭐라고 경고가 뜬다. 연결해도 되겠냐고 확인하는 거다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyRD/Image%202018-03-06%20at%205.03.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;기본 로그인 아이디는 ‘pi’, 패스워드는 ’raspberry’이다.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;키보드와 마우스, 모니터를 다 뽑고 재부팅한다. 노트북에서 잘 컨트롤 됨을 확인한다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxbP/Image%202018-03-06%20at%205.04.06%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;해상도를 적절히 (작게)하면 속도가 만족스럽다. 1024x768정도면 괜찮은듯. (위에서 한 번 나온 configuration메뉴에서 설정할 수 있다.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;마지막으로, ip address는 보통 고정되어있지 않고 부팅할 때마다 바뀌기 때문에, 어느날 갑자기 VNC연결이 안 될 수도 있다. 공유기 설정에서 라즈베리파이(에 연결된 ipTIME usb 동글)에 항상 정해진 ip 주소를 할당토록 설정한다. 방법은 공유기마다 다르겠지만… &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwvV/Image%202018-03-06%20at%205.04.36%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;노트북과 라즈베리파이 사이에 파일교환이 필요한 경우 VNC viewer의 화살표 아이콘을 누르거나, 라즈베리파이의 작업표시줄상 VNC아이콘을 누르면 된다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/2h333e1Z3R3X/Image%202017-10-24%20at%208.11.24%20%EC%98%A4%ED%9B%84.png&amp;quot; width=600&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspberry leaf (GPIO 라벨)설치 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;http://2.bp.blogspot.com/-AC6Gq5TaABU/USIcnBrnZaI/AAAAAAAAEfQ/bkCrzm4BZMc/s320/leaf+-+web.jpg&lt;br /&gt;
&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
참고: http://www.doctormonk.com/2013/02/raspberry-pi-and-breadboard-raspberry.html * GPIO에 라벨을 프린트해 붙여놓으면 편하겠다. * 26핀( model A, modelB 1)용 https://github.com/simonmonk/wiki_images/raw/master/raspberry%20leaf%20r2.pdf * 40핀(modelB2,3, model zero)용 https://github.com/splitbrain/rpibplusleaf&lt;br /&gt;
&lt;br /&gt;
[[category:raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=251</id>
		<title>Raspberry Pi setup 라즈베리파이 설치하기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=251"/>
				<updated>2018-09-15T21:41:35Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: /* 한글설치 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WIKI}}&lt;br /&gt;
= Raspberry Pi setup (Raspbian version9, stretch기준) =&lt;br /&gt;
&lt;br /&gt;
== 준비물 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyVs/Image%202018-03-06%20at%204.34.03%20AM.png&amp;quot; width=600 &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspbian 설치 ==&lt;br /&gt;
 '''라즈베리파이에 키보드나 마우스, 모니터 매번 연결하려니 번거롭다. 특히 pi-zero 같은 경우엔 usb포트는 하나밖에 없고 hdmi단자도 많이 쓰이지 않는 mini규격이라 난감하기 그지없다. 모니터 키보드 마우스 연결않고 (심지어 wifi동글 없어도!) 다른 노트북이나 데스크탑을 사용해 제어할 수 있는데, Headless 설정이라고 한다. (모니터 없다는 의미) [[Raspberry pi의 Headless 설정]] 문서를 참고하자'''&lt;br /&gt;
&lt;br /&gt;
=== Noobs 사용(더 쉽다) ===&lt;br /&gt;
* 설치방법 참고: https://www.raspberrypi.org/learning/software-guide/quickstart/&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ‘NOOBS’ 다운로드 https://www.raspberrypi.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src = &amp;quot;https://cl.ly/pwrJ/Image%202018-03-06%20at%204.39.37%20AM.png&amp;quot; width = 600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사할 수도 있다. 더 빠르고, 단계가 적다.''&lt;br /&gt;
# ‘SD formatter’ 다운로드 &amp;amp;amp; 설치 https://www.sdcard.org/downloads/formatter_4/index.html&lt;br /&gt;
# SD카드를 노트북에 삽입하고 SD formatter 실행. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwqB/Image%202018-03-06%20at%204.42.19%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''다른 방법을 통해 SD카드에 raspbian 설치해도 좋지만 FAT32로 포맷되어야함을 잊지말것. FATex는 안됨.''&lt;br /&gt;
# NOOPS zip파일을 풀어 SD카드에 모두 복사&lt;br /&gt;
# RPI에 usb(파워), HDMI( 모니터), 키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
# os 선택하도록 하는데, Raspbian 을 선택. 아래에서 언어는 한글로, 키보드레이아웃은 kr로… ’설치’를 눌러 설치 진행.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxxt/Image%202018-03-06%20at%204.49.56%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
# 기다리면 설치 완료&lt;br /&gt;
&lt;br /&gt;
===  NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (더 빠르고, 단계가 적다.) ===&lt;br /&gt;
참고: https://www.raspberrypi.org/documentation/installation/installing-images/README.md &lt;br /&gt;
&lt;br /&gt;
** 2018년 6월 버전의 Raspbian이 ibus 한글입력기와 호환성 문제가 있는 것 같다. 한글을 써야한다면 다른 버전을 설치하자. 예전 버전의  raspbian은 이곳에서...: http://downloads.raspberrypi.org/raspbian/images/ **&lt;br /&gt;
&lt;br /&gt;
1. Raspbian 이미지 다운로드 &amp;amp; 압축풀기.&lt;br /&gt;
https://www.raspberrypi.org/downloads/raspbian/ &lt;br /&gt;
압축해제시 문제 발생하는 경우 7zip(윈도)나 the Unarchiver (mac) 사용.&lt;br /&gt;
Desktop 버전은 윈도우와 같은 GUI환경이고, Lite버전은 DOS같은 콘솔환경이다. &lt;br /&gt;
잘 모르겠다면 Desktop 버전을 설치.&lt;br /&gt;
&lt;br /&gt;
2. Etcher 다운로드 &amp;amp; 설치 ( 이미지 버닝 툴 - 이미지파일을 sd카드로 옮겨줌.)&lt;br /&gt;
&lt;br /&gt;
https://etcher.io/&lt;br /&gt;
&lt;br /&gt;
3. Echer 사용해 다운받은 이미지를 SD카드에 굽기.&lt;br /&gt;
&lt;br /&gt;
4. RPI에 usb(파워),  HDMI( 모니터),  키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
&lt;br /&gt;
== wifi 연결 ==&lt;br /&gt;
&lt;br /&gt;
# usb wifi 동글을 꽂는다.&lt;br /&gt;
# xwindow 우상단에 네트워크 아이콘을 클릭해 AP를 선택하고 비번을 입력하면 끝. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwv0/Image%202018-03-06%20at%204.50.27%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 소프트웨어 업데이트 ==&lt;br /&gt;
&lt;br /&gt;
# 터미널을 열고 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwlh/Image%202018-03-06%20at%204.52.39%20AM.png&amp;quot; width=300&amp;gt;&lt;br /&gt;
# 다음을 입력해 업데이트 필요한 소프트웨어 목록을 로드한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyP6/Image%202018-03-06%20at%204.56.43%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;upgrade 명령으로 업데이트를 설치한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get upgrade&amp;lt;/source&amp;gt;&lt;br /&gt;
업그레이드 할건지 확인하면 [y] [Enter]. 4. 한참 기다린 후 업그레이드가 완료되면 다운로드한 업데이트 파일을 지워서 용량을 확보한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get clean&amp;lt;/source&amp;gt;&lt;br /&gt;
== 한글설치 ==&lt;br /&gt;
&lt;br /&gt;
참고: http://cccding.tistory.com/96 1. 한글폰트 설치&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get install fonts-unfonts-core&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxzH/Image%202018-03-06%20at%204.57.23%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ibus한글 입력기 설치&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; sudo apt-get install ibus-hangul&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raspberry Pi configuration의 Localisation 설정. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxFi/Image%202018-03-06%20at%204.58.18%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pycS/Image%202018-03-06%20at%204.58.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxkS/Image%202018-03-06%20at%204.58.40%20AM.png&amp;quot; width=600&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Timezone은 Asia &amp;amp;gt; Seoul로 …&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK를 누르면 재부팅~!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;재부팅 후 우상단에 EN아이콘을 눌러 한글 입력기를 선택. 다시 한번 눌러 한글상태에 체크 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyTR/Image%202018-03-06%20at%204.59.14%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;메뉴도 한글로 되어있고 한글 입력도 잘 된다. 한&amp;amp;lt;-&amp;amp;gt;영 변환키는 [shift]+[space] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxVm/Image%202018-03-06%20at%205.02.15%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ibus 입력기 대신 uim 사용 ===&lt;br /&gt;
라즈베리파이 3 B+ 에 rasbian stretch 2018년6월배포를 설치했을 때 ibus 한글 입력기가 작동하지 않는 버그가 있다.&lt;br /&gt;
기타 ibus 가 제대로 작동하지 않는 경우 보다 안정적인 UIM 입력기로 대체한다.&lt;br /&gt;
&lt;br /&gt;
1. 일단 ibus 삭제 &amp;amp; 재부팅&lt;br /&gt;
``` bash&lt;br /&gt;
$ sudo apt-get remove ibus ibus-hangul&lt;br /&gt;
$ reboot&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
2. uim 설치&lt;br /&gt;
```bash&lt;br /&gt;
$ sudo apt-get install uim &lt;br /&gt;
$ sudo apt-get install uim-byeoru&lt;br /&gt;
reboot&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
3. `시작` &amp;gt; `기본설정` &amp;gt; '입력기(uim 환경설정)` &lt;br /&gt;
&lt;br /&gt;
`전체적인 설정` &amp;gt; `입력기 이용 준비` &amp;gt; `디폴트 입력기 지정` 체크,  디폴트 입력기 = 벼루, `입력기 토글` &amp;gt; `입력기 토글키` &amp;gt; `편집`버튼을 눌러 원하는 한/영 변환키 지정. (나는 shift+space로...)`&lt;br /&gt;
`적용` &amp;amp; `확인`&lt;br /&gt;
&lt;br /&gt;
재부팅&lt;br /&gt;
&lt;br /&gt;
4. `시작` &amp;gt; `기본설정` &amp;gt; '입력기`&lt;br /&gt;
&lt;br /&gt;
확인&lt;br /&gt;
&lt;br /&gt;
예&lt;br /&gt;
&lt;br /&gt;
== 라즈베리파이 화면공유 ==&lt;br /&gt;
&lt;br /&gt;
안그래도 좁은 책상위에 라즈베리파이용 키보드와 마우스까지 올라와있으니 안되겠다. 게다가 순간순간 어느 키보드를 눌러야 하는지 헷갈린다. 또 노트북에 물려 듀얼로 사용하던 모니터를 라즈베리파이에 연결하고나니 노트북 작업능률이 떨어진다. 이럴 때. VNC를 통해 라즈베리파이 화면을 노트북에 공유하고 노트북의 키보드와 마우스로 라즈베리파이를 제어한다. 참고: https://www.raspberrypi.org/documentation/remote-access/vnc/&lt;br /&gt;
&lt;br /&gt;
# 최근의 라즈비안에는 realVNC가 기본탑재되어있다. 새로인 install 할 필요는 없다. 구지 해야한다면&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;menu &amp;amp;gt; 기본설정(preferences) &amp;amp;gt; Raspberry Pi Configuration &amp;amp;gt; Interfaces 에 들어가서 VNC 항목을 Enabled에 체크 후 OK한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
내부 네트워크를 사용해 연결할 수 도, 인터넷을 통해 연결할 수도 있는데, 우리는 내부망을 사용하도록 하자. (아마 성능, 보안상 낫지 않을까?) 3. 작업표시줄 우측의 VNC아이콘을 누르면 RPI 의 IP address를 알 수 있다. &lt;br /&gt;
&lt;br /&gt;
https://www.realvnc.com/en/connect/_images/raspberry-pi-direct-address.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;노트북에 VNC viewer를 설치한다. 여기에서 받을 수 있다. https://www.realvnc.com/en/connect/download/viewer/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;주소창에 위에서 얻은 라즈베리파이의 IP주소를 넣는다. 처음 연결할 때 뭐라고 경고가 뜬다. 연결해도 되겠냐고 확인하는 거다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyRD/Image%202018-03-06%20at%205.03.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;기본 로그인 아이디는 ‘pi’, 패스워드는 ’raspberry’이다.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;키보드와 마우스, 모니터를 다 뽑고 재부팅한다. 노트북에서 잘 컨트롤 됨을 확인한다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxbP/Image%202018-03-06%20at%205.04.06%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;해상도를 적절히 (작게)하면 속도가 만족스럽다. 1024x768정도면 괜찮은듯. (위에서 한 번 나온 configuration메뉴에서 설정할 수 있다.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;마지막으로, ip address는 보통 고정되어있지 않고 부팅할 때마다 바뀌기 때문에, 어느날 갑자기 VNC연결이 안 될 수도 있다. 공유기 설정에서 라즈베리파이(에 연결된 ipTIME usb 동글)에 항상 정해진 ip 주소를 할당토록 설정한다. 방법은 공유기마다 다르겠지만… &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwvV/Image%202018-03-06%20at%205.04.36%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;노트북과 라즈베리파이 사이에 파일교환이 필요한 경우 VNC viewer의 화살표 아이콘을 누르거나, 라즈베리파이의 작업표시줄상 VNC아이콘을 누르면 된다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/2h333e1Z3R3X/Image%202017-10-24%20at%208.11.24%20%EC%98%A4%ED%9B%84.png&amp;quot; width=600&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspberry leaf (GPIO 라벨)설치 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;http://2.bp.blogspot.com/-AC6Gq5TaABU/USIcnBrnZaI/AAAAAAAAEfQ/bkCrzm4BZMc/s320/leaf+-+web.jpg&lt;br /&gt;
&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
참고: http://www.doctormonk.com/2013/02/raspberry-pi-and-breadboard-raspberry.html * GPIO에 라벨을 프린트해 붙여놓으면 편하겠다. * 26핀( model A, modelB 1)용 https://github.com/simonmonk/wiki_images/raw/master/raspberry%20leaf%20r2.pdf * 40핀(modelB2,3, model zero)용 https://github.com/splitbrain/rpibplusleaf&lt;br /&gt;
&lt;br /&gt;
[[category:raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=250</id>
		<title>Raspberry Pi setup 라즈베리파이 설치하기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=250"/>
				<updated>2018-09-14T09:49:06Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: /* NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (더 빠르고, 단계가 적다.) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WIKI}}&lt;br /&gt;
= Raspberry Pi setup (Raspbian version9, stretch기준) =&lt;br /&gt;
&lt;br /&gt;
== 준비물 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyVs/Image%202018-03-06%20at%204.34.03%20AM.png&amp;quot; width=600 &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspbian 설치 ==&lt;br /&gt;
 '''라즈베리파이에 키보드나 마우스, 모니터 매번 연결하려니 번거롭다. 특히 pi-zero 같은 경우엔 usb포트는 하나밖에 없고 hdmi단자도 많이 쓰이지 않는 mini규격이라 난감하기 그지없다. 모니터 키보드 마우스 연결않고 (심지어 wifi동글 없어도!) 다른 노트북이나 데스크탑을 사용해 제어할 수 있는데, Headless 설정이라고 한다. (모니터 없다는 의미) [[Raspberry pi의 Headless 설정]] 문서를 참고하자'''&lt;br /&gt;
&lt;br /&gt;
=== Noobs 사용(더 쉽다) ===&lt;br /&gt;
* 설치방법 참고: https://www.raspberrypi.org/learning/software-guide/quickstart/&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ‘NOOBS’ 다운로드 https://www.raspberrypi.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src = &amp;quot;https://cl.ly/pwrJ/Image%202018-03-06%20at%204.39.37%20AM.png&amp;quot; width = 600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사할 수도 있다. 더 빠르고, 단계가 적다.''&lt;br /&gt;
# ‘SD formatter’ 다운로드 &amp;amp;amp; 설치 https://www.sdcard.org/downloads/formatter_4/index.html&lt;br /&gt;
# SD카드를 노트북에 삽입하고 SD formatter 실행. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwqB/Image%202018-03-06%20at%204.42.19%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''다른 방법을 통해 SD카드에 raspbian 설치해도 좋지만 FAT32로 포맷되어야함을 잊지말것. FATex는 안됨.''&lt;br /&gt;
# NOOPS zip파일을 풀어 SD카드에 모두 복사&lt;br /&gt;
# RPI에 usb(파워), HDMI( 모니터), 키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
# os 선택하도록 하는데, Raspbian 을 선택. 아래에서 언어는 한글로, 키보드레이아웃은 kr로… ’설치’를 눌러 설치 진행.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxxt/Image%202018-03-06%20at%204.49.56%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
# 기다리면 설치 완료&lt;br /&gt;
&lt;br /&gt;
===  NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (더 빠르고, 단계가 적다.) ===&lt;br /&gt;
참고: https://www.raspberrypi.org/documentation/installation/installing-images/README.md &lt;br /&gt;
&lt;br /&gt;
** 2018년 6월 버전의 Raspbian이 ibus 한글입력기와 호환성 문제가 있는 것 같다. 한글을 써야한다면 다른 버전을 설치하자. 예전 버전의  raspbian은 이곳에서...: http://downloads.raspberrypi.org/raspbian/images/ **&lt;br /&gt;
&lt;br /&gt;
1. Raspbian 이미지 다운로드 &amp;amp; 압축풀기.&lt;br /&gt;
https://www.raspberrypi.org/downloads/raspbian/ &lt;br /&gt;
압축해제시 문제 발생하는 경우 7zip(윈도)나 the Unarchiver (mac) 사용.&lt;br /&gt;
Desktop 버전은 윈도우와 같은 GUI환경이고, Lite버전은 DOS같은 콘솔환경이다. &lt;br /&gt;
잘 모르겠다면 Desktop 버전을 설치.&lt;br /&gt;
&lt;br /&gt;
2. Etcher 다운로드 &amp;amp; 설치 ( 이미지 버닝 툴 - 이미지파일을 sd카드로 옮겨줌.)&lt;br /&gt;
&lt;br /&gt;
https://etcher.io/&lt;br /&gt;
&lt;br /&gt;
3. Echer 사용해 다운받은 이미지를 SD카드에 굽기.&lt;br /&gt;
&lt;br /&gt;
4. RPI에 usb(파워),  HDMI( 모니터),  키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
&lt;br /&gt;
== wifi 연결 ==&lt;br /&gt;
&lt;br /&gt;
# usb wifi 동글을 꽂는다.&lt;br /&gt;
# xwindow 우상단에 네트워크 아이콘을 클릭해 AP를 선택하고 비번을 입력하면 끝. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwv0/Image%202018-03-06%20at%204.50.27%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 소프트웨어 업데이트 ==&lt;br /&gt;
&lt;br /&gt;
# 터미널을 열고 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwlh/Image%202018-03-06%20at%204.52.39%20AM.png&amp;quot; width=300&amp;gt;&lt;br /&gt;
# 다음을 입력해 업데이트 필요한 소프트웨어 목록을 로드한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyP6/Image%202018-03-06%20at%204.56.43%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;upgrade 명령으로 업데이트를 설치한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get upgrade&amp;lt;/source&amp;gt;&lt;br /&gt;
업그레이드 할건지 확인하면 [y] [Enter]. 4. 한참 기다린 후 업그레이드가 완료되면 다운로드한 업데이트 파일을 지워서 용량을 확보한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get clean&amp;lt;/source&amp;gt;&lt;br /&gt;
== 한글설치 ==&lt;br /&gt;
&lt;br /&gt;
참고: http://cccding.tistory.com/96 1. 한글폰트 설치&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get install fonts-unfonts-core&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxzH/Image%202018-03-06%20at%204.57.23%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ibus한글 입력기 설치&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; sudo apt-get install ibus-hangul&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raspberry Pi configuration의 Localisation 설정. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxFi/Image%202018-03-06%20at%204.58.18%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pycS/Image%202018-03-06%20at%204.58.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxkS/Image%202018-03-06%20at%204.58.40%20AM.png&amp;quot; width=600&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Timezone은 Asia &amp;amp;gt; Seoul로 …&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK를 누르면 재부팅~!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;재부팅 후 우상단에 EN아이콘을 눌러 한글 입력기를 선택. 다시 한번 눌러 한글상태에 체크 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyTR/Image%202018-03-06%20at%204.59.14%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;메뉴도 한글로 되어있고 한글 입력도 잘 된다. 한&amp;amp;lt;-&amp;amp;gt;영 변환키는 [shift]+[space] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxVm/Image%202018-03-06%20at%205.02.15%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 라즈베리파이 화면공유 ==&lt;br /&gt;
&lt;br /&gt;
안그래도 좁은 책상위에 라즈베리파이용 키보드와 마우스까지 올라와있으니 안되겠다. 게다가 순간순간 어느 키보드를 눌러야 하는지 헷갈린다. 또 노트북에 물려 듀얼로 사용하던 모니터를 라즈베리파이에 연결하고나니 노트북 작업능률이 떨어진다. 이럴 때. VNC를 통해 라즈베리파이 화면을 노트북에 공유하고 노트북의 키보드와 마우스로 라즈베리파이를 제어한다. 참고: https://www.raspberrypi.org/documentation/remote-access/vnc/&lt;br /&gt;
&lt;br /&gt;
# 최근의 라즈비안에는 realVNC가 기본탑재되어있다. 새로인 install 할 필요는 없다. 구지 해야한다면&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;menu &amp;amp;gt; 기본설정(preferences) &amp;amp;gt; Raspberry Pi Configuration &amp;amp;gt; Interfaces 에 들어가서 VNC 항목을 Enabled에 체크 후 OK한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
내부 네트워크를 사용해 연결할 수 도, 인터넷을 통해 연결할 수도 있는데, 우리는 내부망을 사용하도록 하자. (아마 성능, 보안상 낫지 않을까?) 3. 작업표시줄 우측의 VNC아이콘을 누르면 RPI 의 IP address를 알 수 있다. &lt;br /&gt;
&lt;br /&gt;
https://www.realvnc.com/en/connect/_images/raspberry-pi-direct-address.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;노트북에 VNC viewer를 설치한다. 여기에서 받을 수 있다. https://www.realvnc.com/en/connect/download/viewer/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;주소창에 위에서 얻은 라즈베리파이의 IP주소를 넣는다. 처음 연결할 때 뭐라고 경고가 뜬다. 연결해도 되겠냐고 확인하는 거다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyRD/Image%202018-03-06%20at%205.03.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;기본 로그인 아이디는 ‘pi’, 패스워드는 ’raspberry’이다.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;키보드와 마우스, 모니터를 다 뽑고 재부팅한다. 노트북에서 잘 컨트롤 됨을 확인한다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxbP/Image%202018-03-06%20at%205.04.06%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;해상도를 적절히 (작게)하면 속도가 만족스럽다. 1024x768정도면 괜찮은듯. (위에서 한 번 나온 configuration메뉴에서 설정할 수 있다.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;마지막으로, ip address는 보통 고정되어있지 않고 부팅할 때마다 바뀌기 때문에, 어느날 갑자기 VNC연결이 안 될 수도 있다. 공유기 설정에서 라즈베리파이(에 연결된 ipTIME usb 동글)에 항상 정해진 ip 주소를 할당토록 설정한다. 방법은 공유기마다 다르겠지만… &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwvV/Image%202018-03-06%20at%205.04.36%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;노트북과 라즈베리파이 사이에 파일교환이 필요한 경우 VNC viewer의 화살표 아이콘을 누르거나, 라즈베리파이의 작업표시줄상 VNC아이콘을 누르면 된다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/2h333e1Z3R3X/Image%202017-10-24%20at%208.11.24%20%EC%98%A4%ED%9B%84.png&amp;quot; width=600&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspberry leaf (GPIO 라벨)설치 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;http://2.bp.blogspot.com/-AC6Gq5TaABU/USIcnBrnZaI/AAAAAAAAEfQ/bkCrzm4BZMc/s320/leaf+-+web.jpg&lt;br /&gt;
&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
참고: http://www.doctormonk.com/2013/02/raspberry-pi-and-breadboard-raspberry.html * GPIO에 라벨을 프린트해 붙여놓으면 편하겠다. * 26핀( model A, modelB 1)용 https://github.com/simonmonk/wiki_images/raw/master/raspberry%20leaf%20r2.pdf * 40핀(modelB2,3, model zero)용 https://github.com/splitbrain/rpibplusleaf&lt;br /&gt;
&lt;br /&gt;
[[category:raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=249</id>
		<title>Raspberry Pi setup 라즈베리파이 설치하기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=249"/>
				<updated>2018-09-14T09:47:12Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: /* NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (더 빠르고, 단계가 적다.) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WIKI}}&lt;br /&gt;
= Raspberry Pi setup (Raspbian version9, stretch기준) =&lt;br /&gt;
&lt;br /&gt;
== 준비물 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyVs/Image%202018-03-06%20at%204.34.03%20AM.png&amp;quot; width=600 &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspbian 설치 ==&lt;br /&gt;
 '''라즈베리파이에 키보드나 마우스, 모니터 매번 연결하려니 번거롭다. 특히 pi-zero 같은 경우엔 usb포트는 하나밖에 없고 hdmi단자도 많이 쓰이지 않는 mini규격이라 난감하기 그지없다. 모니터 키보드 마우스 연결않고 (심지어 wifi동글 없어도!) 다른 노트북이나 데스크탑을 사용해 제어할 수 있는데, Headless 설정이라고 한다. (모니터 없다는 의미) [[Raspberry pi의 Headless 설정]] 문서를 참고하자'''&lt;br /&gt;
&lt;br /&gt;
=== Noobs 사용(더 쉽다) ===&lt;br /&gt;
* 설치방법 참고: https://www.raspberrypi.org/learning/software-guide/quickstart/&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ‘NOOBS’ 다운로드 https://www.raspberrypi.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src = &amp;quot;https://cl.ly/pwrJ/Image%202018-03-06%20at%204.39.37%20AM.png&amp;quot; width = 600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사할 수도 있다. 더 빠르고, 단계가 적다.''&lt;br /&gt;
# ‘SD formatter’ 다운로드 &amp;amp;amp; 설치 https://www.sdcard.org/downloads/formatter_4/index.html&lt;br /&gt;
# SD카드를 노트북에 삽입하고 SD formatter 실행. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwqB/Image%202018-03-06%20at%204.42.19%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''다른 방법을 통해 SD카드에 raspbian 설치해도 좋지만 FAT32로 포맷되어야함을 잊지말것. FATex는 안됨.''&lt;br /&gt;
# NOOPS zip파일을 풀어 SD카드에 모두 복사&lt;br /&gt;
# RPI에 usb(파워), HDMI( 모니터), 키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
# os 선택하도록 하는데, Raspbian 을 선택. 아래에서 언어는 한글로, 키보드레이아웃은 kr로… ’설치’를 눌러 설치 진행.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxxt/Image%202018-03-06%20at%204.49.56%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
# 기다리면 설치 완료&lt;br /&gt;
&lt;br /&gt;
===  NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (더 빠르고, 단계가 적다.) ===&lt;br /&gt;
참고: https://www.raspberrypi.org/documentation/installation/installing-images/README.md &lt;br /&gt;
&lt;br /&gt;
** 2018년 6월 버전의 Raspbian이 ibus 한글입력기와 호환성 문제가 있는 것 같다. 한글을 써야한다면 다른 버전을 설치하자.**&lt;br /&gt;
&lt;br /&gt;
1. Raspbian 이미지 다운로드 &amp;amp; 압축풀기.&lt;br /&gt;
https://www.raspberrypi.org/downloads/raspbian/ &lt;br /&gt;
압축해제시 문제 발생하는 경우 7zip(윈도)나 the Unarchiver (mac) 사용.&lt;br /&gt;
Desktop 버전은 윈도우와 같은 GUI환경이고, Lite버전은 DOS같은 콘솔환경이다. &lt;br /&gt;
잘 모르겠다면 Desktop 버전을 설치.&lt;br /&gt;
&lt;br /&gt;
2. Etcher 다운로드 &amp;amp; 설치 ( 이미지 버닝 툴 - 이미지파일을 sd카드로 옮겨줌.)&lt;br /&gt;
&lt;br /&gt;
https://etcher.io/&lt;br /&gt;
&lt;br /&gt;
3. Echer 사용해 다운받은 이미지를 SD카드에 굽기.&lt;br /&gt;
&lt;br /&gt;
4. RPI에 usb(파워),  HDMI( 모니터),  키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
&lt;br /&gt;
== wifi 연결 ==&lt;br /&gt;
&lt;br /&gt;
# usb wifi 동글을 꽂는다.&lt;br /&gt;
# xwindow 우상단에 네트워크 아이콘을 클릭해 AP를 선택하고 비번을 입력하면 끝. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwv0/Image%202018-03-06%20at%204.50.27%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 소프트웨어 업데이트 ==&lt;br /&gt;
&lt;br /&gt;
# 터미널을 열고 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwlh/Image%202018-03-06%20at%204.52.39%20AM.png&amp;quot; width=300&amp;gt;&lt;br /&gt;
# 다음을 입력해 업데이트 필요한 소프트웨어 목록을 로드한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyP6/Image%202018-03-06%20at%204.56.43%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;upgrade 명령으로 업데이트를 설치한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get upgrade&amp;lt;/source&amp;gt;&lt;br /&gt;
업그레이드 할건지 확인하면 [y] [Enter]. 4. 한참 기다린 후 업그레이드가 완료되면 다운로드한 업데이트 파일을 지워서 용량을 확보한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get clean&amp;lt;/source&amp;gt;&lt;br /&gt;
== 한글설치 ==&lt;br /&gt;
&lt;br /&gt;
참고: http://cccding.tistory.com/96 1. 한글폰트 설치&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get install fonts-unfonts-core&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxzH/Image%202018-03-06%20at%204.57.23%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ibus한글 입력기 설치&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; sudo apt-get install ibus-hangul&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raspberry Pi configuration의 Localisation 설정. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxFi/Image%202018-03-06%20at%204.58.18%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pycS/Image%202018-03-06%20at%204.58.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxkS/Image%202018-03-06%20at%204.58.40%20AM.png&amp;quot; width=600&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Timezone은 Asia &amp;amp;gt; Seoul로 …&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK를 누르면 재부팅~!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;재부팅 후 우상단에 EN아이콘을 눌러 한글 입력기를 선택. 다시 한번 눌러 한글상태에 체크 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyTR/Image%202018-03-06%20at%204.59.14%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;메뉴도 한글로 되어있고 한글 입력도 잘 된다. 한&amp;amp;lt;-&amp;amp;gt;영 변환키는 [shift]+[space] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxVm/Image%202018-03-06%20at%205.02.15%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 라즈베리파이 화면공유 ==&lt;br /&gt;
&lt;br /&gt;
안그래도 좁은 책상위에 라즈베리파이용 키보드와 마우스까지 올라와있으니 안되겠다. 게다가 순간순간 어느 키보드를 눌러야 하는지 헷갈린다. 또 노트북에 물려 듀얼로 사용하던 모니터를 라즈베리파이에 연결하고나니 노트북 작업능률이 떨어진다. 이럴 때. VNC를 통해 라즈베리파이 화면을 노트북에 공유하고 노트북의 키보드와 마우스로 라즈베리파이를 제어한다. 참고: https://www.raspberrypi.org/documentation/remote-access/vnc/&lt;br /&gt;
&lt;br /&gt;
# 최근의 라즈비안에는 realVNC가 기본탑재되어있다. 새로인 install 할 필요는 없다. 구지 해야한다면&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;menu &amp;amp;gt; 기본설정(preferences) &amp;amp;gt; Raspberry Pi Configuration &amp;amp;gt; Interfaces 에 들어가서 VNC 항목을 Enabled에 체크 후 OK한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
내부 네트워크를 사용해 연결할 수 도, 인터넷을 통해 연결할 수도 있는데, 우리는 내부망을 사용하도록 하자. (아마 성능, 보안상 낫지 않을까?) 3. 작업표시줄 우측의 VNC아이콘을 누르면 RPI 의 IP address를 알 수 있다. &lt;br /&gt;
&lt;br /&gt;
https://www.realvnc.com/en/connect/_images/raspberry-pi-direct-address.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;노트북에 VNC viewer를 설치한다. 여기에서 받을 수 있다. https://www.realvnc.com/en/connect/download/viewer/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;주소창에 위에서 얻은 라즈베리파이의 IP주소를 넣는다. 처음 연결할 때 뭐라고 경고가 뜬다. 연결해도 되겠냐고 확인하는 거다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyRD/Image%202018-03-06%20at%205.03.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;기본 로그인 아이디는 ‘pi’, 패스워드는 ’raspberry’이다.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;키보드와 마우스, 모니터를 다 뽑고 재부팅한다. 노트북에서 잘 컨트롤 됨을 확인한다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxbP/Image%202018-03-06%20at%205.04.06%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;해상도를 적절히 (작게)하면 속도가 만족스럽다. 1024x768정도면 괜찮은듯. (위에서 한 번 나온 configuration메뉴에서 설정할 수 있다.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;마지막으로, ip address는 보통 고정되어있지 않고 부팅할 때마다 바뀌기 때문에, 어느날 갑자기 VNC연결이 안 될 수도 있다. 공유기 설정에서 라즈베리파이(에 연결된 ipTIME usb 동글)에 항상 정해진 ip 주소를 할당토록 설정한다. 방법은 공유기마다 다르겠지만… &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwvV/Image%202018-03-06%20at%205.04.36%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;노트북과 라즈베리파이 사이에 파일교환이 필요한 경우 VNC viewer의 화살표 아이콘을 누르거나, 라즈베리파이의 작업표시줄상 VNC아이콘을 누르면 된다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/2h333e1Z3R3X/Image%202017-10-24%20at%208.11.24%20%EC%98%A4%ED%9B%84.png&amp;quot; width=600&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspberry leaf (GPIO 라벨)설치 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;http://2.bp.blogspot.com/-AC6Gq5TaABU/USIcnBrnZaI/AAAAAAAAEfQ/bkCrzm4BZMc/s320/leaf+-+web.jpg&lt;br /&gt;
&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
참고: http://www.doctormonk.com/2013/02/raspberry-pi-and-breadboard-raspberry.html * GPIO에 라벨을 프린트해 붙여놓으면 편하겠다. * 26핀( model A, modelB 1)용 https://github.com/simonmonk/wiki_images/raw/master/raspberry%20leaf%20r2.pdf * 40핀(modelB2,3, model zero)용 https://github.com/splitbrain/rpibplusleaf&lt;br /&gt;
&lt;br /&gt;
[[category:raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=POV_(%EC%9E%94%EC%83%81%ED%9A%A8%EA%B3%BC)_display%EC%9A%A9_pixel_data_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=248</id>
		<title>POV (잔상효과) display용 pixel data 만들기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=POV_(%EC%9E%94%EC%83%81%ED%9A%A8%EA%B3%BC)_display%EC%9A%A9_pixel_data_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=248"/>
				<updated>2018-09-14T07:05:56Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서: # POV (잔상효과)용 pixel data (픽셀 데이타) 만들기  ## 이미지 구하기 일단 pov 디스플레이에 표시할 이미지를 만들거나 구한다. ## rescale &amp;amp; GIF c...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# POV (잔상효과)용 pixel data (픽셀 데이타) 만들기&lt;br /&gt;
&lt;br /&gt;
## 이미지 구하기&lt;br /&gt;
일단 pov 디스플레이에 표시할 이미지를 만들거나 구한다.&lt;br /&gt;
## rescale &amp;amp; GIF converting&lt;br /&gt;
표시할 POV 디스플레이의 세로 픽셀수 (led strip의 led 수)에 맞추어 스케일 조절하고 GIF로 저장한다. &lt;br /&gt;
## GIF &amp;gt; pixel data 컨버터 **convert.py**&lt;br /&gt;
adafruit의 `Kinetic POV project` github페이지에서 구할 수 있다.&lt;br /&gt;
https://github.com/adafruit/Kinetic_POV&lt;br /&gt;
convert폴더에 예제용 이미지와 함께 들어있다.&lt;br /&gt;
python 2.7용이다.&lt;br /&gt;
&lt;br /&gt;
### PIL 설치&lt;br /&gt;
python으로 만들어진 converter에서 `PIL` (python Image Library)라는 모듈을 필요로함.&lt;br /&gt;
PIL은 개발중지되었으므로 우리는 그 후속 버전인 `pilow`를 설치해 사용함.(사용방법은 동일) &lt;br /&gt;
파이썬 모듈 설치 프로그램인 `pip`를 사용한다. [참고: pip사용해 python 모둘 설치하기](https://wikidocs.net/5763)&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
$pip2 install pillow&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/2r322G0U2a1W/Image%202018-08-19%20at%207.38.16%20AM.png)&lt;br /&gt;
&lt;br /&gt;
### convert.py 실행&lt;br /&gt;
```bash&lt;br /&gt;
$python2 convert.py testImage.gif &amp;gt; testImage.h&lt;br /&gt;
```&lt;br /&gt;
여러개의 이미지를 동시에 변환할 수도 있다.&lt;br /&gt;
```bash&lt;br /&gt;
$python2 convert.py *.gif &amp;gt; testImages.h&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
![](https://cl.ly/1F2m2n1x3c0a/pride.gif)&lt;br /&gt;
&lt;br /&gt;
^원본&lt;br /&gt;
```c&lt;br /&gt;
// Don't edit this file!  It's software-generated.&lt;br /&gt;
// See convert.py script instead.&lt;br /&gt;
&lt;br /&gt;
#define PALETTE1  0&lt;br /&gt;
#define PALETTE4  1&lt;br /&gt;
#define PALETTE8  2&lt;br /&gt;
#define TRUECOLOR 3&lt;br /&gt;
&lt;br /&gt;
#define NUM_LEDS 16&lt;br /&gt;
&lt;br /&gt;
// pride.gif ---------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
const uint8_t PROGMEM palette00[][3] = {&lt;br /&gt;
  {  34,   0,  75 },&lt;br /&gt;
  {  75,  75,   0 },&lt;br /&gt;
  {   0,  50,   0 },&lt;br /&gt;
  {   0,   0,   0 },&lt;br /&gt;
  {  75,   0,   0 },&lt;br /&gt;
  {  75,  18,   0 },&lt;br /&gt;
  {   0,   6,  75 } };&lt;br /&gt;
&lt;br /&gt;
const uint8_t PROGMEM pixels00[] = {&lt;br /&gt;
  0X34, 0X44, 0X44, 0X44, 0X44, 0X44, 0X44, 0X43,&lt;br /&gt;
  0X33, 0X44, 0X44, 0X44, 0X44, 0X44, 0X44, 0X33,&lt;br /&gt;
  0X53, 0X34, 0X44, 0X44, 0X44, 0X44, 0X43, 0X35,&lt;br /&gt;
  0X55, 0X33, 0X44, 0X44, 0X44, 0X44, 0X33, 0X55,&lt;br /&gt;
  0X55, 0X53, 0X34, 0X44, 0X44, 0X43, 0X35, 0X55,&lt;br /&gt;
  0X55, 0X55, 0X33, 0X44, 0X44, 0X33, 0X55, 0X55,&lt;br /&gt;
  0X55, 0X55, 0X53, 0X34, 0X43, 0X35, 0X55, 0X55,&lt;br /&gt;
  0X55, 0X55, 0X55, 0X33, 0X33, 0X55, 0X55, 0X55,&lt;br /&gt;
  0X55, 0X55, 0X55, 0X53, 0X35, 0X55, 0X55, 0X55,&lt;br /&gt;
  0X35, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X53,&lt;br /&gt;
  0X33, 0X55, 0X55, 0X55, 0X55, 0X55, 0X55, 0X33,&lt;br /&gt;
  0X13, 0X35, 0X55, 0X55, 0X55, 0X55, 0X53, 0X31,&lt;br /&gt;
  0X11, 0X33, 0X55, 0X55, 0X55, 0X55, 0X33, 0X11,&lt;br /&gt;
  0X11, 0X13, 0X35, 0X55, 0X55, 0X53, 0X31, 0X11,&lt;br /&gt;
  0X11, 0X11, 0X33, 0X55, 0X55, 0X33, 0X11, 0X11,&lt;br /&gt;
  0X11, 0X11, 0X13, 0X35, 0X53, 0X31, 0X11, 0X11,&lt;br /&gt;
  0X11, 0X11, 0X11, 0X33, 0X33, 0X11, 0X11, 0X11,&lt;br /&gt;
  0X11, 0X11, 0X11, 0X13, 0X31, 0X11, 0X11, 0X11,&lt;br /&gt;
  0X31, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X13,&lt;br /&gt;
  0X33, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X33,&lt;br /&gt;
  0X23, 0X31, 0X11, 0X11, 0X11, 0X11, 0X13, 0X32,&lt;br /&gt;
  0X22, 0X33, 0X11, 0X11, 0X11, 0X11, 0X33, 0X22,&lt;br /&gt;
  0X22, 0X23, 0X31, 0X11, 0X11, 0X13, 0X32, 0X22,&lt;br /&gt;
  0X22, 0X22, 0X33, 0X11, 0X11, 0X33, 0X22, 0X22,&lt;br /&gt;
  0X22, 0X22, 0X23, 0X31, 0X13, 0X32, 0X22, 0X22,&lt;br /&gt;
  0X22, 0X22, 0X22, 0X33, 0X33, 0X22, 0X22, 0X22,&lt;br /&gt;
  0X22, 0X22, 0X22, 0X23, 0X32, 0X22, 0X22, 0X22,&lt;br /&gt;
  0X32, 0X22, 0X22, 0X22, 0X22, 0X22, 0X22, 0X23,&lt;br /&gt;
  0X33, 0X22, 0X22, 0X22, 0X22, 0X22, 0X22, 0X33,&lt;br /&gt;
  0X63, 0X32, 0X22, 0X22, 0X22, 0X22, 0X23, 0X36,&lt;br /&gt;
  0X66, 0X33, 0X22, 0X22, 0X22, 0X22, 0X33, 0X66,&lt;br /&gt;
  0X66, 0X63, 0X32, 0X22, 0X22, 0X23, 0X36, 0X66,&lt;br /&gt;
  0X66, 0X66, 0X33, 0X22, 0X22, 0X33, 0X66, 0X66,&lt;br /&gt;
  0X66, 0X66, 0X63, 0X32, 0X23, 0X36, 0X66, 0X66,&lt;br /&gt;
  0X66, 0X66, 0X66, 0X33, 0X33, 0X66, 0X66, 0X66,&lt;br /&gt;
  0X66, 0X66, 0X66, 0X63, 0X36, 0X66, 0X66, 0X66,&lt;br /&gt;
  0X36, 0X66, 0X66, 0X66, 0X66, 0X66, 0X66, 0X63,&lt;br /&gt;
  0X33, 0X66, 0X66, 0X66, 0X66, 0X66, 0X66, 0X33,&lt;br /&gt;
  0X03, 0X36, 0X66, 0X66, 0X66, 0X66, 0X63, 0X30,&lt;br /&gt;
  0X00, 0X33, 0X66, 0X66, 0X66, 0X66, 0X33, 0X00,&lt;br /&gt;
  0X00, 0X03, 0X36, 0X66, 0X66, 0X63, 0X30, 0X00,&lt;br /&gt;
  0X00, 0X00, 0X33, 0X66, 0X66, 0X33, 0X00, 0X00,&lt;br /&gt;
  0X00, 0X00, 0X03, 0X36, 0X63, 0X30, 0X00, 0X00,&lt;br /&gt;
  0X00, 0X00, 0X00, 0X33, 0X33, 0X00, 0X00, 0X00,&lt;br /&gt;
  0X00, 0X00, 0X00, 0X03, 0X30, 0X00, 0X00, 0X00,&lt;br /&gt;
  0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03,&lt;br /&gt;
  0X33, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X33,&lt;br /&gt;
  0X43, 0X30, 0X00, 0X00, 0X00, 0X00, 0X03, 0X34,&lt;br /&gt;
  0X44, 0X33, 0X00, 0X00, 0X00, 0X00, 0X33, 0X44,&lt;br /&gt;
  0X44, 0X43, 0X30, 0X00, 0X00, 0X03, 0X34, 0X44,&lt;br /&gt;
  0X44, 0X44, 0X33, 0X00, 0X00, 0X33, 0X44, 0X44,&lt;br /&gt;
  0X44, 0X44, 0X43, 0X30, 0X03, 0X34, 0X44, 0X44,&lt;br /&gt;
  0X44, 0X44, 0X44, 0X33, 0X33, 0X44, 0X44, 0X44,&lt;br /&gt;
  0X44, 0X44, 0X44, 0X43, 0X34, 0X44, 0X44, 0X44 };&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
  uint8_t        type;    // PALETTE[1,4,8] or TRUECOLOR&lt;br /&gt;
  line_t         lines;   // Length of image (in scanlines)&lt;br /&gt;
  const uint8_t *palette; // -&amp;gt; PROGMEM color table (NULL if truecolor)&lt;br /&gt;
  const uint8_t *pixels;  // -&amp;gt; Pixel data in PROGMEM&lt;br /&gt;
} image;&lt;br /&gt;
&lt;br /&gt;
const image PROGMEM images[] = {&lt;br /&gt;
  { PALETTE4 ,   54, (const uint8_t *)palette00, pixels00 }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#define NUM_IMAGES (sizeof(images) / sizeof(images[0]))&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
^ 변환된 데이타&lt;br /&gt;
&lt;br /&gt;
* GIF 파일형식에서는 palette라는 개념이 있는데, 이미지에서 사용된 컬러를 표로 만들어 놓은 것이다. 예를들어 이미지가 빨강 흰색 보라 3개 색만 사용하고 있다면 팔레트에는 이 3개 색이 등록된다. 이런 방법을 쓰면 각 픽셀마다 RGB값을 기억하는 대신 팔레트의 몇번째 색인지만 기록하면 되므로 저장공간을 많이 아낄 수 있다.&lt;br /&gt;
&lt;br /&gt;
팔레트기능을 사용하지 않는 GIF파일은 아무리 적은 수의 컬러를 사용하고 있어도 truecolor로 취급되어 크기가 커진다. GIF opimizer를 사용해 크기즐 줄이도록 하자.&lt;br /&gt;
[online GIF optimizer](http://gifgifs.com/optimizer/)&lt;br /&gt;
![||600](https://cl.ly/3M3C2t3M1K0h/Image%202018-08-19%20at%209.28.40%20AM.png)&lt;br /&gt;
color Reduction 옵션을 사용한다.&lt;br /&gt;
&lt;br /&gt;
* 위 예제에서 컬러팔레트는...&lt;br /&gt;
```c&lt;br /&gt;
const uint8_t PROGMEM palette00[][3] = {&lt;br /&gt;
  {  34,   0,  75 },&lt;br /&gt;
  {  75,  75,   0 },&lt;br /&gt;
  {   0,  50,   0 },&lt;br /&gt;
  {   0,   0,   0 },&lt;br /&gt;
  {  75,   0,   0 },&lt;br /&gt;
  {  75,  18,   0 },&lt;br /&gt;
  {   0,   6,  75 } };&lt;br /&gt;
```&lt;br /&gt;
이 부분이 이미지에 사용된 컬러를 나타내는 컬러팔레트다. 7개 컬러가 사용되었나보다.&lt;br /&gt;
&lt;br /&gt;
* 각 픽셀정보를 담고 있는 곳은 &lt;br /&gt;
```c&lt;br /&gt;
const uint8_t PROGMEM pixels00[] = {&lt;br /&gt;
  0X34, 0X44, 0X44, 0X44, 0X44, 0X44, 0X44, 0X43,&lt;br /&gt;
  0X33, 0X44, 0X44, 0X44, 0X44, 0X44, 0X44, 0X33,&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
이 부분이다.&lt;br /&gt;
흑백 이미지는 1개byte에 8개 픽셀 데이터를,&lt;br /&gt;
16색이하 이미지는 1개 byte에 2개 팩셀 데이터를, &lt;br /&gt;
256색 이미지는 1개 byte가 1개 픽셀데이터를,&lt;br /&gt;
트루컬러 이미지는 3개 byte가 1가 픽셀데이터를 담도록 하고 있다.(저장공간 아끼기위함)&lt;br /&gt;
&lt;br /&gt;
위 변환된 예제는 1byte가 2픽셀 데이터를 담고잇으며, 각 바이트 값을 보면 0~6의 값을 갖는데, 물론 팔레트의 몇번 컬러인지를 나타내는 것이다.&lt;br /&gt;
&lt;br /&gt;
* `image`라는 struct 를 만들어 사용하고 있는데, &lt;br /&gt;
```&lt;br /&gt;
typedef struct {&lt;br /&gt;
  uint8_t        type;    // PALETTE[1,4,8] or TRUECOLOR&lt;br /&gt;
  line_t         lines;   // Length of image (in scanlines)&lt;br /&gt;
  const uint8_t *palette; // -&amp;gt; PROGMEM color table (NULL if truecolor)&lt;br /&gt;
  const uint8_t *pixels;  // -&amp;gt; Pixel data in PROGMEM&lt;br /&gt;
} image;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
* 배열로 선언된 이유는 여러개 이미지를 동시에 변환하는 기능을 위해서인다. 첫번째 그림은 image[0], 두번째는 image[1]...에 담긴다.&lt;br /&gt;
```c&lt;br /&gt;
const image PROGMEM images[] = {&lt;br /&gt;
  { PALETTE4 ,   54, (const uint8_t *)palette00, pixels00 }&lt;br /&gt;
};&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
* 데이터가 모두 `PROGMEM`키워드를 사용해 선언되었는데, 이는 아두이노 코드가 실행될 때 이 데이터는 sram에 로딩하지 않고 flash 메모리에서 직접 읽도록 한다는 의미이다. 속도는 느려지겠지만 램공간을 아낄 수 있다.&lt;br /&gt;
참고: https://www.arduino.cc/reference/en/language/variables/utilities/progmem/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 참고자료&lt;br /&gt;
https://learn.adafruit.com/genesis-poi-dotstar-led-persistence-of-vision-poi?view=all#preparing-images&lt;br /&gt;
&lt;br /&gt;
[[category::Display]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=MOSFET_(%EB%AA%A8%EC%8A%A4%ED%8E%AB%EC%9D%84_%EC%82%AC%EC%9A%A9%ED%95%9C_%EC%8A%A4%EC%9C%84%EC%B9%98_%ED%9A%8C%EB%A1%9C)&amp;diff=247</id>
		<title>MOSFET (모스펫을 사용한 스위치 회로)</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=MOSFET_(%EB%AA%A8%EC%8A%A4%ED%8E%AB%EC%9D%84_%EC%82%AC%EC%9A%A9%ED%95%9C_%EC%8A%A4%EC%9C%84%EC%B9%98_%ED%9A%8C%EB%A1%9C)&amp;diff=247"/>
				<updated>2018-09-14T06:58:03Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서: # MOSFET 를 사용한 switching 회로  arduino 등 디지털 신호로 회로를 켜고 끄는 스위칭회로를 구현하기 위해 일반적으로 가장 먼저 생각할 수 있...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# MOSFET 를 사용한 switching 회로&lt;br /&gt;
&lt;br /&gt;
arduino 등 디지털 신호로 회로를 켜고 끄는 스위칭회로를 구현하기 위해 일반적으로 가장 먼저 생각할 수 있는 방법은 &lt;br /&gt;
트랜지스터일것이다. 그러나 led strip이나 대형 모터와 같이 많은 전류를 사용하는 경우 일반적인 트랜지스터의 200~800mA의 &lt;br /&gt;
정격용량으로는 감당하지 못한다.&lt;br /&gt;
이 때 transistor 대신 사용 할 수 있는 것이 `IRLB8721` `IRFZ44N`등 MOSFET.&lt;br /&gt;
기본적인 용도는 트랜지스터와 동일하게 증폭 / switching 이며, 더 높은 전압, 더 많은 전류를 허용한다. 대신 동작속도는 접합형 TR보다 다소 느리다.&lt;br /&gt;
트랜지스터와는 달리 순수하게 (전류아닌) 전압으로 제어한다. &lt;br /&gt;
&lt;br /&gt;
`TP120`등 달링턴 트랜지스터는 일반 BJT 트랜지스터를 2개 연속 연결해 한 묶음으로 묶은 것인데 전압 손실과 열 발산에서 MOSFET이 더 유리하다고 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## MOSFET&lt;br /&gt;
![||600](https://cl.ly/f6d6d9da3520/Image%202018-08-25%20at%2010.46.41%20PM.jpg)&lt;br /&gt;
&lt;br /&gt;
Metal Oxide Semiconductor Field Effect Transistor 의 약자로 Fieㅣd Effect(전계효과)를 사용하기에 이런 이름이 붙었다. GATE 터미널에 전압(Gate-source Voltage, V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;)이 가해지면&lt;br /&gt;
Source와 Drain 터미널 사이에 전류가 흐르거나 끊기도록 할 수 있다. &lt;br /&gt;
&lt;br /&gt;
![](https://www.electronics-tutorials.ws/transistor/tran20a.gif)&lt;br /&gt;
^ 위 기호에서 보이는 Substrate 단자는 일반적으로 Source에 연결되어있어 생략된다.&lt;br /&gt;
&lt;br /&gt;
* 모델마다 특정 V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; 에서 허용하는 전류가 다르므로 작은 신호전압(3.3V) 을 사용하거나 큰 전류를 사용하는 경우 데이터시트를 확인하자.&lt;br /&gt;
![](https://cdn.instructables.com/FFD/1CB8/JDYUZ55K/FFD1CB8JDYUZ55K.LARGE.jpg?auto=webp&amp;amp;width=600&amp;amp;crop=3:2_)&lt;br /&gt;
&lt;br /&gt;
### N-channel 과 P-Channel.&lt;br /&gt;
* N-channel MOSFET (NMOS): 소스와 드레인 터미널이 N 물질로, 몸통은 P물질로 만들어져 전자의 이동에 의해 전류를 제어한다.&lt;br /&gt;
* P-channel MOSFET (PMOS): 소스와 드레인 터미널이 P 물질로, 몸통은 N물질로 만들어져 전공의 이동에 의해 전류를 제어한다.&lt;br /&gt;
&lt;br /&gt;
### Depletion Mode, Enhancement Mode&lt;br /&gt;
&lt;br /&gt;
 N-channel type 에서...&lt;br /&gt;
* Depletion Mode:  GATE terminal에 전압(V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;)이 0이상인 경우 전류가 흐르고 있다가, -전압을 인가했을 때 전류가 줄어들어 OFF되는 제품. 자주 사용되지는 않음.&lt;br /&gt;
* ** Enhancement Mode: GATE terminal에 전압(V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;)이 0이하인 경우 전류가 OFF이다가 +전압을 인가하면(좀 더 정확히는 threshold 이상의 전압,V&amp;lt;sub&amp;gt;TH&amp;lt;/sub&amp;gt;sub&amp;gt;) 전류가 흐르는 제품. 스위치 용도로 좋기 때문에 널리 사용됨.** &lt;br /&gt;
&lt;br /&gt;
P-channel type 에서...&lt;br /&gt;
* Depletion Mode:  GATE terminal에 전압(V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;)이 0이하인 경우 전류가 흐르고 있다가, +전압을 인가했을 때 전류가 줄어들어 OFF되는 제품.&lt;br /&gt;
* Enhancement Mode: GATE terminal에 전압(V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;)이 0이상인 경우 전류가 OFF이다가 -전압을 인가하면 전류가 흐르는 제품.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;table1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tbody&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width:230px;&amp;quot;&amp;gt;MOSFET type&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width:100px;&amp;quot;&amp;gt;V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&amp;amp;#160;&amp;amp;#061;&amp;amp;#160;+ve&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width:90px;&amp;quot;&amp;gt;V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&amp;amp;#160;&amp;amp;#061;&amp;amp;#160;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width:90px;&amp;quot;&amp;gt;V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&amp;amp;#160;&amp;amp;#061;&amp;amp;#160;-ve&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;N-Channel Depletion&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ON&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ON&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;N-Channel Enhancement&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ON&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;P-Channel Depletion&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ON&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ON&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;P-Channel Enhancement&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ON&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/tbody&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
## N-channel MOSFET 스위치 회로&lt;br /&gt;
가장 기본적인 회로&lt;br /&gt;
![](https://cl.ly/aae5302eb99e/Image%2525202018-08-26%252520at%25252012.25.06%252520AM.gif)&lt;br /&gt;
&lt;br /&gt;
* npn 트랜지스터 스위치 회로와 비슷하다고 생각해도 좋다.&lt;br /&gt;
* 전자를 사용해 전류를 이동시키는 N-channel이므로 SOURCE terminal은 GND에 연결.&lt;br /&gt;
* 신호 전압 V&amp;lt;sub&amp;gt;in&amp;lt;/sub&amp;gt;를 Gate 에 연결. &lt;br /&gt;
* R&amp;lt;sub&amp;gt;gs&amp;lt;/sub&amp;gt;는 pull-down 저항. arduino의 출력핀에 연결한다면 필요없다.&lt;br /&gt;
* R&amp;lt;sub&amp;gt;in&amp;lt;/sub&amp;gt;으로 V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;를 max값 아래로 유지한다. 아두이노에 연결한다면 구지 필요 없다. &lt;br /&gt;
* Drain쪽에 로드를 연결한다. 모터 등 인덕턴스가 있어 역전류가 우려되는 상황이라면 플라이휠 다이오드를 달아준다.&lt;br /&gt;
&lt;br /&gt;
![||600](https://cl.ly/5d579901e500/Image%202018-08-26%20at%201.19.20%20AM.jpg)&lt;br /&gt;
&lt;br /&gt;
## 참고&lt;br /&gt;
영문 자료: https://www.electronics-tutorials.ws/transistor/tran_6.html &lt;br /&gt;
&lt;br /&gt;
[[category:Circuitary]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=246</id>
		<title>Raspberry Pi setup 라즈베리파이 설치하기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=246"/>
				<updated>2018-09-13T22:18:27Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: /* 한글설치 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WIKI}}&lt;br /&gt;
= Raspberry Pi setup (Raspbian version9, stretch기준) =&lt;br /&gt;
&lt;br /&gt;
== 준비물 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyVs/Image%202018-03-06%20at%204.34.03%20AM.png&amp;quot; width=600 &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspbian 설치 ==&lt;br /&gt;
 '''라즈베리파이에 키보드나 마우스, 모니터 매번 연결하려니 번거롭다. 특히 pi-zero 같은 경우엔 usb포트는 하나밖에 없고 hdmi단자도 많이 쓰이지 않는 mini규격이라 난감하기 그지없다. 모니터 키보드 마우스 연결않고 (심지어 wifi동글 없어도!) 다른 노트북이나 데스크탑을 사용해 제어할 수 있는데, Headless 설정이라고 한다. (모니터 없다는 의미) [[Raspberry pi의 Headless 설정]] 문서를 참고하자'''&lt;br /&gt;
&lt;br /&gt;
=== Noobs 사용(더 쉽다) ===&lt;br /&gt;
* 설치방법 참고: https://www.raspberrypi.org/learning/software-guide/quickstart/&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ‘NOOBS’ 다운로드 https://www.raspberrypi.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src = &amp;quot;https://cl.ly/pwrJ/Image%202018-03-06%20at%204.39.37%20AM.png&amp;quot; width = 600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사할 수도 있다. 더 빠르고, 단계가 적다.''&lt;br /&gt;
# ‘SD formatter’ 다운로드 &amp;amp;amp; 설치 https://www.sdcard.org/downloads/formatter_4/index.html&lt;br /&gt;
# SD카드를 노트북에 삽입하고 SD formatter 실행. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwqB/Image%202018-03-06%20at%204.42.19%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''다른 방법을 통해 SD카드에 raspbian 설치해도 좋지만 FAT32로 포맷되어야함을 잊지말것. FATex는 안됨.''&lt;br /&gt;
# NOOPS zip파일을 풀어 SD카드에 모두 복사&lt;br /&gt;
# RPI에 usb(파워), HDMI( 모니터), 키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
# os 선택하도록 하는데, Raspbian 을 선택. 아래에서 언어는 한글로, 키보드레이아웃은 kr로… ’설치’를 눌러 설치 진행.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxxt/Image%202018-03-06%20at%204.49.56%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
# 기다리면 설치 완료&lt;br /&gt;
&lt;br /&gt;
===  NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (더 빠르고, 단계가 적다.) ===&lt;br /&gt;
참고: https://www.raspberrypi.org/documentation/installation/installing-images/README.md &lt;br /&gt;
&lt;br /&gt;
1. Raspbian 이미지 다운로드 &amp;amp; 압축풀기.&lt;br /&gt;
https://www.raspberrypi.org/downloads/raspbian/ &lt;br /&gt;
압축해제시 문제 발생하는 경우 7zip(윈도)나 the Unarchiver (mac) 사용.&lt;br /&gt;
Desktop 버전은 윈도우와 같은 GUI환경이고, Lite버전은 DOS같은 콘솔환경이다. &lt;br /&gt;
잘 모르겠다면 Desktop 버전을 설치.&lt;br /&gt;
&lt;br /&gt;
2. Etcher 다운로드 &amp;amp; 설치 ( 이미지 버닝 툴 - 이미지파일을 sd카드로 옮겨줌.)&lt;br /&gt;
&lt;br /&gt;
https://etcher.io/&lt;br /&gt;
&lt;br /&gt;
3. Echer 사용해 다운받은 이미지를 SD카드에 굽기.&lt;br /&gt;
&lt;br /&gt;
4. RPI에 usb(파워),  HDMI( 모니터),  키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
&lt;br /&gt;
== wifi 연결 ==&lt;br /&gt;
&lt;br /&gt;
# usb wifi 동글을 꽂는다.&lt;br /&gt;
# xwindow 우상단에 네트워크 아이콘을 클릭해 AP를 선택하고 비번을 입력하면 끝. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwv0/Image%202018-03-06%20at%204.50.27%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 소프트웨어 업데이트 ==&lt;br /&gt;
&lt;br /&gt;
# 터미널을 열고 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwlh/Image%202018-03-06%20at%204.52.39%20AM.png&amp;quot; width=300&amp;gt;&lt;br /&gt;
# 다음을 입력해 업데이트 필요한 소프트웨어 목록을 로드한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyP6/Image%202018-03-06%20at%204.56.43%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;upgrade 명령으로 업데이트를 설치한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get upgrade&amp;lt;/source&amp;gt;&lt;br /&gt;
업그레이드 할건지 확인하면 [y] [Enter]. 4. 한참 기다린 후 업그레이드가 완료되면 다운로드한 업데이트 파일을 지워서 용량을 확보한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get clean&amp;lt;/source&amp;gt;&lt;br /&gt;
== 한글설치 ==&lt;br /&gt;
&lt;br /&gt;
참고: http://cccding.tistory.com/96 1. 한글폰트 설치&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get install fonts-unfonts-core&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxzH/Image%202018-03-06%20at%204.57.23%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ibus한글 입력기 설치&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; sudo apt-get install ibus-hangul&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raspberry Pi configuration의 Localisation 설정. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxFi/Image%202018-03-06%20at%204.58.18%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pycS/Image%202018-03-06%20at%204.58.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxkS/Image%202018-03-06%20at%204.58.40%20AM.png&amp;quot; width=600&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Timezone은 Asia &amp;amp;gt; Seoul로 …&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK를 누르면 재부팅~!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;재부팅 후 우상단에 EN아이콘을 눌러 한글 입력기를 선택. 다시 한번 눌러 한글상태에 체크 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyTR/Image%202018-03-06%20at%204.59.14%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;메뉴도 한글로 되어있고 한글 입력도 잘 된다. 한&amp;amp;lt;-&amp;amp;gt;영 변환키는 [shift]+[space] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxVm/Image%202018-03-06%20at%205.02.15%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 라즈베리파이 화면공유 ==&lt;br /&gt;
&lt;br /&gt;
안그래도 좁은 책상위에 라즈베리파이용 키보드와 마우스까지 올라와있으니 안되겠다. 게다가 순간순간 어느 키보드를 눌러야 하는지 헷갈린다. 또 노트북에 물려 듀얼로 사용하던 모니터를 라즈베리파이에 연결하고나니 노트북 작업능률이 떨어진다. 이럴 때. VNC를 통해 라즈베리파이 화면을 노트북에 공유하고 노트북의 키보드와 마우스로 라즈베리파이를 제어한다. 참고: https://www.raspberrypi.org/documentation/remote-access/vnc/&lt;br /&gt;
&lt;br /&gt;
# 최근의 라즈비안에는 realVNC가 기본탑재되어있다. 새로인 install 할 필요는 없다. 구지 해야한다면&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;menu &amp;amp;gt; 기본설정(preferences) &amp;amp;gt; Raspberry Pi Configuration &amp;amp;gt; Interfaces 에 들어가서 VNC 항목을 Enabled에 체크 후 OK한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
내부 네트워크를 사용해 연결할 수 도, 인터넷을 통해 연결할 수도 있는데, 우리는 내부망을 사용하도록 하자. (아마 성능, 보안상 낫지 않을까?) 3. 작업표시줄 우측의 VNC아이콘을 누르면 RPI 의 IP address를 알 수 있다. &lt;br /&gt;
&lt;br /&gt;
https://www.realvnc.com/en/connect/_images/raspberry-pi-direct-address.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;노트북에 VNC viewer를 설치한다. 여기에서 받을 수 있다. https://www.realvnc.com/en/connect/download/viewer/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;주소창에 위에서 얻은 라즈베리파이의 IP주소를 넣는다. 처음 연결할 때 뭐라고 경고가 뜬다. 연결해도 되겠냐고 확인하는 거다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyRD/Image%202018-03-06%20at%205.03.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;기본 로그인 아이디는 ‘pi’, 패스워드는 ’raspberry’이다.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;키보드와 마우스, 모니터를 다 뽑고 재부팅한다. 노트북에서 잘 컨트롤 됨을 확인한다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxbP/Image%202018-03-06%20at%205.04.06%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;해상도를 적절히 (작게)하면 속도가 만족스럽다. 1024x768정도면 괜찮은듯. (위에서 한 번 나온 configuration메뉴에서 설정할 수 있다.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;마지막으로, ip address는 보통 고정되어있지 않고 부팅할 때마다 바뀌기 때문에, 어느날 갑자기 VNC연결이 안 될 수도 있다. 공유기 설정에서 라즈베리파이(에 연결된 ipTIME usb 동글)에 항상 정해진 ip 주소를 할당토록 설정한다. 방법은 공유기마다 다르겠지만… &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwvV/Image%202018-03-06%20at%205.04.36%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;노트북과 라즈베리파이 사이에 파일교환이 필요한 경우 VNC viewer의 화살표 아이콘을 누르거나, 라즈베리파이의 작업표시줄상 VNC아이콘을 누르면 된다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/2h333e1Z3R3X/Image%202017-10-24%20at%208.11.24%20%EC%98%A4%ED%9B%84.png&amp;quot; width=600&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspberry leaf (GPIO 라벨)설치 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;http://2.bp.blogspot.com/-AC6Gq5TaABU/USIcnBrnZaI/AAAAAAAAEfQ/bkCrzm4BZMc/s320/leaf+-+web.jpg&lt;br /&gt;
&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
참고: http://www.doctormonk.com/2013/02/raspberry-pi-and-breadboard-raspberry.html * GPIO에 라벨을 프린트해 붙여놓으면 편하겠다. * 26핀( model A, modelB 1)용 https://github.com/simonmonk/wiki_images/raw/master/raspberry%20leaf%20r2.pdf * 40핀(modelB2,3, model zero)용 https://github.com/splitbrain/rpibplusleaf&lt;br /&gt;
&lt;br /&gt;
[[category:raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=245</id>
		<title>Raspberry Pi setup 라즈베리파이 설치하기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=245"/>
				<updated>2018-09-13T02:14:40Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: /* NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (더 빠르고, 단계가 적다.) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WIKI}}&lt;br /&gt;
= Raspberry Pi setup (Raspbian version9, stretch기준) =&lt;br /&gt;
&lt;br /&gt;
== 준비물 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyVs/Image%202018-03-06%20at%204.34.03%20AM.png&amp;quot; width=600 &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspbian 설치 ==&lt;br /&gt;
 '''라즈베리파이에 키보드나 마우스, 모니터 매번 연결하려니 번거롭다. 특히 pi-zero 같은 경우엔 usb포트는 하나밖에 없고 hdmi단자도 많이 쓰이지 않는 mini규격이라 난감하기 그지없다. 모니터 키보드 마우스 연결않고 (심지어 wifi동글 없어도!) 다른 노트북이나 데스크탑을 사용해 제어할 수 있는데, Headless 설정이라고 한다. (모니터 없다는 의미) [[Raspberry pi의 Headless 설정]] 문서를 참고하자'''&lt;br /&gt;
&lt;br /&gt;
=== Noobs 사용(더 쉽다) ===&lt;br /&gt;
* 설치방법 참고: https://www.raspberrypi.org/learning/software-guide/quickstart/&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ‘NOOBS’ 다운로드 https://www.raspberrypi.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src = &amp;quot;https://cl.ly/pwrJ/Image%202018-03-06%20at%204.39.37%20AM.png&amp;quot; width = 600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사할 수도 있다. 더 빠르고, 단계가 적다.''&lt;br /&gt;
# ‘SD formatter’ 다운로드 &amp;amp;amp; 설치 https://www.sdcard.org/downloads/formatter_4/index.html&lt;br /&gt;
# SD카드를 노트북에 삽입하고 SD formatter 실행. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwqB/Image%202018-03-06%20at%204.42.19%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''다른 방법을 통해 SD카드에 raspbian 설치해도 좋지만 FAT32로 포맷되어야함을 잊지말것. FATex는 안됨.''&lt;br /&gt;
# NOOPS zip파일을 풀어 SD카드에 모두 복사&lt;br /&gt;
# RPI에 usb(파워), HDMI( 모니터), 키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
# os 선택하도록 하는데, Raspbian 을 선택. 아래에서 언어는 한글로, 키보드레이아웃은 kr로… ’설치’를 눌러 설치 진행.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxxt/Image%202018-03-06%20at%204.49.56%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
# 기다리면 설치 완료&lt;br /&gt;
&lt;br /&gt;
===  NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (더 빠르고, 단계가 적다.) ===&lt;br /&gt;
참고: https://www.raspberrypi.org/documentation/installation/installing-images/README.md &lt;br /&gt;
&lt;br /&gt;
1. Raspbian 이미지 다운로드 &amp;amp; 압축풀기.&lt;br /&gt;
https://www.raspberrypi.org/downloads/raspbian/ &lt;br /&gt;
압축해제시 문제 발생하는 경우 7zip(윈도)나 the Unarchiver (mac) 사용.&lt;br /&gt;
Desktop 버전은 윈도우와 같은 GUI환경이고, Lite버전은 DOS같은 콘솔환경이다. &lt;br /&gt;
잘 모르겠다면 Desktop 버전을 설치.&lt;br /&gt;
&lt;br /&gt;
2. Etcher 다운로드 &amp;amp; 설치 ( 이미지 버닝 툴 - 이미지파일을 sd카드로 옮겨줌.)&lt;br /&gt;
&lt;br /&gt;
https://etcher.io/&lt;br /&gt;
&lt;br /&gt;
3. Echer 사용해 다운받은 이미지를 SD카드에 굽기.&lt;br /&gt;
&lt;br /&gt;
4. RPI에 usb(파워),  HDMI( 모니터),  키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
&lt;br /&gt;
== wifi 연결 ==&lt;br /&gt;
&lt;br /&gt;
# usb wifi 동글을 꽂는다.&lt;br /&gt;
# xwindow 우상단에 네트워크 아이콘을 클릭해 AP를 선택하고 비번을 입력하면 끝. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwv0/Image%202018-03-06%20at%204.50.27%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 소프트웨어 업데이트 ==&lt;br /&gt;
&lt;br /&gt;
# 터미널을 열고 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwlh/Image%202018-03-06%20at%204.52.39%20AM.png&amp;quot; width=300&amp;gt;&lt;br /&gt;
# 다음을 입력해 업데이트 필요한 소프트웨어 목록을 로드한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyP6/Image%202018-03-06%20at%204.56.43%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;upgrade 명령으로 업데이트를 설치한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get upgrade&amp;lt;/source&amp;gt;&lt;br /&gt;
업그레이드 할건지 확인하면 [y] [Enter]. 4. 한참 기다린 후 업그레이드가 완료되면 다운로드한 업데이트 파일을 지워서 용량을 확보한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get clean&amp;lt;/source&amp;gt;&lt;br /&gt;
== 한글설치 ==&lt;br /&gt;
&lt;br /&gt;
참고: http://cccding.tistory.com/96 1. 한글폰트 설치&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get install ttf-unfonts-core&amp;lt;/source&amp;gt;&lt;br /&gt;
'''ttf-unfonts-core 가 font-unfonts-core로 대체되었다는 메시지가 나온다. &amp;lt;code&amp;gt;sudo apt-get install fonts-unfonts-core&amp;lt;/code&amp;gt;로 다시 실행한다.''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxzH/Image%202018-03-06%20at%204.57.23%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ibus한글 입력기 설치&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; sudo apt-get install ibus-hangul&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raspberry Pi configuration의 Localisation 설정. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxFi/Image%202018-03-06%20at%204.58.18%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pycS/Image%202018-03-06%20at%204.58.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxkS/Image%202018-03-06%20at%204.58.40%20AM.png&amp;quot; width=600&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Timezone은 Asia &amp;amp;gt; Seoul로 …&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK를 누르면 재부팅~!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;재부팅 후 우상단에 EN아이콘을 눌러 한글 입력기를 선택. 다시 한번 눌러 한글상태에 체크 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyTR/Image%202018-03-06%20at%204.59.14%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;메뉴도 한글로 되어있고 한글 입력도 잘 된다. 한&amp;amp;lt;-&amp;amp;gt;영 변환키는 [shift]+[space] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxVm/Image%202018-03-06%20at%205.02.15%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 라즈베리파이 화면공유 ==&lt;br /&gt;
&lt;br /&gt;
안그래도 좁은 책상위에 라즈베리파이용 키보드와 마우스까지 올라와있으니 안되겠다. 게다가 순간순간 어느 키보드를 눌러야 하는지 헷갈린다. 또 노트북에 물려 듀얼로 사용하던 모니터를 라즈베리파이에 연결하고나니 노트북 작업능률이 떨어진다. 이럴 때. VNC를 통해 라즈베리파이 화면을 노트북에 공유하고 노트북의 키보드와 마우스로 라즈베리파이를 제어한다. 참고: https://www.raspberrypi.org/documentation/remote-access/vnc/&lt;br /&gt;
&lt;br /&gt;
# 최근의 라즈비안에는 realVNC가 기본탑재되어있다. 새로인 install 할 필요는 없다. 구지 해야한다면&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;menu &amp;amp;gt; 기본설정(preferences) &amp;amp;gt; Raspberry Pi Configuration &amp;amp;gt; Interfaces 에 들어가서 VNC 항목을 Enabled에 체크 후 OK한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
내부 네트워크를 사용해 연결할 수 도, 인터넷을 통해 연결할 수도 있는데, 우리는 내부망을 사용하도록 하자. (아마 성능, 보안상 낫지 않을까?) 3. 작업표시줄 우측의 VNC아이콘을 누르면 RPI 의 IP address를 알 수 있다. &lt;br /&gt;
&lt;br /&gt;
https://www.realvnc.com/en/connect/_images/raspberry-pi-direct-address.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;노트북에 VNC viewer를 설치한다. 여기에서 받을 수 있다. https://www.realvnc.com/en/connect/download/viewer/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;주소창에 위에서 얻은 라즈베리파이의 IP주소를 넣는다. 처음 연결할 때 뭐라고 경고가 뜬다. 연결해도 되겠냐고 확인하는 거다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyRD/Image%202018-03-06%20at%205.03.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;기본 로그인 아이디는 ‘pi’, 패스워드는 ’raspberry’이다.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;키보드와 마우스, 모니터를 다 뽑고 재부팅한다. 노트북에서 잘 컨트롤 됨을 확인한다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxbP/Image%202018-03-06%20at%205.04.06%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;해상도를 적절히 (작게)하면 속도가 만족스럽다. 1024x768정도면 괜찮은듯. (위에서 한 번 나온 configuration메뉴에서 설정할 수 있다.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;마지막으로, ip address는 보통 고정되어있지 않고 부팅할 때마다 바뀌기 때문에, 어느날 갑자기 VNC연결이 안 될 수도 있다. 공유기 설정에서 라즈베리파이(에 연결된 ipTIME usb 동글)에 항상 정해진 ip 주소를 할당토록 설정한다. 방법은 공유기마다 다르겠지만… &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwvV/Image%202018-03-06%20at%205.04.36%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;노트북과 라즈베리파이 사이에 파일교환이 필요한 경우 VNC viewer의 화살표 아이콘을 누르거나, 라즈베리파이의 작업표시줄상 VNC아이콘을 누르면 된다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/2h333e1Z3R3X/Image%202017-10-24%20at%208.11.24%20%EC%98%A4%ED%9B%84.png&amp;quot; width=600&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspberry leaf (GPIO 라벨)설치 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;http://2.bp.blogspot.com/-AC6Gq5TaABU/USIcnBrnZaI/AAAAAAAAEfQ/bkCrzm4BZMc/s320/leaf+-+web.jpg&lt;br /&gt;
&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
참고: http://www.doctormonk.com/2013/02/raspberry-pi-and-breadboard-raspberry.html * GPIO에 라벨을 프린트해 붙여놓으면 편하겠다. * 26핀( model A, modelB 1)용 https://github.com/simonmonk/wiki_images/raw/master/raspberry%20leaf%20r2.pdf * 40핀(modelB2,3, model zero)용 https://github.com/splitbrain/rpibplusleaf&lt;br /&gt;
&lt;br /&gt;
[[category:raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=DotStar_LED_Strip&amp;diff=244</id>
		<title>DotStar LED Strip</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=DotStar_LED_Strip&amp;diff=244"/>
				<updated>2018-08-22T08:35:02Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# dotstar&lt;br /&gt;
[adafruit](https://adafruit.com)에서 만든 led strip 하드웨어와 라이브러리. neopixel과 마찬가지로 strip 형태의 제품을 원하는 곳에서 끊어 사용할 수 있다.&lt;br /&gt;
SPI 통신 프로토콜을 사용하며 기존의 neopixel에 비해 빠르기 때문에 POV (잔상효과) 디스플레이 만들기에 더 적합하다.&lt;br /&gt;
![||600](https://cdn-learn.adafruit.com/assets/assets/000/021/922/medium800/leds_dotstar-banner.jpg?1419375063)&lt;br /&gt;
![||600](https://cdn-learn.adafruit.com/assets/assets/000/026/743/medium640/projects_Bike_Wheel_POV_Display_adafruit_02.jpg?1438085928)&lt;br /&gt;
&lt;br /&gt;
## dotstar vs neopixel&lt;br /&gt;
&lt;br /&gt;
|dotstar|noepixel|&lt;br /&gt;
|-------|--------|&lt;br /&gt;
|데이터 전송과 깜빡이는 속도(19.2Khz)가 빠르기 때문에 POV display에 적합.|데이터 전송속도가 800khz로 고정됨. 긴 strip의 경우 데이터 정체 발생함.|&lt;br /&gt;
||깜빡이는 속도가 400hz로 POV 에 부적합.|&lt;br /&gt;
|아두이노의 서보 라이브러리, tone()명령, 인터럽트 사용 가능|인터럽트 사용불가|&lt;br /&gt;
|좀 더 비쌈|좀 더 저렴함|&lt;br /&gt;
|제품 구성이 제한적임| 매우 다양한 제품군(원형,선형 등등)|&lt;br /&gt;
|4핀 터미널(파워+-/데이터/클럭)|3핀 터미널(파워+-/데이터)|&lt;br /&gt;
&lt;br /&gt;
## dotstar 사용지 주의점&lt;br /&gt;
* dotstar 는 5V에서 작동한다. rsapberry pi 등 3.3v 시스템을 사용하는 경우 레벨시프터를 사용해 3.3v 신호를 5v로 변환해주어야 한다. ([레벨시프터](https://www.adafruit.com/product/1787), [국내 메카솔루션 레벨컨버터](http://mechasolution.com/shop/goods/goods_view.php?goodsno=545609&amp;amp;category=))&lt;br /&gt;
* led 1개당 최대60mA를 소비한다. 갯수에 따라 충분한 전력을 공급토록 한다. 아마도 아두이노의 내부전원(500mA) 만으로는 부족할 것이다. (예를들어 30개 led의 dotstar를 사용한다면 60mA * 30개 = 1800mA, 즉 약 2A 전원장치를 사용하는 것이 좋다.) &lt;br /&gt;
* led가 동시에 모두 켜져있는 것이 아니라면 최소20mA로 계산토록하자.&lt;br /&gt;
&lt;br /&gt;
# Arduino 코드&lt;br /&gt;
## Adafruit DotStar 라이브러리 인스톨&lt;br /&gt;
![||600](https://cl.ly/3P0D2w3g251U/Image%202018-08-18%20at%2010.00.58%20AM.png)&lt;br /&gt;
## 샘플 코드&lt;br /&gt;
```c&lt;br /&gt;
	#include &amp;lt;Adafruit_DotStar.h&amp;gt;&lt;br /&gt;
	#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	Adafruit_DotStar strip = Adafruit_DotStar(100, 4, 5, DOTSTAR_GRB);&lt;br /&gt;
	// led 100개, 데이터핀 4, 클럭핀 5, 데이터 순서 Green-Red-Blue&lt;br /&gt;
&lt;br /&gt;
	void setup(){&lt;br /&gt;
		strip.begin();&lt;br /&gt;
		strip.show(); 	// led 초기화. 모두 끔.&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	void loop(){&lt;br /&gt;
		strip.setPixelColor(30, 0xFF0000);	//31번째 led, 빨강색&lt;br /&gt;
		strip.show();&lt;br /&gt;
		delay(20);&lt;br /&gt;
	}&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
* `Adafruit_DotStar(int howManyLeds, int DATA, int CLK, 컬러타입)`&lt;br /&gt;
데이터핀과 클럭핀은 임의의 디지털 핀으로(하드웨어 연결한대로) 지정해 주면된다.&lt;br /&gt;
컬러타입은 dotstar 제품마다 고유하게 정해져있다. 생산시기에 따라 BRG를 사용하기도, GRB를 사용하기도 한다. 구매한 하드웨어의 스펙시트를 살펴보자.&lt;br /&gt;
* `Adafruit_DotStar(howManyLeds, 컬러타입)`&lt;br /&gt;
하드웨어 SPI를 사용하고자 하는 경우에는 (조금 더 빠르다) 사용할 수 있는 핀이 보드 종류마다 정해져있으므로 특별히 써주지 않아도 된다. (물론 하드웨어는 그에 알맞게 연결되어있어야 한다. Arduino uno의 경우 data-11, clk-13)&lt;br /&gt;
&lt;br /&gt;
* `strip.begin()`으로 ledstrip 과 통신을 시작한다.&lt;br /&gt;
&lt;br /&gt;
* `strip.setPixelColor(ledNumber, 컬러)`&lt;br /&gt;
ledNumber 는 0부터 카운트한다. &lt;br /&gt;
컬러는 16진수로 RGB를 표기한다.&lt;br /&gt;
&lt;br /&gt;
* 컬러를 설정한 후에는 `strip.show()`를 해주어야만 실제 적용된다.&lt;br /&gt;
&lt;br /&gt;
# adafruit_dotstar.h 함수 목록&lt;br /&gt;
```&lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
    Adafruit_DotStar(uint16_t n, uint8_t o=DOTSTAR_BRG);&lt;br /&gt;
    Adafruit_DotStar(uint16_t n, uint8_t d, uint8_t c, uint8_t o=DOTSTAR_BRG);&lt;br /&gt;
   ~Adafruit_DotStar(void);&lt;br /&gt;
  void&lt;br /&gt;
    begin(void),                            // Prime pins/SPI for output&lt;br /&gt;
    clear(),                                // Set all pixel data to zero&lt;br /&gt;
    setBrightness(uint8_t),                 // Set global brightness 0-255&lt;br /&gt;
    setPixelColor(uint16_t n, uint32_t c),&lt;br /&gt;
    setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b),&lt;br /&gt;
    show(void),                             // Issue color data to strip&lt;br /&gt;
    updatePins(void),                       // Change pin assignments (HW)&lt;br /&gt;
    updatePins(uint8_t d, uint8_t c),       // Change pin assignments (SW)&lt;br /&gt;
    updateLength(uint16_t n);               // Change length&lt;br /&gt;
  uint32_t&lt;br /&gt;
    Color(uint8_t r, uint8_t g, uint8_t b), // R,G,B to 32-bit color&lt;br /&gt;
    getPixelColor(uint16_t n) const;        // Return 32-bit pixel color&lt;br /&gt;
  uint16_t&lt;br /&gt;
    numPixels(void);                        // Return number of pixels&lt;br /&gt;
  uint8_t&lt;br /&gt;
    getBrightness(void) const,              // Return global brightness&lt;br /&gt;
   *getPixels(void) const,                  // Return pixel data pointer&lt;br /&gt;
    sine8(uint8_t) const,&lt;br /&gt;
    gamma8(uint8_t) const;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## fastLed 라이브러리&lt;br /&gt;
fastled 라이브러리를 사용하면 더 다양한 시각효과를 더 정교하게 조작할 수 있다고 한다.&lt;br /&gt;
시도해보자.&lt;br /&gt;
https://github.com/FastLED/FastLED/wiki/Overview&lt;br /&gt;
&lt;br /&gt;
# 참고&lt;br /&gt;
adafruit 제품 소개: https://learn.adafruit.com/adafruit-dotstar-leds/overview&lt;br /&gt;
&lt;br /&gt;
[[category:Display]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=DotStar_LED_Strip&amp;diff=243</id>
		<title>DotStar LED Strip</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=DotStar_LED_Strip&amp;diff=243"/>
				<updated>2018-08-18T01:59:09Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# DotStar&lt;br /&gt;
[adafruit](https://adafruit.com)에서 만든 led strip 하드웨어와 라이브러리. neopixel과 마찬가지로 strip 형태의 제품을 원하는 곳에서 끊어 사용할 수 있다.&lt;br /&gt;
SPI 통신 프로토콜을 사용하며 기존의 neopixel에 비해 빠르기 때문에 POV (잔상효과) 디스플레이 만들기에 더 적합하다.&lt;br /&gt;
&lt;br /&gt;
![||600](https://cdn-learn.adafruit.com/assets/assets/000/021/922/medium800/leds_dotstar-banner.jpg?1419375063)&lt;br /&gt;
![||600](https://cdn-learn.adafruit.com/assets/assets/000/026/743/medium640/projects_Bike_Wheel_POV_Display_adafruit_02.jpg?1438085928)&lt;br /&gt;
&lt;br /&gt;
## dotstar vs neopixel&lt;br /&gt;
&lt;br /&gt;
|dotstar|noepixel|&lt;br /&gt;
|-------|--------|&lt;br /&gt;
|데이터 전송과 깜빡이는 속도(19.2Khz)가 빠르기 때문에 POV display에 적합.|데이터 전송속도가 800khz로 고정됨. 긴 strip의 경우 데이터 정체 발생함.|&lt;br /&gt;
||깜빡이는 속도가 400hz로 POV 에 부적합.|&lt;br /&gt;
|아두이노의 서보 라이브러리, tone()명령, 인터럽트 사용 가능|인터럽트 사용불가|&lt;br /&gt;
|좀 더 비쌈|좀 더 저렴함|&lt;br /&gt;
|제품 구성이 제한적임| 매우 다양한 제품군(원형,선형 등등)|&lt;br /&gt;
|4핀 터미널(파워+-/데이터/클럭)|3핀 터미널(파워+-/데이터)|&lt;br /&gt;
&lt;br /&gt;
## dotstar 사용지 주의점&lt;br /&gt;
* dotstar 는 5V에서 작동한다. rsapberry pi 등 3.3v 시스템을 사용하는 경우 레벨시프터를 사용해 3.3v 신호를 5v로 변환해주어야 한다. ([레벨시프터](https://www.adafruit.com/product/1787), [국내 메카솔루션 레벨컨버터](http://mechasolution.com/shop/goods/goods_view.php?goodsno=545609&amp;amp;category=))&lt;br /&gt;
* led 1개당 최대60mA를 소비한다. 갯수에 따라 충분한 전력을 공급토록 한다. 아마도 아두이노의 내부전원(500mA) 만으로는 부족할 것이다. (예를들어 30개 led의 dotstar를 사용한다면 60mA * 30개 = 1800mA, 즉 약 2A 전원장치를 사용하는 것이 좋다.) &lt;br /&gt;
* led가 동시에 모두 켜져있는 것이 아니라면 최소20mA로 계산토록하자.&lt;br /&gt;
&lt;br /&gt;
# Arduino 예제&lt;br /&gt;
## Adafruit DotStar 라이브러리 인스톨&lt;br /&gt;
![||600](https://cl.ly/3P0D2w3g251U/Image%202018-08-18%20at%2010.00.58%20AM.png)&lt;br /&gt;
## 샘플 코드&lt;br /&gt;
```c&lt;br /&gt;
	#include &amp;lt;Adafruit_DotStar.h&amp;gt;&lt;br /&gt;
	#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	Adafruit_DotStar strip = Adafruit_DotStar(100, 4, 5, DOTSTAR_GRB);&lt;br /&gt;
	// led 100개, 데이터핀 4, 클럭핀 5, 데이터 순서 Green-Red-Blue&lt;br /&gt;
&lt;br /&gt;
	void setup(){&lt;br /&gt;
		strip.begin();&lt;br /&gt;
		strip.show(); 	// led 초기화. 모두 끔.&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	void loop(){&lt;br /&gt;
		strip.setPixelColor(30, 0xFF0000);	//31번째 led, 빨강색&lt;br /&gt;
		strip.show();&lt;br /&gt;
		delay(20);&lt;br /&gt;
	}&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
* `Adafruit_DotStar(int howManyLeds, int DATA, int CLK, 컬러타입)`&lt;br /&gt;
데이터핀과 클럭핀은 임의의 디지털 핀으로(하드웨어 연결한대로) 지정해 주면된다.&lt;br /&gt;
컬러타입은 dotstar 제품마다 고유하게 정해져있다. 생산시기에 따라 BRG를 사용하기도, GRB를 사용하기도 한다. 구매한 하드웨어의 스펙시트를 살펴보자.&lt;br /&gt;
* `Adafruit_DotStar(howManyLeds, 컬러타입)`&lt;br /&gt;
하드웨어 SPI를 사용하고자 하는 경우에는 (조금 더 빠르다) 사용할 수 있는 핀이 보드 종류마다 정해져있으므로 특별히 써주지 않아도 된다. (물론 하드웨어는 그에 알맞게 연결되어있어야 한다. Arduino uno의 경우 data-11, clk-13)&lt;br /&gt;
&lt;br /&gt;
* `strip.begin()`으로 ledstrip 과 통신을 시작한다.&lt;br /&gt;
&lt;br /&gt;
* `strip.setPixelColor(ledNumber, 컬러)`&lt;br /&gt;
ledNumber 는 0부터 카운트한다. &lt;br /&gt;
컬러는 16진수로 RGB를 표기한다.&lt;br /&gt;
&lt;br /&gt;
* 컬러를 설정한 후에는 `strip.show()`를 해주어야만 실제 적용된다.&lt;br /&gt;
&lt;br /&gt;
## fastLed 라이브러리&lt;br /&gt;
fastled 라이브러리를 사용하면 더 다양한 시각효과를 더 정교하게 조작할 수 있다고 한다.&lt;br /&gt;
시도해보자.&lt;br /&gt;
https://github.com/FastLED/FastLED/wiki/Overview&lt;br /&gt;
&lt;br /&gt;
# 참고&lt;br /&gt;
adafruit DotStar제품 소개: https://learn.adafruit.com/adafruit-dotstar-leds/overview&lt;br /&gt;
&lt;br /&gt;
[[category:Display]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=DotStar_LED_Strip&amp;diff=242</id>
		<title>DotStar LED Strip</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=DotStar_LED_Strip&amp;diff=242"/>
				<updated>2018-08-18T01:58:36Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서: # DotStar [adafruit](https://adafruit.com)에서 만든 led strip 하드웨어와 라이브러리. neopixel과 마찬가지로 strip 형태의 제품을 원하는 곳에서 끊어 사...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# DotStar&lt;br /&gt;
[adafruit](https://adafruit.com)에서 만든 led strip 하드웨어와 라이브러리. neopixel과 마찬가지로 strip 형태의 제품을 원하는 곳에서 끊어 사용할 수 있다.&lt;br /&gt;
SPI 통신 프로토콜을 사용하며 기존의 neopixel에 비해 빠르기 때문에 POV (잔상효과) 디스플레이 만들기에 더 적합하다.&lt;br /&gt;
![||600](https://cdn-learn.adafruit.com/assets/assets/000/021/922/medium800/leds_dotstar-banner.jpg?1419375063)&lt;br /&gt;
![||600](https://cdn-learn.adafruit.com/assets/assets/000/026/743/medium640/projects_Bike_Wheel_POV_Display_adafruit_02.jpg?1438085928)&lt;br /&gt;
&lt;br /&gt;
## dotstar vs neopixel&lt;br /&gt;
&lt;br /&gt;
|dotstar|noepixel|&lt;br /&gt;
|-------|--------|&lt;br /&gt;
|데이터 전송과 깜빡이는 속도(19.2Khz)가 빠르기 때문에 POV display에 적합.|데이터 전송속도가 800khz로 고정됨. 긴 strip의 경우 데이터 정체 발생함.|&lt;br /&gt;
||깜빡이는 속도가 400hz로 POV 에 부적합.|&lt;br /&gt;
|아두이노의 서보 라이브러리, tone()명령, 인터럽트 사용 가능|인터럽트 사용불가|&lt;br /&gt;
|좀 더 비쌈|좀 더 저렴함|&lt;br /&gt;
|제품 구성이 제한적임| 매우 다양한 제품군(원형,선형 등등)|&lt;br /&gt;
|4핀 터미널(파워+-/데이터/클럭)|3핀 터미널(파워+-/데이터)|&lt;br /&gt;
&lt;br /&gt;
## dotstar 사용지 주의점&lt;br /&gt;
* dotstar 는 5V에서 작동한다. rsapberry pi 등 3.3v 시스템을 사용하는 경우 레벨시프터를 사용해 3.3v 신호를 5v로 변환해주어야 한다. ([레벨시프터](https://www.adafruit.com/product/1787), [국내 메카솔루션 레벨컨버터](http://mechasolution.com/shop/goods/goods_view.php?goodsno=545609&amp;amp;category=))&lt;br /&gt;
* led 1개당 최대60mA를 소비한다. 갯수에 따라 충분한 전력을 공급토록 한다. 아마도 아두이노의 내부전원(500mA) 만으로는 부족할 것이다. (예를들어 30개 led의 dotstar를 사용한다면 60mA * 30개 = 1800mA, 즉 약 2A 전원장치를 사용하는 것이 좋다.) &lt;br /&gt;
* led가 동시에 모두 켜져있는 것이 아니라면 최소20mA로 계산토록하자.&lt;br /&gt;
&lt;br /&gt;
# Arduino 예제&lt;br /&gt;
## Adafruit DotStar 라이브러리 인스톨&lt;br /&gt;
![||600](https://cl.ly/3P0D2w3g251U/Image%202018-08-18%20at%2010.00.58%20AM.png)&lt;br /&gt;
## 샘플 코드&lt;br /&gt;
```c&lt;br /&gt;
	#include &amp;lt;Adafruit_DotStar.h&amp;gt;&lt;br /&gt;
	#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	Adafruit_DotStar strip = Adafruit_DotStar(100, 4, 5, DOTSTAR_GRB);&lt;br /&gt;
	// led 100개, 데이터핀 4, 클럭핀 5, 데이터 순서 Green-Red-Blue&lt;br /&gt;
&lt;br /&gt;
	void setup(){&lt;br /&gt;
		strip.begin();&lt;br /&gt;
		strip.show(); 	// led 초기화. 모두 끔.&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	void loop(){&lt;br /&gt;
		strip.setPixelColor(30, 0xFF0000);	//31번째 led, 빨강색&lt;br /&gt;
		strip.show();&lt;br /&gt;
		delay(20);&lt;br /&gt;
	}&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
* `Adafruit_DotStar(int howManyLeds, int DATA, int CLK, 컬러타입)`&lt;br /&gt;
데이터핀과 클럭핀은 임의의 디지털 핀으로(하드웨어 연결한대로) 지정해 주면된다.&lt;br /&gt;
컬러타입은 dotstar 제품마다 고유하게 정해져있다. 생산시기에 따라 BRG를 사용하기도, GRB를 사용하기도 한다. 구매한 하드웨어의 스펙시트를 살펴보자.&lt;br /&gt;
* `Adafruit_DotStar(howManyLeds, 컬러타입)`&lt;br /&gt;
하드웨어 SPI를 사용하고자 하는 경우에는 (조금 더 빠르다) 사용할 수 있는 핀이 보드 종류마다 정해져있으므로 특별히 써주지 않아도 된다. (물론 하드웨어는 그에 알맞게 연결되어있어야 한다. Arduino uno의 경우 data-11, clk-13)&lt;br /&gt;
&lt;br /&gt;
* `strip.begin()`으로 ledstrip 과 통신을 시작한다.&lt;br /&gt;
&lt;br /&gt;
* `strip.setPixelColor(ledNumber, 컬러)`&lt;br /&gt;
ledNumber 는 0부터 카운트한다. &lt;br /&gt;
컬러는 16진수로 RGB를 표기한다.&lt;br /&gt;
&lt;br /&gt;
* 컬러를 설정한 후에는 `strip.show()`를 해주어야만 실제 적용된다.&lt;br /&gt;
&lt;br /&gt;
## fastLed 라이브러리&lt;br /&gt;
fastled 라이브러리를 사용하면 더 다양한 시각효과를 더 정교하게 조작할 수 있다고 한다.&lt;br /&gt;
시도해보자.&lt;br /&gt;
https://github.com/FastLED/FastLED/wiki/Overview&lt;br /&gt;
&lt;br /&gt;
# 참고&lt;br /&gt;
adafruit DotStar제품 소개: https://learn.adafruit.com/adafruit-dotstar-leds/overview&lt;br /&gt;
&lt;br /&gt;
[[category:Display]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Picamera_(Raspberry_pi_%EC%B9%B4%EB%A9%94%EB%9D%BC)_%EC%84%A4%EC%B9%98&amp;diff=241</id>
		<title>Picamera (Raspberry pi 카메라) 설치</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Picamera_(Raspberry_pi_%EC%B9%B4%EB%A9%94%EB%9D%BC)_%EC%84%A4%EC%B9%98&amp;diff=241"/>
				<updated>2018-07-09T09:29:31Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# picamera (Raspberry pi 카메라) 설치&lt;br /&gt;
참고: [라즈베리파이 공식 페이지의 카메라 연결. 파이썬 사용](https://projects.raspberrypi.org/en/projects/getting-started-with-picamera)&lt;br /&gt;
&lt;br /&gt;
## 하드웨어 준비&lt;br /&gt;
![||600](https://cl.ly/snV5/20180709_104510.jpg)&lt;br /&gt;
* Raspberry pi 보드 (나는 pi-zero w 사용했다.)&lt;br /&gt;
* pi-camera (나는 pimoroni.com에서 나온 pi-zero 용 카메라 사용.)&lt;br /&gt;
* 모니터 + hdmi 케이블 (optional. vnc화면 공유 사용 가능하나 omxplayer를 사용한 동영상 재생은 hdmi 사용해 직접 연결할 것.)&lt;br /&gt;
* 키보드 마우스 (optional. 나는  vnc 화면공유 사용.)&lt;br /&gt;
&lt;br /&gt;
## 카메라 연결하고 활성화&lt;br /&gt;
### 카메라 포트에 카메라 연결&lt;br /&gt;
![||600](https://projects-static.raspberrypi.org/projects/getting-started-with-picamera/76595bc53548f43cb74fe647dfd7a322022c7fe0/en/images/connect-camera.jpg)&lt;br /&gt;
&lt;br /&gt;
pi-zero camera&lt;br /&gt;
![||600](https://cdn.shopify.com/s/files/1/0174/1800/products/Camera_module_3_of_4_1024x1024.JPG?v=1488988334)&lt;br /&gt;
&lt;br /&gt;
### 카메라 활성화&lt;br /&gt;
부팅 후  시작메뉴 &amp;gt; preference &amp;gt; raspberry pi configuration &amp;gt; Interface &amp;gt; camera 항목을 활성화 (Enabled)&lt;br /&gt;
데스크탑GUI가 아닌 CLI환경이라면 &lt;br /&gt;
```&lt;br /&gt;
$ sudo raspi-configd&lt;br /&gt;
```&lt;br /&gt;
명령을 실행해 카메라 활성화한다.&lt;br /&gt;
&lt;br /&gt;
![||600](https://projects-static.raspberrypi.org/projects/getting-started-with-picamera/76595bc53548f43cb74fe647dfd7a322022c7fe0/en/images/raspi-config-menu.png)&lt;br /&gt;
![||600](https://cl.ly/sniO/Image%202018-07-09%20at%2011.00.40%20AM.png)&lt;br /&gt;
&lt;br /&gt;
재부팅된다...&lt;br /&gt;
&lt;br /&gt;
## 테스트샷&lt;br /&gt;
`raspistill` 은 스틸 이미지, `raspivid`는 동영상을 찍는 프로그램이다.&lt;br /&gt;
### 사진&lt;br /&gt;
```&lt;br /&gt;
$ raspistill -o testImage.jpg&lt;br /&gt;
```&lt;br /&gt;
`-o` 옵션은 저장파일명 설정.&lt;br /&gt;
&lt;br /&gt;
![||600](https://cl.ly/so23/Image%202018-07-09%20at%2011.14.36%20AM.png)&lt;br /&gt;
&lt;br /&gt;
### 동영상&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
$ raspivid -t 10000 -o testVid.h264&lt;br /&gt;
$ omxplayer testVid.h264&lt;br /&gt;
```&lt;br /&gt;
10초동안 녹화 &amp;amp; 재생(omxplayer)&lt;br /&gt;
&lt;br /&gt;
[[category:Raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Picamera_(Raspberry_pi_%EC%B9%B4%EB%A9%94%EB%9D%BC)_%EC%84%A4%EC%B9%98&amp;diff=240</id>
		<title>Picamera (Raspberry pi 카메라) 설치</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Picamera_(Raspberry_pi_%EC%B9%B4%EB%A9%94%EB%9D%BC)_%EC%84%A4%EC%B9%98&amp;diff=240"/>
				<updated>2018-07-09T02:33:50Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# picamera (Raspberry pi 카메라) 설치&lt;br /&gt;
참고: [라즈베리파이 공식 페이지의 카메라 연결. 파이썬 사용](https://projects.raspberrypi.org/en/projects/getting-started-with-picamera)&lt;br /&gt;
&lt;br /&gt;
## 하드웨어 준비&lt;br /&gt;
* Raspberry pi 보드 (나는 pi-zero w 사용했다.)&lt;br /&gt;
* pi-camera (나는 pimoroni.com에서 나온 pi-zero 용 카메라 사용.)&lt;br /&gt;
* 모니터 + hdmi 케이블 (optional. vnc화면 공유 사용 가능하나 omxplayer를 사용한 동영상 재생은 hdmi 사용해 직접 연결할 것.)&lt;br /&gt;
* 키보드 마우스 (optional. 나는  vnc 화면공유 사용.)&lt;br /&gt;
&lt;br /&gt;
## 카메라 연결하고 활성화&lt;br /&gt;
### 카메라 포트에 카메라 연결&lt;br /&gt;
![||600](https://projects-static.raspberrypi.org/projects/getting-started-with-picamera/76595bc53548f43cb74fe647dfd7a322022c7fe0/en/images/connect-camera.jpg)&lt;br /&gt;
&lt;br /&gt;
pi-zero camera&lt;br /&gt;
![||600](https://cdn.shopify.com/s/files/1/0174/1800/products/Camera_module_3_of_4_1024x1024.JPG?v=1488988334)&lt;br /&gt;
&lt;br /&gt;
### 카메라 활성화&lt;br /&gt;
부팅 후  시작메뉴 &amp;gt; preference &amp;gt; raspberry pi configuration &amp;gt; Interface &amp;gt; camera 항목을 활성화 (Enabled)&lt;br /&gt;
데스크탑GUI가 아닌 CLI환경이라면 &lt;br /&gt;
```&lt;br /&gt;
$ sudo raspi-configd&lt;br /&gt;
```&lt;br /&gt;
명령을 실행해 카메라 활성화한다.&lt;br /&gt;
&lt;br /&gt;
![||600](https://projects-static.raspberrypi.org/projects/getting-started-with-picamera/76595bc53548f43cb74fe647dfd7a322022c7fe0/en/images/raspi-config-menu.png)&lt;br /&gt;
![||600](https://cl.ly/sniO/Image%202018-07-09%20at%2011.00.40%20AM.png)&lt;br /&gt;
&lt;br /&gt;
재부팅된다...&lt;br /&gt;
&lt;br /&gt;
## 테스트샷&lt;br /&gt;
`raspistill` 은 스틸 이미지, `raspivid`는 동영상을 찍는 프로그램이다.&lt;br /&gt;
### 사진&lt;br /&gt;
```&lt;br /&gt;
$ raspistill -o testImage.jpg&lt;br /&gt;
```&lt;br /&gt;
`-o` 옵션은 저장파일명 설정.&lt;br /&gt;
&lt;br /&gt;
![||600](https://cl.ly/so23/Image%202018-07-09%20at%2011.14.36%20AM.png)&lt;br /&gt;
&lt;br /&gt;
### 동영상&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
$ raspivid -t 10000 -o testVid.h264&lt;br /&gt;
$ omxplayer testVid.h264&lt;br /&gt;
```&lt;br /&gt;
10초동안 녹화 &amp;amp; 재생(omxplayer)&lt;br /&gt;
&lt;br /&gt;
[[category:Raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Picamera_(Raspberry_pi_%EC%B9%B4%EB%A9%94%EB%9D%BC)_%EC%84%A4%EC%B9%98&amp;diff=239</id>
		<title>Picamera (Raspberry pi 카메라) 설치</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Picamera_(Raspberry_pi_%EC%B9%B4%EB%A9%94%EB%9D%BC)_%EC%84%A4%EC%B9%98&amp;diff=239"/>
				<updated>2018-07-09T02:32:57Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서: # picamera (Raspberry pi 카메라) 설치 참고: [라즈베리파이 공식 페이지의 카메라 연결. 파이썬 사용](https://projects.raspberrypi.org/en/projects/getting-sta...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# picamera (Raspberry pi 카메라) 설치&lt;br /&gt;
참고: [라즈베리파이 공식 페이지의 카메라 연결. 파이썬 사용](https://projects.raspberrypi.org/en/projects/getting-started-with-picamera)&lt;br /&gt;
&lt;br /&gt;
## 하드웨어 준비&lt;br /&gt;
* Raspberry pi 보드 (나는 pi-zero w 사용했다.)&lt;br /&gt;
* pi-camera (나는 pimoroni.com에서 나온 pi-zero 용 카메라 사용.)&lt;br /&gt;
* 모니터 + hdmi 케이블 (optional. vnc화면 공유 사용 가능하나 omxplayer를 사용한 동영상 재생은 hdmi 사용해 직접 연결할 것.)&lt;br /&gt;
* 키보드 마우스 (optional. 나는  vnc 화면공유 사용.)&lt;br /&gt;
&lt;br /&gt;
## 카메라 연결하고 활성화&lt;br /&gt;
### 카메라 포트에 카메라 연결&lt;br /&gt;
![||600](https://projects-static.raspberrypi.org/projects/getting-started-with-picamera/76595bc53548f43cb74fe647dfd7a322022c7fe0/en/images/connect-camera.jpg)&lt;br /&gt;
&lt;br /&gt;
pi-zero camera&lt;br /&gt;
![||600](https://cdn.shopify.com/s/files/1/0174/1800/products/Camera_module_3_of_4_1024x1024.JPG?v=1488988334)&lt;br /&gt;
&lt;br /&gt;
### 카메라 활성화&lt;br /&gt;
부팅 후  시작메뉴 &amp;gt; preference &amp;gt; raspberry pi configuration &amp;gt; Interface &amp;gt; camera 항목을 활성화 (Enabled)&lt;br /&gt;
데스크탑GUI가 아닌 CLI환경이라면 &lt;br /&gt;
```&lt;br /&gt;
$ sudo raspi-configd&lt;br /&gt;
```&lt;br /&gt;
명령을 실행해 카메라 활성화한다.&lt;br /&gt;
&lt;br /&gt;
![||600](https://projects-static.raspberrypi.org/projects/getting-started-with-picamera/76595bc53548f43cb74fe647dfd7a322022c7fe0/en/images/raspi-config-menu.png)&lt;br /&gt;
![||600](https://cl.ly/sniO/Image%202018-07-09%20at%2011.00.40%20AM.png)&lt;br /&gt;
&lt;br /&gt;
재부팅된다...&lt;br /&gt;
&lt;br /&gt;
### 테스트샷&lt;br /&gt;
`raspistill` 은 스틸 이미지, `raspivid`는 동영상을 찍는 프로그램이다.&lt;br /&gt;
#### 사진&lt;br /&gt;
```&lt;br /&gt;
$ raspistill -o testImage.jpg&lt;br /&gt;
```&lt;br /&gt;
`-o` 옵션은 저장파일명 설정.&lt;br /&gt;
&lt;br /&gt;
![||600](https://cl.ly/so23/Image%202018-07-09%20at%2011.14.36%20AM.png)&lt;br /&gt;
&lt;br /&gt;
#### 동영상&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
$ raspivid -t 10000 -o testVid.h264&lt;br /&gt;
$ omxplayer testVid.h264&lt;br /&gt;
```&lt;br /&gt;
10초동안 녹화 &amp;amp; 재생(omxplayer)&lt;br /&gt;
&lt;br /&gt;
[[category:Raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_pi_zero_%EC%84%A4%EC%A0%95_(_headless_)&amp;diff=238</id>
		<title>Raspberry pi zero 설정 ( headless )</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_pi_zero_%EC%84%A4%EC%A0%95_(_headless_)&amp;diff=238"/>
				<updated>2018-07-09T01:27:03Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Raspberry pi의 Headless 설정&lt;br /&gt;
라즈베리파이에 키보드나 마우스, 모니터 매번 연결하려니 번거롭다. 특히 pi-zero 같은 경우엔 usb포트는 하나밖에 없고 hdmi단자도 많이 쓰이지 않는 mini규격이라 난감하기 그지없다.&lt;br /&gt;
모니터 키보드 마우스 연결않고 (심지어 wifi동글 없어도!) 다른 노트북이나 데스크탑을 사용해 제어할 수 있는데, Headless 설정이라고 한다. (모니터 없다는 의미) &lt;br /&gt;
&lt;br /&gt;
wifi나 usb케이블을 통해 최초 연결 후 vnc(화면공유)를 설치하고(사실 기본 설치되어있지만, 설정에서 켜주어야...) 그 이후엔 vnc를 사용해 사용토록 하자.&lt;br /&gt;
&lt;br /&gt;
**2018년 6월버전의 Rasbian stretch가 Pi0W에서 무선 설정하는데 문제가 발견되어 이전버전인 Raspbian Jessie로 진행하였슴.**&lt;br /&gt;
&lt;br /&gt;
## Raspbian 설치&lt;br /&gt;
NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (NOOBS보다 더 빠르고, 단계가 적다.)&lt;br /&gt;
참고: https://www.raspberrypi.org/documentation/installation/installing-images/README.md&lt;br /&gt;
&lt;br /&gt;
1. Raspbian 이미지 다운로드 &amp;amp; 압축풀기. https://www.raspberrypi.org/downloads/raspbian/ &lt;br /&gt;
압축해제시 문제 발생하는 경우 7zip(윈도)나 the Unarchiver (mac) 사용.&lt;br /&gt;
&lt;br /&gt;
2. Etcher 다운로드 &amp;amp; 설치 ( 이미지 버닝 툴 - 이미지파일을 sd카드로 옮겨줌.)&lt;br /&gt;
&lt;br /&gt;
https://etcher.io/&lt;br /&gt;
&lt;br /&gt;
3. Echer 사용해 다운받은 이미지를 SD카드에 굽기.&lt;br /&gt;
&lt;br /&gt;
완성된 SD카드 뽑았다가 다시 꽂아보면, boot 라는 이름으로 라즈비안 이 설치되어있다. 여기에 몇개 파일을 수정해주어야 한다.&lt;br /&gt;
![||600](https://cl.ly/smt5/Image%202018-07-07%20at%202.59.16%20PM.png))&lt;br /&gt;
&lt;br /&gt;
참고: https://medium.com/@aallan/setting-up-a-headless-raspberry-pi-zero-3ded0b83f274 &lt;br /&gt;
참고: https://www.losant.com/blog/getting-started-with-the-raspberry-pi-zero-w-without-a-monitor&lt;br /&gt;
&lt;br /&gt;
## 네트워크 연결 위한 설정파일 수정&lt;br /&gt;
wifi를 사용하거나, 혹은 wifi동글이 없거나 공유기가 없다면 USB케이블을 사용할해 노트북에 연결할 수 있다.&lt;br /&gt;
&lt;br /&gt;
### SSH 켜기 설정&lt;br /&gt;
SD카드의 루트 디렉토리 `/boot`에 `ssh`라는 이름의 빈 파일을 하나 새로 만든다.(확장자 없음) 그러면 부팅시 SSH가 켜진다.&lt;br /&gt;
&lt;br /&gt;
### case 1. wifi 켜기 설정&lt;br /&gt;
마찬가지로 `/boot`에 `wpa_supplicant.conf`파일을 아래 내용으로 만든다. 일반적인 텍스트 에디터 사용한다.&lt;br /&gt;
```&lt;br /&gt;
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev&lt;br /&gt;
update_config=1&lt;br /&gt;
&lt;br /&gt;
network={&lt;br /&gt;
	ssid=&amp;quot;와이파이 이름(SSID)&amp;quot;&lt;br /&gt;
	psk=&amp;quot;암호&amp;quot;&lt;br /&gt;
	key_mgmt=WPA-PSK&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
#### tip. wifi 설정의 변경&lt;br /&gt;
 &amp;gt;/boot 에 만든 wap_supplicant.conf 파일은 부팅시 자동으로 `/etc/wpa_supplicant/wpa_supplicant.conf`위치로 옮겨진다.&lt;br /&gt;
&amp;gt;이후 wifi 설정을 수정해야 하는 경우가 생긴다면 (집에서 사용하던 라즈베리를 사무실로 옮긴다던지...) 이 위치에서 직접 수정하면 된다.&lt;br /&gt;
&amp;gt;```&lt;br /&gt;
&amp;gt;$ sudo nano /etc/wpa_supplicant/wap_supplicant.conf&lt;br /&gt;
&amp;gt;```&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### case 2. USB OTG 켜기 설정 &lt;br /&gt;
사실 wifi나 usb otg 둘 중 하나만 작동되면 되지만 일단 둘 다 켜두자. 특히 집에서 사용하다가 사무실로 옮겼다던지 하는 상황에서 wifi 연결을 재설정하려면 필요하다.&lt;br /&gt;
`/boot` 디렉토리에 `config.txt`파일을 열어서 편집한다.&lt;br /&gt;
```&lt;br /&gt;
dtoverlay=dwc2&lt;br /&gt;
```&lt;br /&gt;
라는 항목이 있는지 살펴보고 (아마 아래쪽에 있을 것임) 만약 없다면 추가한다.&lt;br /&gt;
&lt;br /&gt;
또한 `cmdline.txt`파일을 열어서 (정확하게) 아래와 같이 `rootwait` 뒤에 한 칸 띄고&lt;br /&gt;
`modules-load=dwc2,g_ether`를 추가한다.&lt;br /&gt;
&lt;br /&gt;
원래 cmdline.txt 내용:&lt;br /&gt;
```&lt;br /&gt;
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=020c3677–02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
수정 후 cmdline.txt 내용:&lt;br /&gt;
```&lt;br /&gt;
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=020c3677–02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## SSH 연결&lt;br /&gt;
### 라즈베리 파이 부팅&lt;br /&gt;
sd카드를 라즈베리에 꽂고 노트북과 pi-zero의 USB포트 (특히 usb-otg 사용하는 경우 PWR가 아님 주의!)를 usb 케이블로 연결해 파이를 부팅시킨다. LED가 깜빡이며 작동됨을 알려준다.&lt;br /&gt;
![||600](https://cdn-images-1.medium.com/max/800/1*3c-LB7bViYj340J63R-nUA.jpeg)&lt;br /&gt;
&lt;br /&gt;
### case 1. wifi로 ssh연결&lt;br /&gt;
무선 라우터의 설정화면에 들어가 라즈베리파이의 ip 주소를 알아낸다.&lt;br /&gt;
![||600](https://cl.ly/snDE/Image%202018-07-07%20at%209.11.29%20AM.png)&lt;br /&gt;
&lt;br /&gt;
이렇게 알아낸 주소로 ssh접속한다. ID: pi, PW: raspberry 가 디폴트이다.&lt;br /&gt;
```&lt;br /&gt;
$ ssh pi@위에서 알아낸 IP주소&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/sm36/Image%202018-07-07%20at%209.08.25%20AM.png)&lt;br /&gt;
&lt;br /&gt;
### case 2. usb-otg로 ssh 연결&lt;br /&gt;
부팅이 끝난 후 노트북의 network항목을 보면 라즈베리파이가 `RNDIS/Ethernet Gadget` 라는 이름으로 잡혀있다.&lt;br /&gt;
![||600](https://cl.ly/skpI/Image%202018-07-06%20at%207.08.56%20PM.png)&lt;br /&gt;
위에 나와있는 169.254.254.230 은 노트북의 주소로, 라즈베리파이의 ip는 다른 방법으로 알아내야 한다.&lt;br /&gt;
&lt;br /&gt;
`dns-sd` 명령어의  `-G v4 &amp;lt;NAME&amp;gt;`  옵션을 사용하면 맨 마지막에 오는 것이 그 컴퓨터(&amp;lt;NAME&amp;gt;의 컴퓨터)가 사용하는 ip 주소이다. (dns-sd 프로그램을 끝낼 때에는 `ctrl+C`)&lt;br /&gt;
```&lt;br /&gt;
$ dns-sd -G v4 raspberrypi.local&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/skI6/Image%202018-07-06%20at%207.28.34%20PM.png)&lt;br /&gt;
&lt;br /&gt;
이렇게 알아낸 주소로 ssh접속한다. ID: pi, PW: raspberry 가 디폴트이다.&lt;br /&gt;
```&lt;br /&gt;
$ ssh pi@위에서 알아낸 IP주소&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/sjtn/Image%202018-07-06%20at%207.35.16%20PM.png)&lt;br /&gt;
&lt;br /&gt;
## VNC로 화면 공유&lt;br /&gt;
### 라이브러리 목록 업데이트 &amp;amp; 업그레이드&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
$ sudo apt-get update&lt;br /&gt;
```&lt;br /&gt;
```&lt;br /&gt;
$ sudo apt-get upgrade&lt;br /&gt;
```&lt;br /&gt;
업그레이드 완료되면 다운로드된 업데이트 파일을 지워 용량 확보&lt;br /&gt;
```&lt;br /&gt;
$ sudo apt-get clean&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### VNC Server 설치&lt;br /&gt;
```&lt;br /&gt;
$ sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&lt;br /&gt;
```&lt;br /&gt;
설치가 끝나면 `raspi-config`를 실행해 vnc 옵션을 켜준다.&lt;br /&gt;
```&lt;br /&gt;
$ sudo raspi-config&lt;br /&gt;
```&lt;br /&gt;
5.Interfacing Option -&amp;gt; P3 VNC -&amp;gt; YES를 선택.&lt;br /&gt;
![||600](https://cl.ly/sm1u/Image%202018-07-08%20at%207.56.01%20AM.png)&lt;br /&gt;
&lt;br /&gt;
재부팅한다.&lt;br /&gt;
```&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
```&lt;br /&gt;
### 노트북에 vnc viewer 설치 및 화면 공유 실행&lt;br /&gt;
[[Raspberry Pi setup 라즈베리파이 설치하기]]문서의 '라즈베리파이 화면공유' 항목 참고&lt;br /&gt;
![||600](https://cl.ly/smGx/Image%202018-07-08%20at%208.01.00%20AM.png)&lt;br /&gt;
&lt;br /&gt;
## 한글 설치&lt;br /&gt;
[[Raspberry Pi setup 라즈베리파이 설치하기]]문서의 '한글설치' 항목 참고&lt;br /&gt;
![||600](https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png)&lt;br /&gt;
잘된다^^&lt;br /&gt;
&lt;br /&gt;
[[category:Raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_pi_zero_%EC%84%A4%EC%A0%95_(_headless_)&amp;diff=237</id>
		<title>Raspberry pi zero 설정 ( headless )</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_pi_zero_%EC%84%A4%EC%A0%95_(_headless_)&amp;diff=237"/>
				<updated>2018-07-08T00:05:34Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Raspberry pi의 Headless 설정&lt;br /&gt;
라즈베리파이에 키보드나 마우스, 모니터 매번 연결하려니 번거롭다. 특히 pi-zero 같은 경우엔 usb포트는 하나밖에 없고 hdmi단자도 많이 쓰이지 않는 mini규격이라 난감하기 그지없다.&lt;br /&gt;
모니터 키보드 마우스 연결않고 (심지어 wifi동글 없어도!) 다른 노트북이나 데스크탑을 사용해 제어할 수 있는데, Headless 설정이라고 한다. (모니터 없다는 의미) &lt;br /&gt;
&lt;br /&gt;
wifi나 usb케이블을 통해 최초 연결 후 vnc(화면공유)를 설치하고(사실 기본 설치되어있지만, 설정에서 켜주어야...) 그 이후엔 vnc를 사용해 사용토록 하자.&lt;br /&gt;
&lt;br /&gt;
**2018년 6월버전의 Rasbian stretch가 Pi0W에서 무선 설정하는데 문제가 발견되어 이전버전인 Raspbian Jessie로 진행하였슴.**&lt;br /&gt;
&lt;br /&gt;
## Raspbian 설치&lt;br /&gt;
NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (NOOBS보다 더 빠르고, 단계가 적다.)&lt;br /&gt;
참고: https://www.raspberrypi.org/documentation/installation/installing-images/README.md&lt;br /&gt;
&lt;br /&gt;
1. Raspbian 이미지 다운로드 &amp;amp; 압축풀기. https://www.raspberrypi.org/downloads/raspbian/ &lt;br /&gt;
압축해제시 문제 발생하는 경우 7zip(윈도)나 the Unarchiver (mac) 사용.&lt;br /&gt;
&lt;br /&gt;
2. Etcher 다운로드 &amp;amp; 설치 ( 이미지 버닝 툴 - 이미지파일을 sd카드로 옮겨줌.)&lt;br /&gt;
&lt;br /&gt;
https://etcher.io/&lt;br /&gt;
&lt;br /&gt;
3. Echer 사용해 다운받은 이미지를 SD카드에 굽기.&lt;br /&gt;
&lt;br /&gt;
완성된 SD카드 뽑았다가 다시 꽂아보면, boot 라는 이름으로 라즈비안 이 설치되어있다. 여기에 몇개 파일을 수정해주어야 한다.&lt;br /&gt;
![||600](https://cl.ly/smt5/Image%202018-07-07%20at%202.59.16%20PM.png))&lt;br /&gt;
&lt;br /&gt;
참고: https://medium.com/@aallan/setting-up-a-headless-raspberry-pi-zero-3ded0b83f274 &lt;br /&gt;
참고: https://www.losant.com/blog/getting-started-with-the-raspberry-pi-zero-w-without-a-monitor&lt;br /&gt;
&lt;br /&gt;
## 네트워크 연결 위한 설정파일 수정&lt;br /&gt;
wifi를 사용하거나, 혹은 wifi동글이 없거나 공유기가 없다면 USB케이블을 사용할해 노트북에 연결할 수 있다.&lt;br /&gt;
&lt;br /&gt;
### SSH 켜기 설정&lt;br /&gt;
SD카드의 루트 디렉토리 `/boot`에 `ssh`라는 이름의 빈 파일을 하나 새로 만든다.(확장자 없음) 그러면 부팅시 SSH가 켜진다.&lt;br /&gt;
&lt;br /&gt;
### case 1. wifi 켜기 설정&lt;br /&gt;
마찬가지로 `/boot`에 `wpa_supplicant.conf`파일을 아래 내용으로 만든다. 일반적인 텍스트 에디터 사용한다.&lt;br /&gt;
```&lt;br /&gt;
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev&lt;br /&gt;
update_config=1&lt;br /&gt;
&lt;br /&gt;
network={&lt;br /&gt;
	ssid=&amp;quot;와이파이 이름(SSID)&amp;quot;&lt;br /&gt;
	psk=&amp;quot;암호&amp;quot;&lt;br /&gt;
	key_mgmt=WPA-PSK&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
#### tip. wifi 설정의 변경&lt;br /&gt;
 &amp;gt;/boot 에 만든 wap_supplicant.conf 파일은 부팅시 자동으로 `/etc/wpa_supplicant/wpa_supplicant.conf`위치로 옮겨진다.&lt;br /&gt;
&amp;gt;이후 wifi 설정을 수정해야 하는 경우가 생긴다면 (집에서 사용하던 라즈베리를 사무실로 옮긴다던지...) 이 위치에서 직접 수정하면 된다.&lt;br /&gt;
&amp;gt;```&lt;br /&gt;
&amp;gt;$ sudo nano /etc/wpa_supplicant/wap_supplicant.conf&lt;br /&gt;
&amp;gt;```&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### case 2. USB OTG 켜기 설정 &lt;br /&gt;
사실 wifi나 usb otg 둘 중 하나만 작동되면 되지만 일단 둘 다 켜두자. 특히 집에서 사용하다가 사무실로 옮겼다던지 하는 상황에서 wifi 연결을 재설정하려면 필요하다.&lt;br /&gt;
`/boot` 디렉토리에 `config.txt`파일을 열어서 편집한다.&lt;br /&gt;
```&lt;br /&gt;
dtoverlay=dwc2&lt;br /&gt;
```&lt;br /&gt;
라는 항목이 있는지 살펴보고 (아마 아래쪽에 있을 것임) 만약 없다면 추가한다.&lt;br /&gt;
&lt;br /&gt;
또한 `cmdline.txt`파일을 열어서 (정확하게) 아래와 같이 `rootwait` 뒤에 한 칸 띄고&lt;br /&gt;
`modules-load=dwc2,g_ether`를 추가한다.&lt;br /&gt;
&lt;br /&gt;
원래 cmdline.txt 내용:&lt;br /&gt;
```&lt;br /&gt;
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=020c3677–02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
수정 후 cmdline.txt 내용:&lt;br /&gt;
```&lt;br /&gt;
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=020c3677–02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## SSH 연결&lt;br /&gt;
### 라즈베리 파이 부팅&lt;br /&gt;
sd카드를 라즈베리에 꽂고 노트북과 pi-zero의 USB포트 (특히 usb-otg 사용하는 경우 PWR가 아님 주의!)를 usb 케이블로 연결해 파이를 부팅시킨다. LED가 깜빡이며 작동됨을 알려준다.&lt;br /&gt;
![||600](https://cdn-images-1.medium.com/max/800/1*3c-LB7bViYj340J63R-nUA.jpeg)&lt;br /&gt;
&lt;br /&gt;
### case 1. wifi로 ssh연결&lt;br /&gt;
무선 라우터의 설정화면에 들어가 라즈베리파이의 ip 주소를 알아낸다.&lt;br /&gt;
![||600](https://cl.ly/snDE/Image%202018-07-07%20at%209.11.29%20AM.png)&lt;br /&gt;
&lt;br /&gt;
이렇게 알아낸 주소로 ssh접속한다. ID: pi, PW: raspberry 가 디폴트이다.&lt;br /&gt;
```&lt;br /&gt;
$ ssh pi@위에서 알아낸 IP주소&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/sm36/Image%202018-07-07%20at%209.08.25%20AM.png)&lt;br /&gt;
&lt;br /&gt;
### case 2. usb-otg로 ssh 연결&lt;br /&gt;
부팅이 끝난 후 노트북의 network항목을 보면 라즈베리파이가 `RNDIS/Ethernet Gadget` 라는 이름으로 잡혀있다.&lt;br /&gt;
![||600](https://cl.ly/skpI/Image%202018-07-06%20at%207.08.56%20PM.png)&lt;br /&gt;
위에 나와있는 169.254.254.230 은 노트북의 주소로, 라즈베리파이의 ip는 다른 방법으로 알아내야 한다.&lt;br /&gt;
&lt;br /&gt;
`dns-sd` 명령어의  `-G v4 &amp;lt;NAME&amp;gt;`  옵션을 사용하면 맨 마지막에 오는 것이 그 컴퓨터(&amp;lt;NAME&amp;gt;의 컴퓨터)가 사용하는 ip 주소이다. (dns-sd 프로그램을 끝낼 때에는 `ctrl+C`)&lt;br /&gt;
```&lt;br /&gt;
$ dns-sd -G v4 raspberrypi.local&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/skI6/Image%202018-07-06%20at%207.28.34%20PM.png)&lt;br /&gt;
&lt;br /&gt;
이렇게 알아낸 주소로 ssh접속한다. ID: pi, PW: raspberry 가 디폴트이다.&lt;br /&gt;
```&lt;br /&gt;
$ ssh pi@위에서 알아낸 IP주소&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/sjtn/Image%202018-07-06%20at%207.35.16%20PM.png)&lt;br /&gt;
&lt;br /&gt;
## VNC로 화면 공유&lt;br /&gt;
### 라이브러리 목록 업데이트 &amp;amp; 업그레이드&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
$ sudo apt-get update&lt;br /&gt;
```&lt;br /&gt;
```&lt;br /&gt;
$ sudo apt-get upgrade&lt;br /&gt;
```&lt;br /&gt;
업그레이드 완료되면 다운로드된 업데이트 파일을 지워 용량 확보&lt;br /&gt;
```&lt;br /&gt;
$ sudo apt-get clean&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### VNC Server 설치&lt;br /&gt;
```&lt;br /&gt;
$ sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&lt;br /&gt;
```&lt;br /&gt;
설치가 끝나면 `raspi-config`를 실행해 vnc 옵션을 켜준다.&lt;br /&gt;
```&lt;br /&gt;
$ sudo raspi-config&lt;br /&gt;
```&lt;br /&gt;
5.Interfacing Option -&amp;gt; P3 VNC -&amp;gt; YES를 선택.&lt;br /&gt;
![||600](https://cl.ly/sm1u/Image%202018-07-08%20at%207.56.01%20AM.png)&lt;br /&gt;
&lt;br /&gt;
재부팅한다.&lt;br /&gt;
```&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
```&lt;br /&gt;
### 노트북에 vnc viewer 설치 및 화면 공유 실행&lt;br /&gt;
[[Raspberry Pi setup 라즈베리파이 설치하기]]문서의 '라즈베리파이 화면공유' 항목 참고&lt;br /&gt;
![||600](https://cl.ly/smGx/Image%202018-07-08%20at%208.01.00%20AM.png)&lt;br /&gt;
&lt;br /&gt;
## 한글 설치&lt;br /&gt;
[[Raspberry Pi setup 라즈베리파이 설치하기]]문서의 '한글설치' 항목 참고&lt;br /&gt;
![||600](https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png)&lt;br /&gt;
잘된다^^&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=236</id>
		<title>Raspberry Pi setup 라즈베리파이 설치하기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=236"/>
				<updated>2018-07-07T23:38:47Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WIKI}}&lt;br /&gt;
= Raspberry Pi setup (Raspbian version9, stretch기준) =&lt;br /&gt;
&lt;br /&gt;
== 준비물 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyVs/Image%202018-03-06%20at%204.34.03%20AM.png&amp;quot; width=600 &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspbian 설치 ==&lt;br /&gt;
 '''라즈베리파이에 키보드나 마우스, 모니터 매번 연결하려니 번거롭다. 특히 pi-zero 같은 경우엔 usb포트는 하나밖에 없고 hdmi단자도 많이 쓰이지 않는 mini규격이라 난감하기 그지없다. 모니터 키보드 마우스 연결않고 (심지어 wifi동글 없어도!) 다른 노트북이나 데스크탑을 사용해 제어할 수 있는데, Headless 설정이라고 한다. (모니터 없다는 의미) [[Raspberry pi의 Headless 설정]] 문서를 참고하자'''&lt;br /&gt;
&lt;br /&gt;
=== Noobs 사용(더 쉽다) ===&lt;br /&gt;
* 설치방법 참고: https://www.raspberrypi.org/learning/software-guide/quickstart/&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ‘NOOBS’ 다운로드 https://www.raspberrypi.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src = &amp;quot;https://cl.ly/pwrJ/Image%202018-03-06%20at%204.39.37%20AM.png&amp;quot; width = 600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사할 수도 있다. 더 빠르고, 단계가 적다.''&lt;br /&gt;
# ‘SD formatter’ 다운로드 &amp;amp;amp; 설치 https://www.sdcard.org/downloads/formatter_4/index.html&lt;br /&gt;
# SD카드를 노트북에 삽입하고 SD formatter 실행. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwqB/Image%202018-03-06%20at%204.42.19%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''다른 방법을 통해 SD카드에 raspbian 설치해도 좋지만 FAT32로 포맷되어야함을 잊지말것. FATex는 안됨.''&lt;br /&gt;
# NOOPS zip파일을 풀어 SD카드에 모두 복사&lt;br /&gt;
# RPI에 usb(파워), HDMI( 모니터), 키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
# os 선택하도록 하는데, Raspbian 을 선택. 아래에서 언어는 한글로, 키보드레이아웃은 kr로… ’설치’를 눌러 설치 진행.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxxt/Image%202018-03-06%20at%204.49.56%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
# 기다리면 설치 완료&lt;br /&gt;
&lt;br /&gt;
===  NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (더 빠르고, 단계가 적다.) ===&lt;br /&gt;
참고: https://www.raspberrypi.org/documentation/installation/installing-images/README.md &lt;br /&gt;
&lt;br /&gt;
1. Raspbian 이미지 다운로드 &amp;amp; 압축풀기.&lt;br /&gt;
https://www.raspberrypi.org/downloads/raspbian/ &lt;br /&gt;
압축해제시 문제 발생하는 경우 7zip(윈도)나 the Unarchiver (mac) 사용.&lt;br /&gt;
&lt;br /&gt;
2. Etcher 다운로드 &amp;amp; 설치 ( 이미지 버닝 툴 - 이미지파일을 sd카드로 옮겨줌.)&lt;br /&gt;
&lt;br /&gt;
https://etcher.io/&lt;br /&gt;
&lt;br /&gt;
3. Echer 사용해 다운받은 이미지를 SD카드에 굽기.&lt;br /&gt;
&lt;br /&gt;
4. RPI에 usb(파워),  HDMI( 모니터),  키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
&lt;br /&gt;
== wifi 연결 ==&lt;br /&gt;
&lt;br /&gt;
# usb wifi 동글을 꽂는다.&lt;br /&gt;
# xwindow 우상단에 네트워크 아이콘을 클릭해 AP를 선택하고 비번을 입력하면 끝. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwv0/Image%202018-03-06%20at%204.50.27%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 소프트웨어 업데이트 ==&lt;br /&gt;
&lt;br /&gt;
# 터미널을 열고 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwlh/Image%202018-03-06%20at%204.52.39%20AM.png&amp;quot; width=300&amp;gt;&lt;br /&gt;
# 다음을 입력해 업데이트 필요한 소프트웨어 목록을 로드한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyP6/Image%202018-03-06%20at%204.56.43%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;upgrade 명령으로 업데이트를 설치한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get upgrade&amp;lt;/source&amp;gt;&lt;br /&gt;
업그레이드 할건지 확인하면 [y] [Enter]. 4. 한참 기다린 후 업그레이드가 완료되면 다운로드한 업데이트 파일을 지워서 용량을 확보한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get clean&amp;lt;/source&amp;gt;&lt;br /&gt;
== 한글설치 ==&lt;br /&gt;
&lt;br /&gt;
참고: http://cccding.tistory.com/96 1. 한글폰트 설치&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get install ttf-unfonts-core&amp;lt;/source&amp;gt;&lt;br /&gt;
'''ttf-unfonts-core 가 font-unfonts-core로 대체되었다는 메시지가 나온다. &amp;lt;code&amp;gt;sudo apt-get install fonts-unfonts-core&amp;lt;/code&amp;gt;로 다시 실행한다.''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxzH/Image%202018-03-06%20at%204.57.23%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ibus한글 입력기 설치&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; sudo apt-get install ibus-hangul&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raspberry Pi configuration의 Localisation 설정. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxFi/Image%202018-03-06%20at%204.58.18%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pycS/Image%202018-03-06%20at%204.58.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxkS/Image%202018-03-06%20at%204.58.40%20AM.png&amp;quot; width=600&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Timezone은 Asia &amp;amp;gt; Seoul로 …&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK를 누르면 재부팅~!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;재부팅 후 우상단에 EN아이콘을 눌러 한글 입력기를 선택. 다시 한번 눌러 한글상태에 체크 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyTR/Image%202018-03-06%20at%204.59.14%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;메뉴도 한글로 되어있고 한글 입력도 잘 된다. 한&amp;amp;lt;-&amp;amp;gt;영 변환키는 [shift]+[space] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxVm/Image%202018-03-06%20at%205.02.15%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 라즈베리파이 화면공유 ==&lt;br /&gt;
&lt;br /&gt;
안그래도 좁은 책상위에 라즈베리파이용 키보드와 마우스까지 올라와있으니 안되겠다. 게다가 순간순간 어느 키보드를 눌러야 하는지 헷갈린다. 또 노트북에 물려 듀얼로 사용하던 모니터를 라즈베리파이에 연결하고나니 노트북 작업능률이 떨어진다. 이럴 때. VNC를 통해 라즈베리파이 화면을 노트북에 공유하고 노트북의 키보드와 마우스로 라즈베리파이를 제어한다. 참고: https://www.raspberrypi.org/documentation/remote-access/vnc/&lt;br /&gt;
&lt;br /&gt;
# 최근의 라즈비안에는 realVNC가 기본탑재되어있다. 새로인 install 할 필요는 없다. 구지 해야한다면&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;menu &amp;amp;gt; 기본설정(preferences) &amp;amp;gt; Raspberry Pi Configuration &amp;amp;gt; Interfaces 에 들어가서 VNC 항목을 Enabled에 체크 후 OK한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
내부 네트워크를 사용해 연결할 수 도, 인터넷을 통해 연결할 수도 있는데, 우리는 내부망을 사용하도록 하자. (아마 성능, 보안상 낫지 않을까?) 3. 작업표시줄 우측의 VNC아이콘을 누르면 RPI 의 IP address를 알 수 있다. &lt;br /&gt;
&lt;br /&gt;
https://www.realvnc.com/en/connect/_images/raspberry-pi-direct-address.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;노트북에 VNC viewer를 설치한다. 여기에서 받을 수 있다. https://www.realvnc.com/en/connect/download/viewer/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;주소창에 위에서 얻은 라즈베리파이의 IP주소를 넣는다. 처음 연결할 때 뭐라고 경고가 뜬다. 연결해도 되겠냐고 확인하는 거다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyRD/Image%202018-03-06%20at%205.03.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;기본 로그인 아이디는 ‘pi’, 패스워드는 ’raspberry’이다.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;키보드와 마우스, 모니터를 다 뽑고 재부팅한다. 노트북에서 잘 컨트롤 됨을 확인한다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxbP/Image%202018-03-06%20at%205.04.06%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;해상도를 적절히 (작게)하면 속도가 만족스럽다. 1024x768정도면 괜찮은듯. (위에서 한 번 나온 configuration메뉴에서 설정할 수 있다.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;마지막으로, ip address는 보통 고정되어있지 않고 부팅할 때마다 바뀌기 때문에, 어느날 갑자기 VNC연결이 안 될 수도 있다. 공유기 설정에서 라즈베리파이(에 연결된 ipTIME usb 동글)에 항상 정해진 ip 주소를 할당토록 설정한다. 방법은 공유기마다 다르겠지만… &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwvV/Image%202018-03-06%20at%205.04.36%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;노트북과 라즈베리파이 사이에 파일교환이 필요한 경우 VNC viewer의 화살표 아이콘을 누르거나, 라즈베리파이의 작업표시줄상 VNC아이콘을 누르면 된다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/2h333e1Z3R3X/Image%202017-10-24%20at%208.11.24%20%EC%98%A4%ED%9B%84.png&amp;quot; width=600&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspberry leaf (GPIO 라벨)설치 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;http://2.bp.blogspot.com/-AC6Gq5TaABU/USIcnBrnZaI/AAAAAAAAEfQ/bkCrzm4BZMc/s320/leaf+-+web.jpg&lt;br /&gt;
&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
참고: http://www.doctormonk.com/2013/02/raspberry-pi-and-breadboard-raspberry.html * GPIO에 라벨을 프린트해 붙여놓으면 편하겠다. * 26핀( model A, modelB 1)용 https://github.com/simonmonk/wiki_images/raw/master/raspberry%20leaf%20r2.pdf * 40핀(modelB2,3, model zero)용 https://github.com/splitbrain/rpibplusleaf&lt;br /&gt;
&lt;br /&gt;
[[category:raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=235</id>
		<title>Raspberry Pi setup 라즈베리파이 설치하기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=235"/>
				<updated>2018-07-07T23:34:46Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: /* Raspbian 설치 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WIKI}}&lt;br /&gt;
= Raspberry Pi setup (Raspbian version9, stretch기준) =&lt;br /&gt;
&lt;br /&gt;
== 준비물 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyVs/Image%202018-03-06%20at%204.34.03%20AM.png&amp;quot; width=600 &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspbian 설치 ==&lt;br /&gt;
***라즈베리파이에 키보드나 마우스, 모니터 매번 연결하려니 번거롭다. 특히 pi-zero 같은 경우엔 usb포트는 하나밖에 없고 hdmi단자도 많이 쓰이지 않는 mini규격이라 난감하기 그지없다. 모니터 키보드 마우스 연결않고 (심지어 wifi동글 없어도!) 다른 노트북이나 데스크탑을 사용해 제어할 수 있는데, Headless 설정이라고 한다. (모니터 없다는 의미) [[Raspberry pi의 Headless 설정]] 문서를 참고하자***&lt;br /&gt;
&lt;br /&gt;
=== Noobs 사용(더 쉽다) ===&lt;br /&gt;
* 설치방법 참고: https://www.raspberrypi.org/learning/software-guide/quickstart/&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ‘NOOBS’ 다운로드 https://www.raspberrypi.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src = &amp;quot;https://cl.ly/pwrJ/Image%202018-03-06%20at%204.39.37%20AM.png&amp;quot; width = 600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사할 수도 있다. 더 빠르고, 단계가 적다.''&lt;br /&gt;
# ‘SD formatter’ 다운로드 &amp;amp;amp; 설치 https://www.sdcard.org/downloads/formatter_4/index.html&lt;br /&gt;
# SD카드를 노트북에 삽입하고 SD formatter 실행. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwqB/Image%202018-03-06%20at%204.42.19%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''다른 방법을 통해 SD카드에 raspbian 설치해도 좋지만 FAT32로 포맷되어야함을 잊지말것. FATex는 안됨.''&lt;br /&gt;
# NOOPS zip파일을 풀어 SD카드에 모두 복사&lt;br /&gt;
# RPI에 usb(파워), HDMI( 모니터), 키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
# os 선택하도록 하는데, Raspbian 을 선택. 아래에서 언어는 한글로, 키보드레이아웃은 kr로… ’설치’를 눌러 설치 진행.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxxt/Image%202018-03-06%20at%204.49.56%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
# 기다리면 설치 완료&lt;br /&gt;
&lt;br /&gt;
===  NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (더 빠르고, 단계가 적다.) ===&lt;br /&gt;
참고: https://www.raspberrypi.org/documentation/installation/installing-images/README.md &lt;br /&gt;
&lt;br /&gt;
1. Raspbian 이미지 다운로드 &amp;amp; 압축풀기.&lt;br /&gt;
https://www.raspberrypi.org/downloads/raspbian/ &lt;br /&gt;
압축해제시 문제 발생하는 경우 7zip(윈도)나 the Unarchiver (mac) 사용.&lt;br /&gt;
&lt;br /&gt;
2. Etcher 다운로드 &amp;amp; 설치 ( 이미지 버닝 툴 - 이미지파일을 sd카드로 옮겨줌.)&lt;br /&gt;
&lt;br /&gt;
https://etcher.io/&lt;br /&gt;
&lt;br /&gt;
3. Echer 사용해 다운받은 이미지를 SD카드에 굽기.&lt;br /&gt;
&lt;br /&gt;
4. RPI에 usb(파워),  HDMI( 모니터),  키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
&lt;br /&gt;
== wifi 연결 ==&lt;br /&gt;
&lt;br /&gt;
# usb wifi 동글을 꽂는다.&lt;br /&gt;
# xwindow 우상단에 네트워크 아이콘을 클릭해 AP를 선택하고 비번을 입력하면 끝. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwv0/Image%202018-03-06%20at%204.50.27%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 소프트웨어 업데이트 ==&lt;br /&gt;
&lt;br /&gt;
# 터미널을 열고 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwlh/Image%202018-03-06%20at%204.52.39%20AM.png&amp;quot; width=300&amp;gt;&lt;br /&gt;
# 다음을 입력해 업데이트 필요한 소프트웨어 목록을 로드한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyP6/Image%202018-03-06%20at%204.56.43%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;upgrade 명령으로 업데이트를 설치한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get upgrade&amp;lt;/source&amp;gt;&lt;br /&gt;
업그레이드 할건지 확인하면 [y] [Enter]. 4. 한참 기다린 후 업그레이드가 완료되면 다운로드한 업데이트 파일을 지워서 용량을 확보한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get clean&amp;lt;/source&amp;gt;&lt;br /&gt;
== 한글설치 ==&lt;br /&gt;
&lt;br /&gt;
참고: http://cccding.tistory.com/96 1. 한글폰트 설치&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get install ttf-unfonts-core&amp;lt;/source&amp;gt;&lt;br /&gt;
'''ttf-unfonts-core 가 font-unfonts-core로 대체되었다는 메시지가 나온다. &amp;lt;code&amp;gt;sudo apt-get install fonts-unfonts-core&amp;lt;/code&amp;gt;로 다시 실행한다.''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxzH/Image%202018-03-06%20at%204.57.23%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ibus한글 입력기 설치&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; sudo apt-get install ibus-hangul&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raspberry Pi configuration의 Localisation 설정. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxFi/Image%202018-03-06%20at%204.58.18%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pycS/Image%202018-03-06%20at%204.58.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxkS/Image%202018-03-06%20at%204.58.40%20AM.png&amp;quot; width=600&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Timezone은 Asia &amp;amp;gt; Seoul로 …&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK를 누르면 재부팅~!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;재부팅 후 우상단에 EN아이콘을 눌러 한글 입력기를 선택. 다시 한번 눌러 한글상태에 체크 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyTR/Image%202018-03-06%20at%204.59.14%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;메뉴도 한글로 되어있고 한글 입력도 잘 된다. 한&amp;amp;lt;-&amp;amp;gt;영 변환키는 [shift]+[space] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxVm/Image%202018-03-06%20at%205.02.15%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 라즈베리파이 화면공유 ==&lt;br /&gt;
&lt;br /&gt;
안그래도 좁은 책상위에 라즈베리파이용 키보드와 마우스까지 올라와있으니 안되겠다. 게다가 순간순간 어느 키보드를 눌러야 하는지 헷갈린다. 또 노트북에 물려 듀얼로 사용하던 모니터를 라즈베리파이에 연결하고나니 노트북 작업능률이 떨어진다. 이럴 때. VNC를 통해 라즈베리파이 화면을 노트북에 공유하고 노트북의 키보드와 마우스로 라즈베리파이를 제어한다. 참고: https://www.raspberrypi.org/documentation/remote-access/vnc/&lt;br /&gt;
&lt;br /&gt;
# 최근의 라즈비안에는 realVNC가 기본탑재되어있다. 새로인 install 할 필요는 없다. 구지 해야한다면&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;menu &amp;amp;gt; 기본설정(preferences) &amp;amp;gt; Raspberry Pi Configuration &amp;amp;gt; Interfaces 에 들어가서 VNC 항목을 Enabled에 체크 후 OK한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
내부 네트워크를 사용해 연결할 수 도, 인터넷을 통해 연결할 수도 있는데, 우리는 내부망을 사용하도록 하자. (아마 성능, 보안상 낫지 않을까?) 3. 작업표시줄 우측의 VNC아이콘을 누르면 RPI 의 IP address를 알 수 있다. &lt;br /&gt;
&lt;br /&gt;
https://www.realvnc.com/en/connect/_images/raspberry-pi-direct-address.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;노트북에 VNC viewer를 설치한다. 여기에서 받을 수 있다. https://www.realvnc.com/en/connect/download/viewer/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;주소창에 위에서 얻은 라즈베리파이의 IP주소를 넣는다. 처음 연결할 때 뭐라고 경고가 뜬다. 연결해도 되겠냐고 확인하는 거다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyRD/Image%202018-03-06%20at%205.03.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;기본 로그인 아이디는 ‘pi’, 패스워드는 ’raspberry’이다.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;키보드와 마우스, 모니터를 다 뽑고 재부팅한다. 노트북에서 잘 컨트롤 됨을 확인한다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxbP/Image%202018-03-06%20at%205.04.06%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;해상도를 적절히 (작게)하면 속도가 만족스럽다. 1024x768정도면 괜찮은듯. (위에서 한 번 나온 configuration메뉴에서 설정할 수 있다.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;마지막으로, ip address는 보통 고정되어있지 않고 부팅할 때마다 바뀌기 때문에, 어느날 갑자기 VNC연결이 안 될 수도 있다. 공유기 설정에서 라즈베리파이(에 연결된 ipTIME usb 동글)에 항상 정해진 ip 주소를 할당토록 설정한다. 방법은 공유기마다 다르겠지만… &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwvV/Image%202018-03-06%20at%205.04.36%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;노트북과 라즈베리파이 사이에 파일교환이 필요한 경우 VNC viewer의 화살표 아이콘을 누르거나, 라즈베리파이의 작업표시줄상 VNC아이콘을 누르면 된다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/2h333e1Z3R3X/Image%202017-10-24%20at%208.11.24%20%EC%98%A4%ED%9B%84.png&amp;quot; width=600&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspberry leaf (GPIO 라벨)설치 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;http://2.bp.blogspot.com/-AC6Gq5TaABU/USIcnBrnZaI/AAAAAAAAEfQ/bkCrzm4BZMc/s320/leaf+-+web.jpg&lt;br /&gt;
&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
참고: http://www.doctormonk.com/2013/02/raspberry-pi-and-breadboard-raspberry.html * GPIO에 라벨을 프린트해 붙여놓으면 편하겠다. * 26핀( model A, modelB 1)용 https://github.com/simonmonk/wiki_images/raw/master/raspberry%20leaf%20r2.pdf * 40핀(modelB2,3, model zero)용 https://github.com/splitbrain/rpibplusleaf&lt;br /&gt;
&lt;br /&gt;
[[category:raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=234</id>
		<title>Raspberry Pi setup 라즈베리파이 설치하기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_Pi_setup_%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&amp;diff=234"/>
				<updated>2018-07-07T23:34:00Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WIKI}}&lt;br /&gt;
= Raspberry Pi setup (Raspbian version9, stretch기준) =&lt;br /&gt;
&lt;br /&gt;
== 준비물 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyVs/Image%202018-03-06%20at%204.34.03%20AM.png&amp;quot; width=600 &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspbian 설치 ==&lt;br /&gt;
*라즈베리파이에 키보드나 마우스, 모니터 매번 연결하려니 번거롭다. 특히 pi-zero 같은 경우엔 usb포트는 하나밖에 없고 hdmi단자도 많이 쓰이지 않는 mini규격이라 난감하기 그지없다. 모니터 키보드 마우스 연결않고 (심지어 wifi동글 없어도!) 다른 노트북이나 데스크탑을 사용해 제어할 수 있는데, Headless 설정이라고 한다. (모니터 없다는 의미) [[Raspberry pi의 Headless 설정]] 문서를 참고하자*&lt;br /&gt;
&lt;br /&gt;
=== Noobs 사용(더 쉽다) ===&lt;br /&gt;
* 설치방법 참고: https://www.raspberrypi.org/learning/software-guide/quickstart/&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ‘NOOBS’ 다운로드 https://www.raspberrypi.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src = &amp;quot;https://cl.ly/pwrJ/Image%202018-03-06%20at%204.39.37%20AM.png&amp;quot; width = 600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사할 수도 있다. 더 빠르고, 단계가 적다.''&lt;br /&gt;
# ‘SD formatter’ 다운로드 &amp;amp;amp; 설치 https://www.sdcard.org/downloads/formatter_4/index.html&lt;br /&gt;
# SD카드를 노트북에 삽입하고 SD formatter 실행. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwqB/Image%202018-03-06%20at%204.42.19%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ''다른 방법을 통해 SD카드에 raspbian 설치해도 좋지만 FAT32로 포맷되어야함을 잊지말것. FATex는 안됨.''&lt;br /&gt;
# NOOPS zip파일을 풀어 SD카드에 모두 복사&lt;br /&gt;
# RPI에 usb(파워), HDMI( 모니터), 키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
# os 선택하도록 하는데, Raspbian 을 선택. 아래에서 언어는 한글로, 키보드레이아웃은 kr로… ’설치’를 눌러 설치 진행.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxxt/Image%202018-03-06%20at%204.49.56%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
# 기다리면 설치 완료&lt;br /&gt;
&lt;br /&gt;
===  NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (더 빠르고, 단계가 적다.) ===&lt;br /&gt;
참고: https://www.raspberrypi.org/documentation/installation/installing-images/README.md &lt;br /&gt;
&lt;br /&gt;
1. Raspbian 이미지 다운로드 &amp;amp; 압축풀기.&lt;br /&gt;
https://www.raspberrypi.org/downloads/raspbian/ &lt;br /&gt;
압축해제시 문제 발생하는 경우 7zip(윈도)나 the Unarchiver (mac) 사용.&lt;br /&gt;
&lt;br /&gt;
2. Etcher 다운로드 &amp;amp; 설치 ( 이미지 버닝 툴 - 이미지파일을 sd카드로 옮겨줌.)&lt;br /&gt;
&lt;br /&gt;
https://etcher.io/&lt;br /&gt;
&lt;br /&gt;
3. Echer 사용해 다운받은 이미지를 SD카드에 굽기.&lt;br /&gt;
&lt;br /&gt;
4. RPI에 usb(파워),  HDMI( 모니터),  키보드, 마우스, 그리고 SD카드를 끼우고 실행!&lt;br /&gt;
&lt;br /&gt;
== wifi 연결 ==&lt;br /&gt;
&lt;br /&gt;
# usb wifi 동글을 꽂는다.&lt;br /&gt;
# xwindow 우상단에 네트워크 아이콘을 클릭해 AP를 선택하고 비번을 입력하면 끝. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwv0/Image%202018-03-06%20at%204.50.27%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 소프트웨어 업데이트 ==&lt;br /&gt;
&lt;br /&gt;
# 터미널을 열고 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwlh/Image%202018-03-06%20at%204.52.39%20AM.png&amp;quot; width=300&amp;gt;&lt;br /&gt;
# 다음을 입력해 업데이트 필요한 소프트웨어 목록을 로드한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyP6/Image%202018-03-06%20at%204.56.43%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;upgrade 명령으로 업데이트를 설치한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get upgrade&amp;lt;/source&amp;gt;&lt;br /&gt;
업그레이드 할건지 확인하면 [y] [Enter]. 4. 한참 기다린 후 업그레이드가 완료되면 다운로드한 업데이트 파일을 지워서 용량을 확보한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get clean&amp;lt;/source&amp;gt;&lt;br /&gt;
== 한글설치 ==&lt;br /&gt;
&lt;br /&gt;
참고: http://cccding.tistory.com/96 1. 한글폰트 설치&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get install ttf-unfonts-core&amp;lt;/source&amp;gt;&lt;br /&gt;
'''ttf-unfonts-core 가 font-unfonts-core로 대체되었다는 메시지가 나온다. &amp;lt;code&amp;gt;sudo apt-get install fonts-unfonts-core&amp;lt;/code&amp;gt;로 다시 실행한다.''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxzH/Image%202018-03-06%20at%204.57.23%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ibus한글 입력기 설치&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; sudo apt-get install ibus-hangul&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raspberry Pi configuration의 Localisation 설정. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxFi/Image%202018-03-06%20at%204.58.18%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pycS/Image%202018-03-06%20at%204.58.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxkS/Image%202018-03-06%20at%204.58.40%20AM.png&amp;quot; width=600&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Timezone은 Asia &amp;amp;gt; Seoul로 …&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK를 누르면 재부팅~!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;재부팅 후 우상단에 EN아이콘을 눌러 한글 입력기를 선택. 다시 한번 눌러 한글상태에 체크 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyTR/Image%202018-03-06%20at%204.59.14%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;메뉴도 한글로 되어있고 한글 입력도 잘 된다. 한&amp;amp;lt;-&amp;amp;gt;영 변환키는 [shift]+[space] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxVm/Image%202018-03-06%20at%205.02.15%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 라즈베리파이 화면공유 ==&lt;br /&gt;
&lt;br /&gt;
안그래도 좁은 책상위에 라즈베리파이용 키보드와 마우스까지 올라와있으니 안되겠다. 게다가 순간순간 어느 키보드를 눌러야 하는지 헷갈린다. 또 노트북에 물려 듀얼로 사용하던 모니터를 라즈베리파이에 연결하고나니 노트북 작업능률이 떨어진다. 이럴 때. VNC를 통해 라즈베리파이 화면을 노트북에 공유하고 노트북의 키보드와 마우스로 라즈베리파이를 제어한다. 참고: https://www.raspberrypi.org/documentation/remote-access/vnc/&lt;br /&gt;
&lt;br /&gt;
# 최근의 라즈비안에는 realVNC가 기본탑재되어있다. 새로인 install 할 필요는 없다. 구지 해야한다면&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;menu &amp;amp;gt; 기본설정(preferences) &amp;amp;gt; Raspberry Pi Configuration &amp;amp;gt; Interfaces 에 들어가서 VNC 항목을 Enabled에 체크 후 OK한다.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
내부 네트워크를 사용해 연결할 수 도, 인터넷을 통해 연결할 수도 있는데, 우리는 내부망을 사용하도록 하자. (아마 성능, 보안상 낫지 않을까?) 3. 작업표시줄 우측의 VNC아이콘을 누르면 RPI 의 IP address를 알 수 있다. &lt;br /&gt;
&lt;br /&gt;
https://www.realvnc.com/en/connect/_images/raspberry-pi-direct-address.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;노트북에 VNC viewer를 설치한다. 여기에서 받을 수 있다. https://www.realvnc.com/en/connect/download/viewer/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;주소창에 위에서 얻은 라즈베리파이의 IP주소를 넣는다. 처음 연결할 때 뭐라고 경고가 뜬다. 연결해도 되겠냐고 확인하는 거다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pyRD/Image%202018-03-06%20at%205.03.29%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;기본 로그인 아이디는 ‘pi’, 패스워드는 ’raspberry’이다.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;키보드와 마우스, 모니터를 다 뽑고 재부팅한다. 노트북에서 잘 컨트롤 됨을 확인한다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pxbP/Image%202018-03-06%20at%205.04.06%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;해상도를 적절히 (작게)하면 속도가 만족스럽다. 1024x768정도면 괜찮은듯. (위에서 한 번 나온 configuration메뉴에서 설정할 수 있다.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;마지막으로, ip address는 보통 고정되어있지 않고 부팅할 때마다 바뀌기 때문에, 어느날 갑자기 VNC연결이 안 될 수도 있다. 공유기 설정에서 라즈베리파이(에 연결된 ipTIME usb 동글)에 항상 정해진 ip 주소를 할당토록 설정한다. 방법은 공유기마다 다르겠지만… &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/pwvV/Image%202018-03-06%20at%205.04.36%20AM.png&amp;quot; width=600&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;노트북과 라즈베리파이 사이에 파일교환이 필요한 경우 VNC viewer의 화살표 아이콘을 누르거나, 라즈베리파이의 작업표시줄상 VNC아이콘을 누르면 된다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://cl.ly/2h333e1Z3R3X/Image%202017-10-24%20at%208.11.24%20%EC%98%A4%ED%9B%84.png&amp;quot; width=600&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raspberry leaf (GPIO 라벨)설치 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;http://2.bp.blogspot.com/-AC6Gq5TaABU/USIcnBrnZaI/AAAAAAAAEfQ/bkCrzm4BZMc/s320/leaf+-+web.jpg&lt;br /&gt;
&amp;quot; width=600&amp;gt;&lt;br /&gt;
&lt;br /&gt;
참고: http://www.doctormonk.com/2013/02/raspberry-pi-and-breadboard-raspberry.html * GPIO에 라벨을 프린트해 붙여놓으면 편하겠다. * 26핀( model A, modelB 1)용 https://github.com/simonmonk/wiki_images/raw/master/raspberry%20leaf%20r2.pdf * 40핀(modelB2,3, model zero)용 https://github.com/splitbrain/rpibplusleaf&lt;br /&gt;
&lt;br /&gt;
[[category:raspberry pi]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_pi_zero_%EC%84%A4%EC%A0%95_(_headless_)&amp;diff=233</id>
		<title>Raspberry pi zero 설정 ( headless )</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Raspberry_pi_zero_%EC%84%A4%EC%A0%95_(_headless_)&amp;diff=233"/>
				<updated>2018-07-07T23:31:56Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서: # Raspberry pi의 Headless 설정 라즈베리파이에 키보드나 마우스, 모니터 매번 연결하려니 번거롭다. 특히 pi-zero 같은 경우엔 usb포트는 하나밖...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Raspberry pi의 Headless 설정&lt;br /&gt;
라즈베리파이에 키보드나 마우스, 모니터 매번 연결하려니 번거롭다. 특히 pi-zero 같은 경우엔 usb포트는 하나밖에 없고 hdmi단자도 많이 쓰이지 않는 mini규격이라 난감하기 그지없다.&lt;br /&gt;
모니터 키보드 마우스 연결않고 (심지어 wifi동글 없어도!) 다른 노트북이나 데스크탑을 사용해 제어할 수 있는데, Headless 설정이라고 한다. (모니터 없다는 의미) &lt;br /&gt;
&lt;br /&gt;
wifi나 usb케이블을 통해 최초 연결 후 vnc(화면공유)를 설치하고(사실 기본 설치되어있지만, 설정에서 켜주어야...) 그 이후엔 vnc를 사용해 사용토록 하자.&lt;br /&gt;
&lt;br /&gt;
**2018년 6월버전의 Rasbian stretch가 Pi0W에서 무선 설정하는데 문제가 발견되어 이전버전인 Raspbian Jessie로 진행하였슴.**&lt;br /&gt;
&lt;br /&gt;
## Raspbian 설치&lt;br /&gt;
NOOBS를 통하지않고 바로 라즈비안 이미지를 sd 카드에 복사 (NOOBS보다 더 빠르고, 단계가 적다.)&lt;br /&gt;
참고: https://www.raspberrypi.org/documentation/installation/installing-images/README.md&lt;br /&gt;
&lt;br /&gt;
1. Raspbian 이미지 다운로드 &amp;amp; 압축풀기. https://www.raspberrypi.org/downloads/raspbian/ &lt;br /&gt;
압축해제시 문제 발생하는 경우 7zip(윈도)나 the Unarchiver (mac) 사용.&lt;br /&gt;
&lt;br /&gt;
2. Etcher 다운로드 &amp;amp; 설치 ( 이미지 버닝 툴 - 이미지파일을 sd카드로 옮겨줌.)&lt;br /&gt;
&lt;br /&gt;
https://etcher.io/&lt;br /&gt;
&lt;br /&gt;
3. Echer 사용해 다운받은 이미지를 SD카드에 굽기.&lt;br /&gt;
&lt;br /&gt;
완성된 SD카드 뽑았다가 다시 꽂아보면, boot 라는 이름으로 라즈비안 이 설치되어있다. 여기에 몇개 파일을 수정해주어야 한다.&lt;br /&gt;
![||600](https://cl.ly/smt5/Image%202018-07-07%20at%202.59.16%20PM.png))&lt;br /&gt;
&lt;br /&gt;
참고: https://medium.com/@aallan/setting-up-a-headless-raspberry-pi-zero-3ded0b83f274 &lt;br /&gt;
참고: https://www.losant.com/blog/getting-started-with-the-raspberry-pi-zero-w-without-a-monitor&lt;br /&gt;
&lt;br /&gt;
## 네트워크 연결 위한 설정파일 수정&lt;br /&gt;
wifi를 사용하거나, 혹은 wifi동글이 없거나 공유기가 없다면 USB케이블을 사용할해 노트북에 연결할 수 있다.&lt;br /&gt;
&lt;br /&gt;
### SSH 켜기 설정&lt;br /&gt;
SD카드의 루트 디렉토리 `/boot`에 `ssh`라는 이름의 빈 파일을 하나 새로 만든다.(확장자 없음) 그러면 부팅시 SSH가 켜진다.&lt;br /&gt;
&lt;br /&gt;
### case 1. wifi 켜기 설정&lt;br /&gt;
마찬가지로 `/boot`에 `wpa_supplicant.conf`파일을 아래 내용으로 만든다. 일반적인 텍스트 에디터 사용한다.&lt;br /&gt;
```&lt;br /&gt;
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev&lt;br /&gt;
update_config=1&lt;br /&gt;
&lt;br /&gt;
network={&lt;br /&gt;
	ssid=&amp;quot;와이파이 이름(SSID)&amp;quot;&lt;br /&gt;
	psk=&amp;quot;암호&amp;quot;&lt;br /&gt;
	key_mgmt=WPA-PSK&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### case 2. USB OTG 켜기 설정 (사실 wifi나 usb otg 둘 중 하나만 작동되면 되지만 일단 둘 다 켜두자)&lt;br /&gt;
`/boot` 디렉토리에 `config.txt`파일을 열어서 편집한다.&lt;br /&gt;
```&lt;br /&gt;
dtoverlay=dwc2&lt;br /&gt;
```&lt;br /&gt;
라는 항목이 있는지 살펴보고 (아마 아래쪽에 있을 것임) 만약 없다면 추가한다.&lt;br /&gt;
&lt;br /&gt;
또한 `cmdline.txt`파일을 열어서 (정확하게) 아래와 같이 `rootwait` 뒤에 한 칸 띄고&lt;br /&gt;
`modules-load=dwc2,g_ether`를 추가한다.&lt;br /&gt;
&lt;br /&gt;
원래 cmdline.txt 내용:&lt;br /&gt;
```&lt;br /&gt;
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=020c3677–02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
수정 후 cmdline.txt 내용:&lt;br /&gt;
```&lt;br /&gt;
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=020c3677–02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## SSH 연결&lt;br /&gt;
### 라즈베리 파이 부팅&lt;br /&gt;
sd카드를 라즈베리에 꽂고 노트북과 pi-zero의 USB포트 (특히 usb-otg 사용하는 경우 PWR가 아님 주의!)를 usb 케이블로 연결해 파이를 부팅시킨다. LED가 깜빡이며 작동됨을 알려준다.&lt;br /&gt;
![||600](https://cdn-images-1.medium.com/max/800/1*3c-LB7bViYj340J63R-nUA.jpeg)&lt;br /&gt;
&lt;br /&gt;
### case 1. wifi로 ssh연결&lt;br /&gt;
무선 라우터의 설정화면에 들어가 라즈베리파이의 ip 주소를 알아낸다.&lt;br /&gt;
![||600](https://cl.ly/snDE/Image%202018-07-07%20at%209.11.29%20AM.png)&lt;br /&gt;
&lt;br /&gt;
이렇게 알아낸 주소로 ssh접속한다. ID: pi, PW: raspberry 가 디폴트이다.&lt;br /&gt;
```&lt;br /&gt;
$ ssh pi@위에서 알아낸 IP주소&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/sm36/Image%202018-07-07%20at%209.08.25%20AM.png)&lt;br /&gt;
&lt;br /&gt;
### case 2. usb-otg로 ssh 연결&lt;br /&gt;
부팅이 끝난 후 노트북의 network항목을 보면 라즈베리파이가 `RNDIS/Ethernet Gadget` 라는 이름으로 잡혀있다.&lt;br /&gt;
![||600](https://cl.ly/skpI/Image%202018-07-06%20at%207.08.56%20PM.png)&lt;br /&gt;
위에 나와있는 169.254.254.230 은 노트북의 주소로, 라즈베리파이의 ip는 다른 방법으로 알아내야 한다.&lt;br /&gt;
&lt;br /&gt;
`dns-sd` 명령어의  `-G v4 &amp;lt;NAME&amp;gt;`  옵션을 사용하면 맨 마지막에 오는 것이 그 컴퓨터(&amp;lt;NAME&amp;gt;의 컴퓨터)가 사용하는 ip 주소이다. (dns-sd 프로그램을 끝낼 때에는 `ctrl+C`)&lt;br /&gt;
```&lt;br /&gt;
$ dns-sd -G v4 raspberrypi.local&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/skI6/Image%202018-07-06%20at%207.28.34%20PM.png)&lt;br /&gt;
&lt;br /&gt;
이렇게 알아낸 주소로 ssh접속한다. ID: pi, PW: raspberry 가 디폴트이다.&lt;br /&gt;
```&lt;br /&gt;
$ ssh pi@위에서 알아낸 IP주소&lt;br /&gt;
```&lt;br /&gt;
![||600](https://cl.ly/sjtn/Image%202018-07-06%20at%207.35.16%20PM.png)&lt;br /&gt;
&lt;br /&gt;
## VNC로 화면 공유&lt;br /&gt;
### 라이브러리 목록 업데이트 &amp;amp; 업그레이드&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
$ sudo apt-get update&lt;br /&gt;
```&lt;br /&gt;
```&lt;br /&gt;
$ sudo apt-get upgrade&lt;br /&gt;
```&lt;br /&gt;
업그레이드 완료되면 다운로드된 업데이트 파일을 지워 용량 확보&lt;br /&gt;
```&lt;br /&gt;
$ sudo apt-get clean&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### VNC Server 설치&lt;br /&gt;
```&lt;br /&gt;
$ sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer&lt;br /&gt;
```&lt;br /&gt;
설치가 끝나면 `raspi-config`를 실행해 vnc 옵션을 켜준다.&lt;br /&gt;
```&lt;br /&gt;
$ sudo raspi-config&lt;br /&gt;
```&lt;br /&gt;
5.Interfacing Option -&amp;gt; P3 VNC -&amp;gt; YES를 선택.&lt;br /&gt;
![||600](https://cl.ly/sm1u/Image%202018-07-08%20at%207.56.01%20AM.png)&lt;br /&gt;
&lt;br /&gt;
재부팅한다.&lt;br /&gt;
```&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
```&lt;br /&gt;
### 노트북에 vnc viewer 설치 및 화면 공유 실행&lt;br /&gt;
[[Raspberry Pi setup 라즈베리파이 설치하기]]문서의 '라즈베리파이 화면공유' 항목 참고&lt;br /&gt;
![||600](https://cl.ly/smGx/Image%202018-07-08%20at%208.01.00%20AM.png)&lt;br /&gt;
&lt;br /&gt;
## 한글 설치&lt;br /&gt;
[[Raspberry Pi setup 라즈베리파이 설치하기]]문서의 '한글설치' 항목 참고&lt;br /&gt;
![||600](https://cl.ly/py45/Image%202018-03-06%20at%205.01.41%20AM.png)&lt;br /&gt;
잘된다^^&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Ble_%EB%AA%A8%EB%93%88_%EC%A2%85%EB%A5%98_%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0&amp;diff=232</id>
		<title>Ble 모듈 종류 알아보기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Ble_%EB%AA%A8%EB%93%88_%EC%A2%85%EB%A5%98_%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0&amp;diff=232"/>
				<updated>2018-06-15T01:42:34Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서: # 개요 흔히 쓰이는  BLE 모듈로 HM-10이 있다. 그리고 수많은 유사품들(HC-08 등)과 CC41등  같은 BLE 모듈이라고 다 같은 BLE  모듈이 아니다. (대...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# 개요&lt;br /&gt;
흔히 쓰이는  BLE 모듈로 HM-10이 있다. 그리고 수많은 유사품들(HC-08 등)과 CC41등  같은 BLE 모듈이라고 다 같은 BLE  모듈이 아니다. (대부분 동일하게 TI의 CC2541chip에 기반하고있지만) 사용가능한 명령어 셋이라든지, 초기 설정등이 조금씩 다르기 때문이다.&lt;br /&gt;
아예 모양이 확연히 다르다면, 그리고 라벨이 명확히 인쇄되어있다면 좋겠지만 비슷비슷한 모양에 라벨링도 안되어있는 제품들이 서랍에 쌓여있는 것이 현실. &lt;br /&gt;
그래서 누군가 만들었다. 지금 연결된 것이 어떤 BLE 모듈인지 알아내는 아두이노 스케치.&lt;br /&gt;
&lt;br /&gt;
#다운로드&lt;br /&gt;
[[파일:Arduino-ble-ident-n-set-master.zip]]&lt;br /&gt;
&lt;br /&gt;
1. 압축풀고 폴더 안에있는  .ino파일을 아두이노에 업로드하고 &lt;br /&gt;
2. 시리얼모니터를 켜고 살펴본다. (115200baud로 연결.)&lt;br /&gt;
3. 시키는대로 BLE모듈의 rx / tx  를 아두이노의 임의의 핀에 꽂고 어디에 꽂았는지를 시리얼 모니터에 입력해준다. (ble의 rx가 아두이노의 tx, ble의 tx가 아두이노의 rx라는 점 주의!)&lt;br /&gt;
4. 기다린다.&lt;br /&gt;
&lt;br /&gt;
# 참고&lt;br /&gt;
[제작자 홈페이지](https://blog.yavilevich.com/2016/12/hm-10-or-cc41-a-module-automatic-arduino-ble-module-identification/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:BLE]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=%ED%8C%8C%EC%9D%BC:Arduino-ble-ident-n-set-master.zip&amp;diff=231</id>
		<title>파일:Arduino-ble-ident-n-set-master.zip</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=%ED%8C%8C%EC%9D%BC:Arduino-ble-ident-n-set-master.zip&amp;diff=231"/>
				<updated>2018-06-15T01:27:34Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 아두이노보드에 연결된 BLE모듈의 종류 (hm-10인지, hc-08인지, cc41  인지...)알아보는 아두이노 스케치&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;아두이노보드에 연결된 BLE모듈의 종류 (hm-10인지, hc-08인지, cc41  인지...)알아보는 아두이노 스케치&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=PN532_NFC_shield&amp;diff=230</id>
		<title>PN532 NFC shield</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=PN532_NFC_shield&amp;diff=230"/>
				<updated>2018-06-12T08:25:28Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#PN532 NFC shield&lt;br /&gt;
![||600](https://cl.ly/s6tV/Image%202018-06-07%20at%203.09.44%20PM.png)&lt;br /&gt;
&lt;br /&gt;
 아두이노의 ICSP핀(SPI)을 사용해 다른핀을 충분히 활용할 수 있어 좋다나... Adafruit의 PN532 라이브러리를 활용한다.&lt;br /&gt;
&lt;br /&gt;
 ***카드 구입할 때 MIFARE ISO14443A cards/tags 호환을 확인한다!!***&lt;br /&gt;
&lt;br /&gt;
[구입한곳 디바이스마트](http://www.devicemart.co.kr/1383144)&lt;br /&gt;
&lt;br /&gt;
[제조사 위키](https://www.elecrow.com/wiki/index.php?title=NFC_Shield)&lt;br /&gt;
&lt;br /&gt;
##RFID, NFC 그리고 MiFare&lt;br /&gt;
참고: http://baator9.tistory.com/7&lt;br /&gt;
간단히 말하자면 RFID는 NFC를 포함하고 NFC는 MiFare를 포함하는 표준이다. 버스카드, 출입카드 등 어플리케이션에서 mifare가 가장 널리 사용된다. mifare는 저장 용량과 보안유무에 따라 다시 MiFare classic과 Mifare Ultralight로 구분된다.&lt;br /&gt;
&lt;br /&gt;
[MiFare 프로토콜에 대한 자세한 설명 ](https://learn.adafruit.com/adafruit-pn532-rfid-nfc/mifare)&lt;br /&gt;
&lt;br /&gt;
###Mifare Classic&lt;br /&gt;
Mifare Classic 카드(태그)는 저장용량에 따라 1K, 2K, 4K가 있고, 데이터는 아래 표와 같이 16바이트가 하나의 블록으로, 4블록이 하나의 섹터로 구분되어 저장되고 기록된다.&lt;br /&gt;
![||600](https://upload.wikimedia.org/wikipedia/commons/3/39/MiFare_Byte_Layout.png)&lt;br /&gt;
&lt;br /&gt;
기억할 점은 사용자가 기록할 수 있는 블록이 정해져있다는 것.&lt;br /&gt;
&lt;br /&gt;
| block | 용도 |&lt;br /&gt;
|--|--|&lt;br /&gt;
| block#0 				| 제조자 블록으로 카드 아이디번호 등이 담기므로 사용금지. |&lt;br /&gt;
| block#1,2 			| Mifare application 용으로  단순 데이터 저장용으로 사용금지. |&lt;br /&gt;
| block#3,7,11,15,19...	| sector trailer로 보안을 위한 key를 저장하는 곳. (특정한 기기만 특정한 태그를 인식 가능토록 함) |&lt;br /&gt;
| **block#4,5,6, 8,9,10, 12,13,14,...** | **여기에 데이터 저장하자.** |&lt;br /&gt;
&lt;br /&gt;
기초적인 방식의 보안적용되어 블록에 데이터 쓰고 읽을 때 키을 확인해야 한다.&lt;br /&gt;
&lt;br /&gt;
###MiFare Ultralight&lt;br /&gt;
더 싸고 가벼운 버전의 태그시스템이다. 보안따위는 전혀 없고, 한 블록은 4개 바이트로 이루어져있다. 맨 앞의 4개 블록은 사용자가 쓸 수 없고, 0x04블록부터 사용자 데이터 저장가능하다.&lt;br /&gt;
![||600](https://www.researchgate.net/profile/Flavio_Garcia/publication/255593385/figure/fig6/AS:297841592422425@1448022377757/Memory-of-a-Mifare-Ultralight-tag11.png)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
##라이브러리 설치&lt;br /&gt;
[라이브러리 다운로드](https://www.elecrow.com/wiki/index.php?title=File:PN532_SPI.zip)에서 다운로드 받은 후 아두이노 IDE 메뉴 &amp;gt; 스케치 &amp;gt; 라이브러리 포함하기 &amp;gt; .zip 라이브러리 포함에서 다운받은 zip파일 선택하면 라이브러리 설치 됨.&lt;br /&gt;
&lt;br /&gt;
라이브러리 설치 후 메뉴&amp;gt; 파일 &amp;gt; 예제 &amp;gt; PN532-SPI &amp;gt; readMifareMemory 예제 불러들여 태그 잘 읽히는 지 테스트.&lt;br /&gt;
![||600](https://cl.ly/s6vD/Image%202018-06-07%20at%203.29.43%20PM.png)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
##태그서 DATA 읽기&lt;br /&gt;
###MiFare Classic 읽기&lt;br /&gt;
```C++&lt;br /&gt;
#include &amp;lt;PN532.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// SPI로 2개 이상의 장치가 동시에 연결될 때, SS(CS)핀을 D9,혹은 D10을 선택한다. 디폴트는 D10번핀.&lt;br /&gt;
#define PN532_CS 10&lt;br /&gt;
&lt;br /&gt;
PN532 nfc(PN532_CS);&lt;br /&gt;
&lt;br /&gt;
void setup(void){&lt;br /&gt;
	Serial.begin(9600); // 디버깅용&lt;br /&gt;
	nfc.begin();&lt;br /&gt;
	nfc.SAMConfig();	// PN532를 Normal Mode로 설정. &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(void){&lt;br /&gt;
	uint32_t id;&lt;br /&gt;
	id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A); 	// 카드 접근인식&lt;br /&gt;
	if (id != 0){	// 인식 성공하면,&lt;br /&gt;
&lt;br /&gt;
		// 블록 0x08에 접근 승인받기 ...&lt;br /&gt;
		uint8_t keys[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};	// 기본 키&lt;br /&gt;
		if (nfc.authenticateBlock(1, id, 0x08, KEY_A, keys)) {	//승인 성공하면, &lt;br /&gt;
&lt;br /&gt;
			uint8_t readBuffer[16];&lt;br /&gt;
			if (nfc.readMemoryBlock(1,0x08,readBuffer)){		// 읽기 성공하면...&lt;br /&gt;
&lt;br /&gt;
				// 데이터 보여주기&lt;br /&gt;
				 for (int i = 0; i &amp;lt; 16; i++){&lt;br /&gt;
				 	Serial.print(readBuffer[i],HEX);	Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
				 }&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		Serial.println();&lt;br /&gt;
	}&lt;br /&gt;
	delay(500);	&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
`boolean SAMConfig(void)` 명령으로 장치를 normal mode 로 설정한다. 여기에서 SAM은 'Security Access Module'로, PN532장치를 의미함. 모드는 Normal mode, Virtual Card mode, Wired Card mode, Dual Card mode가 있다.&lt;br /&gt;
&lt;br /&gt;
`uint32_t readPassiveTargetID(uint8_t cardbaudrate)` 명령은 카드를 읽어들인 후 카드의 고유ID를 리턴함. 카드가 없을 때는 0을 리턴.&lt;br /&gt;
&lt;br /&gt;
`uint32_t authenticateBlock(uint8_t cardnumber, uint32_t cid, uint8_t blockaddress, uint8_t authtype, uint8_t* keys)` 명령은 카드의 특정 메모리 블럭에 접근권한 획득.&lt;br /&gt;
&lt;br /&gt;
* cardnumber can be 1 or 2 ( 최대 2장 동시 감지)&lt;br /&gt;
* cid is 32-bit Card ID&lt;br /&gt;
* blockaddress is block number (any number between 0 - 63 for MIFARE card)&lt;br /&gt;
* authtype is which key is to be used for authentication (either KEY_A or KEY_B)&lt;br /&gt;
* keys points to the byte-array holding 6 keys.&lt;br /&gt;
&lt;br /&gt;
`uint32_t readMemoryBlock(uint8_t cardnumber, uint8_t blockaddress, uint8_t* block)` 메소드로 실제 블록 데이터를 읽어들여 미리 만들어둔 버퍼(uint8_t 배열 )에 저장한다. 읽기 성공하면 true를 리턴한다.&lt;br /&gt;
&lt;br /&gt;
###MiFare Ultralight 읽기&lt;br /&gt;
classic에서 보안관련 부분만 빼고 데이터 블록 크기는 16 -&amp;gt; 4바이트로.&lt;br /&gt;
&lt;br /&gt;
```C++&lt;br /&gt;
#include &amp;lt;PN532.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// SPI로 2개 이상의 장치가 동시에 연결될 때, SS(CS)핀을 D9,혹은 D10을 선택한다. 디폴트는 D10번핀.&lt;br /&gt;
#define PN532_CS 10&lt;br /&gt;
&lt;br /&gt;
PN532 nfc(PN532_CS);&lt;br /&gt;
&lt;br /&gt;
void setup(void){&lt;br /&gt;
	Serial.begin(9600); // 디버깅용&lt;br /&gt;
	nfc.begin();&lt;br /&gt;
	nfc.SAMConfig();	// PN532를 Normal Mode로 설정. &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(void){&lt;br /&gt;
	uint32_t id;&lt;br /&gt;
	id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A); 	// 카드 접근인식&lt;br /&gt;
	if (id != 0){	// 인식 성공하면,&lt;br /&gt;
&lt;br /&gt;
			uint8_t readBuffer[4];&lt;br /&gt;
			if (nfc.readMemoryBlock(1,0x08,readBuffer)){		// 1block 은 4Byte.&lt;br /&gt;
&lt;br /&gt;
				// 데이터 보여주기&lt;br /&gt;
				 for (int i = 0; i &amp;lt; 4; i++){&lt;br /&gt;
				 	Serial.print(readBuffer[i],HEX);	Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
				 }&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		Serial.println();&lt;br /&gt;
	}&lt;br /&gt;
	delay(500);	&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## 태그에 데이터 쓰기&lt;br /&gt;
### Mifare Classic 쓰기&lt;br /&gt;
```C++ &lt;br /&gt;
#include &amp;lt;PN532.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define PN532_CS 10&lt;br /&gt;
&lt;br /&gt;
PN532 nfc(PN532_CS);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
	Serial.begin(9600);	//디버깅용&lt;br /&gt;
	nfc.begin();&lt;br /&gt;
	nfc.SAMConfig();	// normal모드 설정 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
	uint32_t id;&lt;br /&gt;
	id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A); 	// 카드 접근 인식&lt;br /&gt;
	if (id != 0){	// 인식 성공하면,&lt;br /&gt;
&lt;br /&gt;
		// 블록 0x08에 접근 승인받기&lt;br /&gt;
		uint8_t keys[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};	// 기본 키&lt;br /&gt;
		if (nfc.authenticateBlock(1, id, 0x08, KEY_A, keys)) {	//승인 성공하면, &lt;br /&gt;
&lt;br /&gt;
			// 기록할 데이터&lt;br /&gt;
			uint8_t writeBuffer[16];&lt;br /&gt;
			for (int i = 0; i &amp;lt; 16; i++){&lt;br /&gt;
				writeBuffer[i] = i;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// 데이터 기록하기&lt;br /&gt;
			bool written = nfc.writeMemoryBlock(1, 0x08, writeBuffer);&lt;br /&gt;
			if (written){&lt;br /&gt;
				Serial.println(&amp;quot;write Successful&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// 기록한 데이터 확인&lt;br /&gt;
			uint8_t readBuffer[16];&lt;br /&gt;
			if (nfc.readMemoryBlock(1,0x08,readBuffer)){		// 읽기 성공하면...&lt;br /&gt;
&lt;br /&gt;
				// 데이터 보여주기&lt;br /&gt;
				 for (int i = 0; i &amp;lt; 16; i++){&lt;br /&gt;
				 	Serial.print(readBuffer[i],HEX); Serial.print(&amp;quot; &amp;quot;);	&lt;br /&gt;
				 }&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
		Serial.println();&lt;br /&gt;
	}&lt;br /&gt;
	delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
`uint32_t writeMemoryBlock(uint8_t cardnumber, uint8_t blockaddress, uint8_t* block)` 메소드 사용해 인식된 카드중 cardnumber 번째 카드의 blockaddress 블록에 block배열의 내용을 기록함 (16바이트)&lt;br /&gt;
&lt;br /&gt;
### Mifare Ultralight 쓰기&lt;br /&gt;
```C++ &lt;br /&gt;
#include &amp;lt;PN532.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define PN532_CS 10&lt;br /&gt;
&lt;br /&gt;
PN532 nfc(PN532_CS);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
	Serial.begin(9600);	//디버깅용&lt;br /&gt;
	nfc.begin();&lt;br /&gt;
	nfc.SAMConfig();	// normal모드 설정 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
	uint32_t id;&lt;br /&gt;
	id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A); 	// 카드 접근 인식&lt;br /&gt;
	if (id != 0){	// 인식 성공하면,&lt;br /&gt;
&lt;br /&gt;
		/*  보안따위 없다.&lt;br /&gt;
		// 블록 0x08에 접근 승인받기&lt;br /&gt;
		uint8_t keys[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};	// 기본 키&lt;br /&gt;
		if (nfc.authenticateBlock(1, id, 0x08, KEY_A, keys)) {	//승인 성공하면, &lt;br /&gt;
		*/&lt;br /&gt;
			// 기록할 데이터&lt;br /&gt;
			uint8_t writeBuffer[4];&lt;br /&gt;
			for (int i = 0; i &amp;lt; 4; i++){&lt;br /&gt;
				writeBuffer[i] = i;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// 데이터 기록하기&lt;br /&gt;
			bool written = nfc.writeMemoryBlock(1, 0x04, writeBuffer);&lt;br /&gt;
			if (written){&lt;br /&gt;
				Serial.println(&amp;quot;write Successful&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// 기록한 데이터 확인&lt;br /&gt;
			uint8_t readBuffer[4];&lt;br /&gt;
			if (nfc.readMemoryBlock(1,0x04,readBuffer)){		// 읽기 성공하면...&lt;br /&gt;
&lt;br /&gt;
				// 데이터 보여주기&lt;br /&gt;
				 for (int i = 0; i &amp;lt; 4; i++){&lt;br /&gt;
				 	Serial.print(readBuffer[i],HEX); Serial.print(&amp;quot; &amp;quot;);	&lt;br /&gt;
				 }&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		Serial.println();&lt;br /&gt;
	}&lt;br /&gt;
	delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
##주의점&lt;br /&gt;
* 하드웨어 인터럽트 사용시 충돌 일으키는 것으로 보임. 소프트웨어 인터럽트를 사용하는 것으로 해결 [[Software_Interrupt_(소프트웨어_인터럽트)]]&lt;br /&gt;
* 아두이노 d12, d13번핀에 입력장치 연결되면 간섭일으키는 것으로 보임. 회로도상에는 12,13번 핀과 아무런 연결없는데 왜 이런 현상일어나는지 모르겠음....&lt;br /&gt;
좀 더 테스트 필요&lt;br /&gt;
&lt;br /&gt;
[[category:NFC]]&lt;br /&gt;
[[category:MiFare]]&lt;br /&gt;
[[category:RFID]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%8B%A4%EB%A5%B8_%EC%A0%95%EC%88%98%ED%98%95_%EC%9E%90%EB%A3%8C%EB%A5%BC_byte_%ED%98%95%EC%9C%BC%EB%A1%9C_%EB%82%98%EB%88%84%EA%B8%B0&amp;diff=229</id>
		<title>다른 정수형 자료를 byte 형으로 나누기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%8B%A4%EB%A5%B8_%EC%A0%95%EC%88%98%ED%98%95_%EC%9E%90%EB%A3%8C%EB%A5%BC_byte_%ED%98%95%EC%9C%BC%EB%A1%9C_%EB%82%98%EB%88%84%EA%B8%B0&amp;diff=229"/>
				<updated>2018-06-12T07:32:30Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# 언제 필요한가?&lt;br /&gt;
특히 데이터 통신할 때, 보통 테이터는 byte 단위로 다루는 경우가 많다. 이 때 자료를 보낼 때는 int, long 등의 다른 자료형을 byte (8bit)형으로 바꾸었다가 수신측에서 다시 원래 형태로 재 조합해야하는 경우가 종종있다.&lt;br /&gt;
&lt;br /&gt;
# 활용예&lt;br /&gt;
&lt;br /&gt;
```C&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
byte s[4] = {0,0,0,0};&lt;br /&gt;
uint32_t l = 0xefa2338b; // 아무 숫자나 테스트해보자&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  &lt;br /&gt;
  Serial.print(&amp;quot;input_long number: &amp;quot;);Serial.println(l);   //원본&lt;br /&gt;
&lt;br /&gt;
  // uint32 l 을 byte s[4] 로 나누기&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++){&lt;br /&gt;
    s[i] = byte((l &amp;gt;&amp;gt; (8*i) ) &amp;amp; 0x000000ff);&lt;br /&gt;
    Serial.print(&amp;quot;s[&amp;quot;); Serial.print(i); Serial.print(&amp;quot;]: &amp;quot;); Serial.println(s[i]);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // byte s[4]를 uint32로 재조합하&lt;br /&gt;
  uint32_t longNumber = ((uint32_t) s[3] &amp;lt;&amp;lt; 8*3) | ((uint32_t) s[2] &amp;lt;&amp;lt; 8*2) | ((uint32_t) s[1] &amp;lt;&amp;lt; 8 ) | (uint32_t) s[0];&lt;br /&gt;
 &lt;br /&gt;
  // 변환 잘 되었는지 검사. 위의 원본과 동일해야한다.&lt;br /&gt;
  Serial.print(&amp;quot;output_long number: &amp;quot;); Serial.println(longNumber);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
* 1byte (8bit)씩 시프트해서 원하는 자맀수에 맞추는 것이 핵심!&lt;br /&gt;
* 변환 원하는 자료형에 따라 응용하자.&lt;br /&gt;
&lt;br /&gt;
# 참고:&lt;br /&gt;
각 데이터 형식의 크기: https://msdn.microsoft.com/ko-kr/library/s3f49ktz.aspx&lt;br /&gt;
&lt;br /&gt;
[[category: Arduino Tip]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%8B%A4%EB%A5%B8_%EC%A0%95%EC%88%98%ED%98%95_%EC%9E%90%EB%A3%8C%EB%A5%BC_byte_%ED%98%95%EC%9C%BC%EB%A1%9C_%EB%82%98%EB%88%84%EA%B8%B0&amp;diff=228</id>
		<title>다른 정수형 자료를 byte 형으로 나누기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%8B%A4%EB%A5%B8_%EC%A0%95%EC%88%98%ED%98%95_%EC%9E%90%EB%A3%8C%EB%A5%BC_byte_%ED%98%95%EC%9C%BC%EB%A1%9C_%EB%82%98%EB%88%84%EA%B8%B0&amp;diff=228"/>
				<updated>2018-06-12T07:30:42Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# 언제 필요한가?&lt;br /&gt;
특히 데이터 통신할 때, 보통 테이터는 byte 단위로 다루는 경우가 많다. 이 때 자료를 보낼 때는 int, long 등의 다른 자료형을 byte (8bit)형으로 바꾸었다가 수신측에서 다시 원래 형태로 재 조합해야하는 경우가 종종있다.&lt;br /&gt;
&lt;br /&gt;
# 활용예&lt;br /&gt;
&lt;br /&gt;
```C&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
byte s[4] = {0,0,0,0};&lt;br /&gt;
uint32_t l = 0xefa2338b;&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  &lt;br /&gt;
  Serial.print(&amp;quot;input_long number: &amp;quot;);Serial.println(l);&lt;br /&gt;
&lt;br /&gt;
  // uint32 l 을 byte s[4] 로 나누기&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++){&lt;br /&gt;
    s[i] = byte((l &amp;gt;&amp;gt; (8*i) ) &amp;amp; 0x000000ff);&lt;br /&gt;
    Serial.print(&amp;quot;s[&amp;quot;); Serial.print(i); Serial.print(&amp;quot;]: &amp;quot;); Serial.println(s[i]);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // byte s[4]를 uint32로 재조합하&lt;br /&gt;
  uint32_t longNumber = ((uint32_t) s[3] &amp;lt;&amp;lt; 8*3) | ((uint32_t) s[2] &amp;lt;&amp;lt; 8*2) | ((uint32_t) s[1] &amp;lt;&amp;lt; 8 ) | (uint32_t) s[0];&lt;br /&gt;
  Serial.print(&amp;quot;output_long number: &amp;quot;); Serial.println(longNumber);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
* 1byte (8bit)씩 시프트해서 원하는 자맀수에 맞추는 것이 핵심!&lt;br /&gt;
* 변환 원하는 자료형에 따라 응용하자.&lt;br /&gt;
&lt;br /&gt;
# 참고:&lt;br /&gt;
각 데이터 형식의 크기: https://msdn.microsoft.com/ko-kr/library/s3f49ktz.aspx&lt;br /&gt;
&lt;br /&gt;
[[category: Arduino Tip]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%8B%A4%EB%A5%B8_%EC%A0%95%EC%88%98%ED%98%95_%EC%9E%90%EB%A3%8C%EB%A5%BC_byte_%ED%98%95%EC%9C%BC%EB%A1%9C_%EB%82%98%EB%88%84%EA%B8%B0&amp;diff=227</id>
		<title>다른 정수형 자료를 byte 형으로 나누기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%8B%A4%EB%A5%B8_%EC%A0%95%EC%88%98%ED%98%95_%EC%9E%90%EB%A3%8C%EB%A5%BC_byte_%ED%98%95%EC%9C%BC%EB%A1%9C_%EB%82%98%EB%88%84%EA%B8%B0&amp;diff=227"/>
				<updated>2018-06-12T07:30:22Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# 언제 필요한가?&lt;br /&gt;
특히 데이터 통신할 때, 보통 테이터는 byte 단위로 다루는 경우가 많다. 이 때 자료를 보낼 때는 int, long 등의 다른 자료형을 byte (8bit)형으로 바꾸었다가 수신측에서 다시 원래 형태로 재 조합해야하는 경우가 종종있다.&lt;br /&gt;
&lt;br /&gt;
# 활용예&lt;br /&gt;
&lt;br /&gt;
'''C&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
byte s[4] = {0,0,0,0};&lt;br /&gt;
uint32_t l = 0xefa2338b;&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  &lt;br /&gt;
  Serial.print(&amp;quot;input_long number: &amp;quot;);Serial.println(l);&lt;br /&gt;
&lt;br /&gt;
  // uint32 l 을 byte s[4] 로 나누기&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++){&lt;br /&gt;
    s[i] = byte((l &amp;gt;&amp;gt; (8*i) ) &amp;amp; 0x000000ff);&lt;br /&gt;
    Serial.print(&amp;quot;s[&amp;quot;); Serial.print(i); Serial.print(&amp;quot;]: &amp;quot;); Serial.println(s[i]);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // byte s[4]를 uint32로 재조합하&lt;br /&gt;
  uint32_t longNumber = ((uint32_t) s[3] &amp;lt;&amp;lt; 8*3) | ((uint32_t) s[2] &amp;lt;&amp;lt; 8*2) | ((uint32_t) s[1] &amp;lt;&amp;lt; 8 ) | (uint32_t) s[0];&lt;br /&gt;
  Serial.print(&amp;quot;output_long number: &amp;quot;); Serial.println(longNumber);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
* 1byte (8bit)씩 시프트해서 원하는 자맀수에 맞추는 것이 핵심!&lt;br /&gt;
* 변환 원하는 자료형에 따라 응용하자.&lt;br /&gt;
&lt;br /&gt;
# 참고:&lt;br /&gt;
각 데이터 형식의 크기: https://msdn.microsoft.com/ko-kr/library/s3f49ktz.aspx&lt;br /&gt;
&lt;br /&gt;
[[category: Arduino Tip]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%8B%A4%EB%A5%B8_%EC%A0%95%EC%88%98%ED%98%95_%EC%9E%90%EB%A3%8C%EB%A5%BC_byte_%ED%98%95%EC%9C%BC%EB%A1%9C_%EB%82%98%EB%88%84%EA%B8%B0&amp;diff=226</id>
		<title>다른 정수형 자료를 byte 형으로 나누기</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%8B%A4%EB%A5%B8_%EC%A0%95%EC%88%98%ED%98%95_%EC%9E%90%EB%A3%8C%EB%A5%BC_byte_%ED%98%95%EC%9C%BC%EB%A1%9C_%EB%82%98%EB%88%84%EA%B8%B0&amp;diff=226"/>
				<updated>2018-06-12T07:30:00Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서: * 언제 필요한가? 특히 데이터 통신할 때, 보통 테이터는 byte 단위로 다루는 경우가 많다. 이 때 자료를 보낼 때는 int, long 등의 다른 자료형...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 언제 필요한가?&lt;br /&gt;
특히 데이터 통신할 때, 보통 테이터는 byte 단위로 다루는 경우가 많다. 이 때 자료를 보낼 때는 int, long 등의 다른 자료형을 byte (8bit)형으로 바꾸었다가 수신측에서 다시 원래 형태로 재 조합해야하는 경우가 종종있다.&lt;br /&gt;
&lt;br /&gt;
* 활용예&lt;br /&gt;
'''C&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
byte s[4] = {0,0,0,0};&lt;br /&gt;
uint32_t l = 0xefa2338b;&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  &lt;br /&gt;
  Serial.print(&amp;quot;input_long number: &amp;quot;);Serial.println(l);&lt;br /&gt;
&lt;br /&gt;
  // uint32 l 을 byte s[4] 로 나누기&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++){&lt;br /&gt;
    s[i] = byte((l &amp;gt;&amp;gt; (8*i) ) &amp;amp; 0x000000ff);&lt;br /&gt;
    Serial.print(&amp;quot;s[&amp;quot;); Serial.print(i); Serial.print(&amp;quot;]: &amp;quot;); Serial.println(s[i]);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // byte s[4]를 uint32로 재조합하&lt;br /&gt;
  uint32_t longNumber = ((uint32_t) s[3] &amp;lt;&amp;lt; 8*3) | ((uint32_t) s[2] &amp;lt;&amp;lt; 8*2) | ((uint32_t) s[1] &amp;lt;&amp;lt; 8 ) | (uint32_t) s[0];&lt;br /&gt;
  Serial.print(&amp;quot;output_long number: &amp;quot;); Serial.println(longNumber);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
* 1byte (8bit)씩 시프트해서 원하는 자맀수에 맞추는 것이 핵심!&lt;br /&gt;
* 변환 원하는 자료형에 따라 응용하자.&lt;br /&gt;
&lt;br /&gt;
# 참고:&lt;br /&gt;
각 데이터 형식의 크기: https://msdn.microsoft.com/ko-kr/library/s3f49ktz.aspx&lt;br /&gt;
&lt;br /&gt;
[[category: Arduino Tip]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%B6%84%EB%A5%98:Arduino_tip&amp;diff=225</id>
		<title>분류:Arduino tip</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%B6%84%EB%A5%98:Arduino_tip&amp;diff=225"/>
				<updated>2018-06-12T02:05:50Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 문서를 비움&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Arduino:_fatal_error:_WProgram.h:_No_such_file_or_directory&amp;diff=224</id>
		<title>Arduino: fatal error: WProgram.h: No such file or directory</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Arduino:_fatal_error:_WProgram.h:_No_such_file_or_directory&amp;diff=224"/>
				<updated>2018-06-12T02:05:18Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WIKI}}&lt;br /&gt;
== 증상 ==&lt;br /&gt;
https://cl.ly/2c1e0D3s0u3w/Image%202017-05-30%20at%2012.58.00%20AM.png&lt;br /&gt;
&lt;br /&gt;
컴파일시 WProgrma.h 파일 없음 메시지&lt;br /&gt;
&lt;br /&gt;
error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/arduino/FWXYIQ4G1BBD44S/FWXYIQ4G1BBD44S.ino:3:22: fatal error: WProgram.h: No such file or directory&lt;br /&gt;
 #include &amp;quot;WProgram.h&amp;quot;&lt;br /&gt;
                      ^&lt;br /&gt;
compilation terminated.&lt;br /&gt;
exit status 1&lt;br /&gt;
Error compiling for board Arduino/Genuino Uno.&lt;br /&gt;
&lt;br /&gt;
This report would have more information with&lt;br /&gt;
&amp;quot;Show verbose output during compilation&amp;quot;&lt;br /&gt;
option enabled in File -&amp;gt; Preferences.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 원인 ==&lt;br /&gt;
옛 아두이노 0.0. xx 버전에서의 WProgram.h는 최근의 아두이노 1.0.xx 이상 버전에서에서 Arduino.h 로 변경됨.&lt;br /&gt;
&lt;br /&gt;
== 해결책 ==&lt;br /&gt;
소스 코드중&lt;br /&gt;
&amp;lt;syntaxhighlight lan=&amp;quot;arduino&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;WProgram.h&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
를&lt;br /&gt;
&amp;lt;syntaxhighlight lan=&amp;quot;arduino&amp;quot;&amp;gt;&lt;br /&gt;
#if defined(ARDUINO) &amp;amp;&amp;amp; (ARDUINO &amp;gt;= 100)&lt;br /&gt;
  #include &amp;quot;Arduino.h&amp;quot;&lt;br /&gt;
#else&lt;br /&gt;
  #include &amp;quot;WProgram.h&amp;quot;&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
로 수정한다.&lt;br /&gt;
&lt;br /&gt;
https://cl.ly/2I211w0W1n3b/Image%202017-05-30%20at%201.07.29%20AM.png&lt;br /&gt;
&lt;br /&gt;
[[category:Arduino Tip]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Software_Interrupt_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8)&amp;diff=223</id>
		<title>Software Interrupt (소프트웨어 인터럽트)</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Software_Interrupt_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8)&amp;diff=223"/>
				<updated>2018-06-12T02:04:33Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
# 개요&lt;br /&gt;
아두이노에서 하드웨어 인터럽트는 2개 (Uno, nano) 사용할 수 있는데, 가끔 인터럽트가 더 많았으면 좋겠다 싶을 때도 있고, 또 때로는 일정한 시간마다 주기적으로 어떤 처리를 해야하는 경우도 있다. 이럴 때 유용하게 쓸 수 있는 소프트웨어 인터럽트 (타이머) 활용법 대 공개!&lt;br /&gt;
&lt;br /&gt;
아두이노에는 기본 3개의 타이머가 내장되어있는데, timer0, timer1, timer2이다. timer0은 delay()등의 시간관련 함수에서 내부적으로 사용하고,  timer1은 서보라이브러리가 사용, timer2는 tone()에서 사용한다. 이 타이머도 일종의 인터럽트라고 할 수 있겠다. TimerOne라이브러리는 Timer1 타이머를 사용해 인터럽트를 구현토록 해준다.&lt;br /&gt;
&lt;br /&gt;
# TimerOne 라이브러리 설치&lt;br /&gt;
아두이노 메뉴 &amp;gt; 스케치 &amp;gt; 라이브러리 포함하기 &amp;gt; 라이브러리 매니저 에서 TimerOne 라이브러리를 검색 해 설치한다.&lt;br /&gt;
혹은 [이곳](https://code.google.com/archive/p/arduino-timerone/downloads)에서 다운.&lt;br /&gt;
&lt;br /&gt;
# 예제&lt;br /&gt;
```C&lt;br /&gt;
/*&lt;br /&gt;
* 언제라도 버튼(핀7)누르면 즉시 불(핀13) 켜지는 회로&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;TimerOne.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
	pinMode(7,INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
	Timer1.initialize(100000); // 1초마다 실행. in microseconds&lt;br /&gt;
	Timer1.attachInterrupt(intFunction);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
	digitalWrite(13, LOW);&lt;br /&gt;
	delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void intFunction(){&lt;br /&gt;
	if (digitalRead(7) == LOW){&lt;br /&gt;
		digitalWrite(13,HIGH);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
# 주의점&lt;br /&gt;
아두이노 서보 라이브러리가 Timer1을 사용하고있어 충돌이 일어날 수 있다. 그럴 땐 servo 라이브러리 대신 timer2를 사용하는 servotimer2 라이브러리를 사용해 충돌을 피하자. &lt;br /&gt;
&lt;br /&gt;
[[ServoTimer2]]&lt;br /&gt;
&lt;br /&gt;
[ServoTimer2 라이브러리](https://platformio.org/lib/show/1305/ServoTimer2)&lt;br /&gt;
아두이노 메가 등은 타이머가 총 6개 내장되어있고, 충돌을 피하기 위해 Timer3을 사용할 수 있다. [TimerThree 라이브러리 다운로드](http://playground.arduino.cc/Code/Timer1)&lt;br /&gt;
&lt;br /&gt;
# 참고&lt;br /&gt;
한글자료: http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=lecture_pract&amp;amp;wr_id=12&lt;br /&gt;
&lt;br /&gt;
라이브러리 문서: http://playground.arduino.cc/Code/Timer1&lt;br /&gt;
&lt;br /&gt;
[[category:Arduino Tip]]&lt;br /&gt;
[[category:interrupt]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%B6%84%EB%A5%98:Arduino_Tip&amp;diff=222</id>
		<title>분류:Arduino Tip</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%B6%84%EB%A5%98:Arduino_Tip&amp;diff=222"/>
				<updated>2018-06-12T02:03:58Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서: Category:Arduino&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Arduino]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%B6%84%EB%A5%98:Interrupt&amp;diff=221</id>
		<title>분류:Interrupt</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%B6%84%EB%A5%98:Interrupt&amp;diff=221"/>
				<updated>2018-06-12T02:03:44Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Arduino Tip]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%B6%84%EB%A5%98:Interrupt&amp;diff=220</id>
		<title>분류:Interrupt</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%B6%84%EB%A5%98:Interrupt&amp;diff=220"/>
				<updated>2018-06-12T02:03:04Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Arduino Tips]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%B6%84%EB%A5%98:Interrupt&amp;diff=219</id>
		<title>분류:Interrupt</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=%EB%B6%84%EB%A5%98:Interrupt&amp;diff=219"/>
				<updated>2018-06-12T02:02:21Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서: category:Arduino Tip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Arduino Tip]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=ServoTimer2&amp;diff=218</id>
		<title>ServoTimer2</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=ServoTimer2&amp;diff=218"/>
				<updated>2018-06-12T02:02:00Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서: # ServoTimer2 언제필요한가?  아두이노의 기본 servo 라이브러리가 pwm신호를 만들기 위해 내부적으로 AVR칩의 timer1 타이머를 사용하는데, 가끔...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# ServoTimer2 언제필요한가?&lt;br /&gt;
 아두이노의 기본 servo 라이브러리가 pwm신호를 만들기 위해 내부적으로 AVR칩의 timer1 타이머를 사용하는데, 가끔 timer1 타이머를 필요로 하는 다른 라이브러리와 충돌을 일이키는 경우가 있다. ( 특히 인터럽트, 타이머 사용시... )&lt;br /&gt;
 이럴 때에 충돌을 피하면서 servo를 사용하기 위해 AVR칩의 timer2타이머를 사용해 서보를 사용토록 하자.&lt;br /&gt;
&lt;br /&gt;
# ServoTimer2 라이브러리 설치&lt;br /&gt;
아래 servotimer2 라이브러리 프로젝트 페이지의 [Repository](https://github.com/nabontra/ServoTimer2/blob/master/ServoTimer2.cpp)에서 .zip파일을 다운받은 후,&lt;br /&gt;
아두이노 메뉴 &amp;gt; 스케치 &amp;gt; 라이브러리 포함하기 &amp;gt; .zip 라이브러리 포함 을 선택해 라이브러리 설치한다.&lt;br /&gt;
&lt;br /&gt;
[ServoTimer2 라이브러리](https://platformio.org/lib/show/1305/ServoTimer2)&lt;br /&gt;
&lt;br /&gt;
# 예제&lt;br /&gt;
```C&lt;br /&gt;
//&lt;br /&gt;
// 서보의 작동범위를 테스트해보자.&lt;br /&gt;
// 0~5까지 시리얼 입력에 따라 servopin에 연결된 서보가 특정한 각도로 움직인다.&lt;br /&gt;
//&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;ServoTimer2.h&amp;gt;&lt;br /&gt;
#define servopin 8&lt;br /&gt;
&lt;br /&gt;
ServoTimer2 myservo;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  Serial.println(&amp;quot;ServoTimer2 Test&amp;quot;);&lt;br /&gt;
  myservo.attach(servopin);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly:&lt;br /&gt;
  if (Serial.available()){&lt;br /&gt;
    int val = 0;&lt;br /&gt;
    int selection = Serial.read();&lt;br /&gt;
    switch(selection){&lt;br /&gt;
      case '0':&lt;br /&gt;
        val = 0;&lt;br /&gt;
        break;&lt;br /&gt;
      case '1':&lt;br /&gt;
        val = 500;&lt;br /&gt;
        break;&lt;br /&gt;
      case '2':&lt;br /&gt;
        val = 1000;&lt;br /&gt;
        break;&lt;br /&gt;
      case '3':&lt;br /&gt;
        val = 2000;&lt;br /&gt;
        break;&lt;br /&gt;
      case '4':&lt;br /&gt;
        val = 2300;&lt;br /&gt;
        break;&lt;br /&gt;
      case '5':&lt;br /&gt;
        val = 2500;&lt;br /&gt;
        break;&lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    Serial.println(val);&lt;br /&gt;
    myservo.write(val);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
기본적인 사용법은 기본 servo 라이브러리와 동일하다.&lt;br /&gt;
그런데 write() 함수에 들어가는 값은 각도가 아니라 1000~3000 사이의 값. &lt;br /&gt;
값을 조정해가며 테스트를 통해 상한과 하한을 찾아내자.&lt;br /&gt;
&lt;br /&gt;
* 참고&lt;br /&gt;
https://platformio.org/lib/show/1305/ServoTimer2/examples&lt;br /&gt;
&lt;br /&gt;
[[category:Interrupt]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=Software_Interrupt_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8)&amp;diff=217</id>
		<title>Software Interrupt (소프트웨어 인터럽트)</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=Software_Interrupt_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8)&amp;diff=217"/>
				<updated>2018-06-12T01:42:54Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: 새 문서:  # 개요 아두이노에서 하드웨어 인터럽트는 2개 (Uno, nano) 사용할 수 있는데, 가끔 인터럽트가 더 많았으면 좋겠다 싶을 때도 있고, 또 때로...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
# 개요&lt;br /&gt;
아두이노에서 하드웨어 인터럽트는 2개 (Uno, nano) 사용할 수 있는데, 가끔 인터럽트가 더 많았으면 좋겠다 싶을 때도 있고, 또 때로는 일정한 시간마다 주기적으로 어떤 처리를 해야하는 경우도 있다. 이럴 때 유용하게 쓸 수 있는 소프트웨어 인터럽트 (타이머) 활용법 대 공개!&lt;br /&gt;
&lt;br /&gt;
아두이노에는 기본 3개의 타이머가 내장되어있는데, timer0, timer1, timer2이다. timer0은 delay()등의 시간관련 함수에서 내부적으로 사용하고,  timer1은 서보라이브러리가 사용, timer2는 tone()에서 사용한다. 이 타이머도 일종의 인터럽트라고 할 수 있겠다. TimerOne라이브러리는 Timer1 타이머를 사용해 인터럽트를 구현토록 해준다.&lt;br /&gt;
&lt;br /&gt;
# TimerOne 라이브러리 설치&lt;br /&gt;
아두이노 메뉴 &amp;gt; 스케치 &amp;gt; 라이브러리 포함하기 &amp;gt; 라이브러리 매니저 에서 TimerOne 라이브러리를 검색 해 설치한다.&lt;br /&gt;
혹은 [이곳](https://code.google.com/archive/p/arduino-timerone/downloads)에서 다운.&lt;br /&gt;
&lt;br /&gt;
# 예제&lt;br /&gt;
```C&lt;br /&gt;
/*&lt;br /&gt;
* 언제라도 버튼(핀7)누르면 즉시 불(핀13) 켜지는 회로&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;TimerOne.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
	pinMode(7,INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
	Timer1.initialize(100000); // 1초마다 실행. in microseconds&lt;br /&gt;
	Timer1.attachInterrupt(intFunction);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
	digitalWrite(13, LOW);&lt;br /&gt;
	delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void intFunction(){&lt;br /&gt;
	if (digitalRead(7) == LOW){&lt;br /&gt;
		digitalWrite(13,HIGH);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
# 주의점&lt;br /&gt;
아두이노 서보 라이브러리가 Timer1을 사용하고있어 충돌이 일어날 수 있다. 그럴 땐 servo 라이브러리 대신 timer2를 사용하는 servotimer2 라이브러리를 사용해 충돌을 피하자. &lt;br /&gt;
&lt;br /&gt;
[[ServoTimer2]]&lt;br /&gt;
&lt;br /&gt;
[ServoTimer2 라이브러리](https://platformio.org/lib/show/1305/ServoTimer2)&lt;br /&gt;
아두이노 메가 등은 타이머가 총 6개 내장되어있고, 충돌을 피하기 위해 Timer3을 사용할 수 있다. [TimerThree 라이브러리 다운로드](http://playground.arduino.cc/Code/Timer1)&lt;br /&gt;
&lt;br /&gt;
# 참고&lt;br /&gt;
한글자료: http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=lecture_pract&amp;amp;wr_id=12&lt;br /&gt;
&lt;br /&gt;
라이브러리 문서: http://playground.arduino.cc/Code/Timer1&lt;br /&gt;
&lt;br /&gt;
[[category:Arduino Tip]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=PN532_NFC_shield&amp;diff=216</id>
		<title>PN532 NFC shield</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=PN532_NFC_shield&amp;diff=216"/>
				<updated>2018-06-11T04:01:47Z</updated>
		
		<summary type="html">&lt;p&gt;Doguin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#PN532 NFC shield&lt;br /&gt;
![||600](https://cl.ly/s6tV/Image%202018-06-07%20at%203.09.44%20PM.png)&lt;br /&gt;
&lt;br /&gt;
 아두이노의 ICSP핀(SPI)을 사용해 다른핀을 충분히 활용할 수 있어 좋다나... Adafruit의 PN532 라이브러리를 활용한다.&lt;br /&gt;
&lt;br /&gt;
 ***카드 구입할 때 MIFARE ISO14443A cards/tags 호환을 확인한다!!***&lt;br /&gt;
&lt;br /&gt;
[구입한곳 디바이스마트](http://www.devicemart.co.kr/1383144)&lt;br /&gt;
&lt;br /&gt;
[제조사 위키](https://www.elecrow.com/wiki/index.php?title=NFC_Shield)&lt;br /&gt;
&lt;br /&gt;
##RFID, NFC 그리고 MiFare&lt;br /&gt;
참고: http://baator9.tistory.com/7&lt;br /&gt;
간단히 말하자면 RFID는 NFC를 포함하고 NFC는 MiFare를 포함하는 표준이다. 버스카드, 출입카드 등 어플리케이션에서 mifare가 가장 널리 사용된다. mifare는 저장 용량과 보안유무에 따라 다시 MiFare classic과 Mifare Ultralight로 구분된다.&lt;br /&gt;
&lt;br /&gt;
[MiFare 프로토콜에 대한 자세한 설명 ](https://learn.adafruit.com/adafruit-pn532-rfid-nfc/mifare)&lt;br /&gt;
&lt;br /&gt;
###Mifare Classic&lt;br /&gt;
Mifare Classic 카드(태그)는 저장용량에 따라 1K, 2K, 4K가 있고, 데이터는 아래 표와 같이 16바이트가 하나의 블록으로, 4블록이 하나의 섹터로 구분되어 저장되고 기록된다.&lt;br /&gt;
![||600](https://upload.wikimedia.org/wikipedia/commons/3/39/MiFare_Byte_Layout.png)&lt;br /&gt;
&lt;br /&gt;
기억할 점은 사용자가 기록할 수 있는 블록이 정해져있다는 것.&lt;br /&gt;
&lt;br /&gt;
| block | 용도 |&lt;br /&gt;
|--|--|&lt;br /&gt;
| block#0 				| 제조자 블록으로 카드 아이디번호 등이 담기므로 사용금지. |&lt;br /&gt;
| block#1,2 			| Mifare application 용으로  단순 데이터 저장용으로 사용금지. |&lt;br /&gt;
| block#3,7,11,15,19...	| sector trailer로 보안을 위한 key를 저장하는 곳. (특정한 기기만 특정한 태그를 인식 가능토록 함) |&lt;br /&gt;
| **block#4,5,6, 8,9,10, 12,13,14,...** | **여기에 데이터 저장하자.** |&lt;br /&gt;
&lt;br /&gt;
기초적인 방식의 보안적용되어 블록에 데이터 쓰고 읽을 때 키을 확인해야 한다.&lt;br /&gt;
&lt;br /&gt;
###MiFare Ultralight&lt;br /&gt;
더 싸고 가벼운 버전의 태그시스템이다. 보안따위는 전혀 없고, 한 블록은 4개 바이트로 이루어져있다. 맨 앞의 4개 블록은 사용자가 쓸 수 없고, 0x04블록부터 사용자 데이터 저장가능하다.&lt;br /&gt;
![||600](https://www.researchgate.net/profile/Flavio_Garcia/publication/255593385/figure/fig6/AS:297841592422425@1448022377757/Memory-of-a-Mifare-Ultralight-tag11.png)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
##라이브러리 설치&lt;br /&gt;
[라이브러리 다운로드](https://www.elecrow.com/wiki/index.php?title=File:PN532_SPI.zip)에서 다운로드 받은 후 아두이노 IDE 메뉴 &amp;gt; 스케치 &amp;gt; 라이브러리 포함하기 &amp;gt; .zip 라이브러리 포함에서 다운받은 zip파일 선택하면 라이브러리 설치 됨.&lt;br /&gt;
&lt;br /&gt;
라이브러리 설치 후 메뉴&amp;gt; 파일 &amp;gt; 예제 &amp;gt; PN532-SPI &amp;gt; readMifareMemory 예제 불러들여 태그 잘 읽히는 지 테스트.&lt;br /&gt;
![||600](https://cl.ly/s6vD/Image%202018-06-07%20at%203.29.43%20PM.png)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
##태그서 DATA 읽기&lt;br /&gt;
###MiFare Classic 읽기&lt;br /&gt;
```C++&lt;br /&gt;
#include &amp;lt;PN532.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// SPI로 2개 이상의 장치가 동시에 연결될 때, SS(CS)핀을 D9,혹은 D10을 선택한다. 디폴트는 D10번핀.&lt;br /&gt;
#define PN532_CS 10&lt;br /&gt;
&lt;br /&gt;
PN532 nfc(PN532_CS);&lt;br /&gt;
&lt;br /&gt;
void setup(void){&lt;br /&gt;
	Serial.begin(9600); // 디버깅용&lt;br /&gt;
	nfc.begin();&lt;br /&gt;
	nfc.SAMConfig();	// PN532를 Normal Mode로 설정. &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(void){&lt;br /&gt;
	uint32_t id;&lt;br /&gt;
	id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A); 	// 카드 접근인식&lt;br /&gt;
	if (id != 0){	// 인식 성공하면,&lt;br /&gt;
&lt;br /&gt;
		// 블록 0x08에 접근 승인받기 ...&lt;br /&gt;
		uint8_t keys[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};	// 기본 키&lt;br /&gt;
		if (nfc.authenticateBlock(1, id, 0x08, KEY_A, keys)) {	//승인 성공하면, &lt;br /&gt;
&lt;br /&gt;
			uint8_t readBuffer[16];&lt;br /&gt;
			if (nfc.readMemoryBlock(1,0x08,readBuffer)){		// 읽기 성공하면...&lt;br /&gt;
&lt;br /&gt;
				// 데이터 보여주기&lt;br /&gt;
				 for (int i = 0; i &amp;lt; 16; i++){&lt;br /&gt;
				 	Serial.print(readBuffer[i],HEX);	Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
				 }&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		Serial.println();&lt;br /&gt;
	}&lt;br /&gt;
	delay(500);	&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
`boolean SAMConfig(void)` 명령으로 장치를 normal mode 로 설정한다. 여기에서 SAM은 'Security Access Module'로, PN532장치를 의미함. 모드는 Normal mode, Virtual Card mode, Wired Card mode, Dual Card mode가 있다.&lt;br /&gt;
&lt;br /&gt;
`uint32_t readPassiveTargetID(uint8_t cardbaudrate)` 명령은 카드를 읽어들인 후 카드의 고유ID를 리턴함. 카드가 없을 때는 0을 리턴.&lt;br /&gt;
&lt;br /&gt;
`uint32_t authenticateBlock(uint8_t cardnumber, uint32_t cid, uint8_t blockaddress, uint8_t authtype, uint8_t* keys)` 명령은 카드의 특정 메모리 블럭에 접근권한 획득.&lt;br /&gt;
&lt;br /&gt;
* cardnumber can be 1 or 2 ( 최대 2장 동시 감지)&lt;br /&gt;
* cid is 32-bit Card ID&lt;br /&gt;
* blockaddress is block number (any number between 0 - 63 for MIFARE card)&lt;br /&gt;
* authtype is which key is to be used for authentication (either KEY_A or KEY_B)&lt;br /&gt;
* keys points to the byte-array holding 6 keys.&lt;br /&gt;
&lt;br /&gt;
`uint32_t readMemoryBlock(uint8_t cardnumber, uint8_t blockaddress, uint8_t* block)` 메소드로 실제 블록 데이터를 읽어들여 미리 만들어둔 버퍼(uint8_t 배열 )에 저장한다. 읽기 성공하면 true를 리턴한다.&lt;br /&gt;
&lt;br /&gt;
###MiFare Ultralight 읽기&lt;br /&gt;
classic에서 보안관련 부분만 빼고 데이터 블록 크기는 16 -&amp;gt; 4바이트로.&lt;br /&gt;
&lt;br /&gt;
```C++&lt;br /&gt;
#include &amp;lt;PN532.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// SPI로 2개 이상의 장치가 동시에 연결될 때, SS(CS)핀을 D9,혹은 D10을 선택한다. 디폴트는 D10번핀.&lt;br /&gt;
#define PN532_CS 10&lt;br /&gt;
&lt;br /&gt;
PN532 nfc(PN532_CS);&lt;br /&gt;
&lt;br /&gt;
void setup(void){&lt;br /&gt;
	Serial.begin(9600); // 디버깅용&lt;br /&gt;
	nfc.begin();&lt;br /&gt;
	nfc.SAMConfig();	// PN532를 Normal Mode로 설정. &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(void){&lt;br /&gt;
	uint32_t id;&lt;br /&gt;
	id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A); 	// 카드 접근인식&lt;br /&gt;
	if (id != 0){	// 인식 성공하면,&lt;br /&gt;
&lt;br /&gt;
			uint8_t readBuffer[4];&lt;br /&gt;
			if (nfc.readMemoryBlock(1,0x08,readBuffer)){		// 1block 은 4Byte.&lt;br /&gt;
&lt;br /&gt;
				// 데이터 보여주기&lt;br /&gt;
				 for (int i = 0; i &amp;lt; 4; i++){&lt;br /&gt;
				 	Serial.print(readBuffer[i],HEX);	Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
				 }&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		Serial.println();&lt;br /&gt;
	}&lt;br /&gt;
	delay(500);	&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## 태그에 데이터 쓰기&lt;br /&gt;
### Mifare Classic 쓰기&lt;br /&gt;
```C++ &lt;br /&gt;
#include &amp;lt;PN532.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define PN532_CS 10&lt;br /&gt;
&lt;br /&gt;
PN532 nfc(PN532_CS);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
	Serial.begin(9600);	//디버깅용&lt;br /&gt;
	nfc.begin();&lt;br /&gt;
	nfc.SAMConfig();	// normal모드 설정 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
	uint32_t id;&lt;br /&gt;
	id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A); 	// 카드 접근 인식&lt;br /&gt;
	if (id != 0){	// 인식 성공하면,&lt;br /&gt;
&lt;br /&gt;
		// 블록 0x08에 접근 승인받기&lt;br /&gt;
		uint8_t keys[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};	// 기본 키&lt;br /&gt;
		if (nfc.authenticateBlock(1, id, 0x08, KEY_A, keys)) {	//승인 성공하면, &lt;br /&gt;
&lt;br /&gt;
			// 기록할 데이터&lt;br /&gt;
			uint8_t writeBuffer[16];&lt;br /&gt;
			for (int i = 0; i &amp;lt; 16; i++){&lt;br /&gt;
				writeBuffer[i] = i;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// 데이터 기록하기&lt;br /&gt;
			bool written = nfc.writeMemoryBlock(1, 0x08, writeBuffer);&lt;br /&gt;
			if (written){&lt;br /&gt;
				Serial.println(&amp;quot;write Successful&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// 기록한 데이터 확인&lt;br /&gt;
			uint8_t readBuffer[16];&lt;br /&gt;
			if (nfc.readMemoryBlock(1,0x08,readBuffer)){		// 읽기 성공하면...&lt;br /&gt;
&lt;br /&gt;
				// 데이터 보여주기&lt;br /&gt;
				 for (int i = 0; i &amp;lt; 16; i++){&lt;br /&gt;
				 	Serial.print(readBuffer[i],HEX); Serial.print(&amp;quot; &amp;quot;);	&lt;br /&gt;
				 }&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
		Serial.println();&lt;br /&gt;
	}&lt;br /&gt;
	delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
`uint32_t writeMemoryBlock(uint8_t cardnumber, uint8_t blockaddress, uint8_t* block)` 메소드 사용해 인식된 카드중 cardnumber 번째 카드의 blockaddress 블록에 block배열의 내용을 기록함 (16바이트)&lt;br /&gt;
&lt;br /&gt;
### Mifare Ultralight 쓰기&lt;br /&gt;
```C++ &lt;br /&gt;
#include &amp;lt;PN532.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define PN532_CS 10&lt;br /&gt;
&lt;br /&gt;
PN532 nfc(PN532_CS);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
	Serial.begin(9600);	//디버깅용&lt;br /&gt;
	nfc.begin();&lt;br /&gt;
	nfc.SAMConfig();	// normal모드 설정 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
	uint32_t id;&lt;br /&gt;
	id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A); 	// 카드 접근 인식&lt;br /&gt;
	if (id != 0){	// 인식 성공하면,&lt;br /&gt;
&lt;br /&gt;
		/*  보안따위 없다.&lt;br /&gt;
		// 블록 0x08에 접근 승인받기&lt;br /&gt;
		uint8_t keys[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};	// 기본 키&lt;br /&gt;
		if (nfc.authenticateBlock(1, id, 0x08, KEY_A, keys)) {	//승인 성공하면, &lt;br /&gt;
		*/&lt;br /&gt;
			// 기록할 데이터&lt;br /&gt;
			uint8_t writeBuffer[4];&lt;br /&gt;
			for (int i = 0; i &amp;lt; 4; i++){&lt;br /&gt;
				writeBuffer[i] = i;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// 데이터 기록하기&lt;br /&gt;
			bool written = nfc.writeMemoryBlock(1, 0x04, writeBuffer);&lt;br /&gt;
			if (written){&lt;br /&gt;
				Serial.println(&amp;quot;write Successful&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// 기록한 데이터 확인&lt;br /&gt;
			uint8_t readBuffer[4];&lt;br /&gt;
			if (nfc.readMemoryBlock(1,0x04,readBuffer)){		// 읽기 성공하면...&lt;br /&gt;
&lt;br /&gt;
				// 데이터 보여주기&lt;br /&gt;
				 for (int i = 0; i &amp;lt; 4; i++){&lt;br /&gt;
				 	Serial.print(readBuffer[i],HEX); Serial.print(&amp;quot; &amp;quot;);	&lt;br /&gt;
				 }&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		Serial.println();&lt;br /&gt;
	}&lt;br /&gt;
	delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
##주의점&lt;br /&gt;
아두이노 d12, d13번핀에 입력장치 연결되면 간섭일으키는 것으로 보임. 회로도상에는 12,13번 핀과 아무런 연결없는데 왜 이런 현상일어나는지 모르겠음....&lt;br /&gt;
좀 더 테스트 필요&lt;br /&gt;
&lt;br /&gt;
[[category:NFC]]&lt;br /&gt;
[[category:MiFare]]&lt;br /&gt;
[[category:RFID]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	</feed>