레이블이 RPi 3인 게시물을 표시합니다. 모든 게시물 표시
레이블이 RPi 3인 게시물을 표시합니다. 모든 게시물 표시

2016년 8월 22일 월요일

라즈베리 파이 3 시리얼/블루투스 문제 (Raspberry Pi 3 UART/Bluetooth problem)

라즈베리 파이에는 디버그 콘솔용 또는 시리얼 통신을 위한 핀이 40핀 커넥터에 나와 있다.

위의 그림에서 처럼 8/10번 핀이 각각 TxD, RxD가 된다.


위의 사진과 같은 USB-to-Serial(TTL level) converter를 사용해 PC와 연결해서 시리얼 통신을 할 수 있다.


이렇게 연결해 주면 된다.

컴퓨터에서 시리얼 에뮬레이터를 실행하고 통신속도를 115200bps로 맞춰 준 다음 라즈베리 파이에 전원을 공급하면 시리얼 에뮬레이터 화면에 이런 내용들이 출력되게 된다.

그런데 라즈베리 파이 2까지는 아무 문제가 없었던 것이 라즈베리 파이 3를 동일하게 연결하면 위와 같은 내용이 나오지 않고 이상하게 깨진 글자가 나오게 된다.

저렇게 깨진 글자가 나오게 되는 이유는 통신 속도가 틀려서이다.

원인을 이해하기 위해 라즈베리 파이의 내부 구조를 살펴보겠다.

라즈베리 파이 1B/B+는 BCM2835, 2는 BCM2836 SoC를 사용하고 있는데 여기에는 각각 2개의 UART가 들어 있는데 UART0는 Full UART, UART1은 mini UART이다. 여기서 UART0는 /dev/ttyAMA0로 사용되고 UART1은 /dev/ttyS0로 사용된다.

위의 그림처럼 mini UART는 몇가지 제약이 있지만, 40핀 커넥터의 8/10번 핀은 full UART의 Tx/Rx로 연결되어 있으므로 아무 문제가 없다.

하지만 라즈베리 파이 3로 오면서 블루투스가 추가되는 바람에 문제가 복잡해졌다.

먼저 하드웨어 구조를 살펴 보자.


위의 사진이 라즈베리 파이 1/2의 구조이다. 시리얼 포트 핀이 UART0에 연결되어 있다.


라즈베리 파이 3로 오면서 무선랜/블루투스 기능 추가를 위해 Broadcom의 BCM43438 칩을 사용하고 있는데 무선랜 기능은 SDIO로 연결하지만 블루투스 기능은 UART0으로 연결을 하고 시리얼 포트 핀은 UART1에 연결되도록 구조가 변경되었다. 그러므로 그 동안 아무 문제 없이 시리얼 포트를 사용하던 프로그램이 라즈베리 파이 3로 오면서 블루투스를 사용하게 되면 제대로 동작을 할 수 없게 되어 버린 것이다.

또한 코드의 /dev/ttyAMA0를 /dev/ttyS0로 변경한다고 해도 문제가 남는다.

UART1의 통신 속도는 다음 공식에 의해 결정된다.


라즈베리 파이 3의 경우 부팅시의 코어 동작 주파수는 400MHz이고 디폴트 baud rate는 115200 bps이다. 즉 위의 공식은...


이 된다. 여기서 baudRateReg는 부팅시에 코어 동작 주파수에 의해 계산된다.

그런데 전력소비를 줄이기 위해 frequency scaling 기능을 사용하고 있기 때문에 시스템 로드가 작은 경우 코어 동작 주파수를 250MHz로 줄일 수 있다. baudRateReg 값은 고정되어 있는데 시스템 클럭 주파수가 변동되기 때문에 결과적으로 baudrate도 따라서 바뀌게 되어 버린다.


즉 코어가 400MHz로 동작할 때는 115200bps로 동작하던 시리얼 포트가 코어 동작 속도가 250MHz가 되면 시리얼 포트 통신속도가 72004 bps로 바뀌어 버리기 때문에 위쪽의 그림처럼 깨진 글자가 나오게 되는 것이다.

그러므로 headless system (모니터 없이 사용하는 경우)에서 시리얼 디버그 콘솔을 사용하거나, UART를 사용하는 RPi shield(GPS/GSM, RS232 등등)를 사용하거나, 시리얼 포트로 다른 프로세서와 통신을 하는 경우 등에는 치명적인 문제가 될 수 있다.

이 문제의 해결책으로는 먼저 부팅시 코어 동작 속도를 고정해 버리는 것이다.

예전 펌웨어를 사용하는 경우 /etc/config.txt 파일에 "core_freq=250" 또는 "force_turbo=1"을 추가해 주는 것이다. 이렇게 하면 코어 동작 속도를 각각 최소 또는 최대(400MHz)로 고정시켜 버리게 된다. 최소로 고정시키면 RPi3의 성능에 영향을 미치게 되고, 최대로 고정시키면 방열대책을 신경 써 줘야 한다. 하지만 최대로 고정시켰다 하더라도 전압이 떨어지거나 코어 온도가 매우 높게 올라가면 250MHz로 쓰로틀링 될 수 있다는걸 주의해야 한다.

새 펌웨어의 경우에는 /boot/config.txt 파일에 "enable_uart=1"을 추가해주면 된다. 앞으로 모든 RPi distribution은 이 옵션을 다 지원하게 될 것이다. 이는 "core_freq=250"과 유사하지만 좀 더 명확한 의도를 표현한다. 이 옵션을 지원하는 distros인 경우 "enable_uart=1"이 활성화 되지 않으면 디버그 콘솔을 비활성화 시켜 놓는다. "enable_uart=1"에 대해 Raspberry Pi Foundation의 엔지니어 Phil Elwell이 상세히 설명 해 놓았다. https://github.com/raspberrypi/firmware/issues/553#issuecomment-199486644

두번째 방법으로는 디바이스 트리 오버레이로 40핀 헤더의 핀 매핑을 바꿔 Full UART를 사용하게 해 주는 것이다.

원래는 위의 사진에서 왼쪽같이 되어 있는데 오른쪽같이 되도록 변경하는 것이다. 이를 위해서는 '/boot/config.txt'에 'dtoverlay=pi3-disable-bt'를 추가해 주거나, '/boot/config.txt'에 'dtoverlay=pi3-miniuart-bt'를 추가해 주면 된다.

'dtoverlay=pi3-disable-bt'를 추가해주면 UART1을 사용하지 않는걸로 해서 블루투스를 비활성화 시킨다. 이 경우 라즈비안에서는 "sudo systemctl disable hciuart" 명령을 추가로 실행해 줘야 한다.

'dtoverlay=pi3-miniuart-bt'를 추가해 주는 경우는 블루투스가 mini-UART를 사용한다. 이를 위해 '/boot/config.txt'에 'core_freq=250' 또는 'force_turbo=1'이 들어가 있어야 한다. 또한 라즈비안의 경우 '/lib/systemd/system/hciuart.service'의 ttyAMA0를 ttyS0로 수정해 줘야 한다. 그리고 이 때는 블루투스의 성능에 제한이 생길 수 있기 때문에 저속 BLE만 실질적으로 사용하는데 문제가 없다.

위의 어떤 옵션을 사용하건 'enable_uart=0'을 넣어주지 않는 한 시리얼 콘솔은 활성화 되어 있다.

즉 위의 설명을 요약하자면 다음과 같다.

* 시리얼 콘솔과 일반적인 블루투스를 사용하고 싶은 경우 (/boot/config.txt 파일을 수정)
  - 코어 주파수를 고정
  - "core_freq=250" 또는 "force_turbo=1"을 추가 (old 펌웨어인 경우)
  - "enable_uart=1" (만일 동작 주파수를 고속으로 고정하고 싶으면 "force_turbo=1"을 추가)

* 고속 시리얼을 사용하고 싶은 경우
  - UART0와 UART1 핀을 교체
  - 블루투스를 사용할 수 없는 경우
    + "dtoverlay=pi3-disable-bt"
    + (라즈비안) "sudo systemctl disable hciuart"를 실행
  - 저속 블루투스 클래식 또는 BLE
    + "dtoverlay=pi3-miniuart-bt" 와 "core_freq=250" 또는 "force_turbo=1"중의 하나를 추가
    + (라즈비안) "/lib/systemd/system/hciuart.service" 파일의 "ttyAMA0"를 "ttyS0"로 수정
  - 디버그 콘솔을 비활성화 시키려면 "disable_uart=0" 추가
* Mini UART를 사용하려면 항상 코어 주파수를 고정할 필요가 있음


2016년 5월 12일 목요일

라즈베리 파이를 비콘으로 사용하기 (Using Raspberry Pi as a Beacon)

독립적으로 비콘 모듈을 사용할 수도 있지만 이미 라즈베리 파이를 가지고 있다면 별도의 비콘 모듈 없이 라즈베리 파이를 비콘으로 설정해 사용할 수 있다.


라즈베리 파이 3의 경우 무선랜/블루투스가 기본 내장되어 있어 별도의 추가 하드웨어가 필요 없어 더 경제적이다. 라즈베리 파이 1/2의 경우는 USB타입의 블루투스 동글을 추가해 주면 된다.


 비콘은 특별한 것이 아니고 BLE(Bluetooth Low Energy)의 advertising packet 안에 옵션 필드인 Manufacturer Specific Data 에 특정 값을 집어넣어 주기적으로 advertising 하는 것이다. 그러므로 이 필드에 들어갈 값을 알아야 한다.

필드의 구조는 다음과 같다.

  • ID (uint8_t) : 이 값은 항상 0x02
  • Data Len (uint8_t) : payload 나머지 부분의 길이 → 0x15 (21 bytes)
  • 128-bit UUID (uint8_t[16]) : 128-bit 식별자
  • Major (uint16_t) : Major value
  • Minor (uint16_t) : Minor value
  • TX Power (uint8_t) : RSSI 기반으로 거리를 추정하기 위해 사용됨
 예를 들어 다음은 유효한 iBeacon payload의 값이다.


블루투스 표준에 의하면 Company Identifier가 Manufacturer Specific Data 필드 앞에 와야만 한다. 여기서 사용할 Apple의 company identifier는 0x004C 이다.

라즈베리 파이가 비콘 데이터를 보내게 하려면 몇가지 툴을 설치해 줘야만 한다. 여기서 핵심은 Bluez(리눅스 블루투스 스택)이고 부가적으로 libusb와 몇개의 helper library가 필요하다.

순서대로 필요한 툴들을 설치, bluez를 다운받아 컴파일 및 설치 해 주면 된다.

pi@raspberrypi ~ $ sudo apt-get install libusb-dev libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-def

pi@raspberrypi ~ $ sudo mkdir bluez
pi@raspberrypi ~ $ cd bluez
pi@raspberrypi ~ $ sudo wget www.kernel.org/pub/linux/bluetooth/bluez-5.11.tar.xz
 
pi@raspberrypi ~ $ sudo unzx bluez-5.11.tar.xz 
pi@raspberrypi ~ $ sudo tar xvf bluez-5.11.tar
pi@raspberrypi ~ $ cd bluez-5.11
pi@raspberrypi ~ $ sudo ./configure --disable-systemd
pi@raspberrypi ~ $ sudo make
pi@raspberrypi ~ $ sudo make install



설치가 완료되었으면 블루투스 동글을 꼽고 재부팅 시켜주면 된다.

재부팅이 완료되면 먼저 시스템에 설치된 디바이스 목록을 확인한다.


pi@raspberrypi ~ $ hciconfig
hci0:  Type: BR/EDR    Bus: USB
       BD Address: 00:1A:7D:DA:71:12 ACL MTU: 310:10 SCO MTU: 64:8
       DOWN
       RX bytes: 495 acl:0 sco:0 events:21 errors: 0
       TX bytes: 89 acl:0 sco:0 commands: 21 errors: 0
pi@raspberrypi ~ $

만일 모든것이 정상적으로 설정되어 있으면 위와 같이 hci 디바이스가 보이게 된다. 이제 다음 명령으로 디바이스를 활성화 시켜 준다. 또한 advertising을 할 때 문제를 일으킬 수도 있으므로 device scanning은 꺼 준다.

pi@raspberrypi ~ $ sudo hciconfig hci0 up 
pi@raspberrypi ~ $ sudo hciconfig hci0 leadv3
pi@raspberrypi ~ $ sudo hciconfig hci0 noscan

이제 다시 hciconfig 명령을 수행해 보면 'DOWN' 대신 'UP  RUNNING'이 보여야 한다.

pi@raspberrypi ~ $ hciconfig
hci0:  Type: BR/EDR    Bus: USB
       BD Address: 00:1A:7D:DA:71:12 ACL MTU: 310:10 SCO MTU: 64:8
       UP RUNNING
       RX bytes: 1008 acl:0 sco:0 events:45 errors: 0
       TX bytes: 236 acl:0 sco:0 commands: 45 errors: 0
pi@raspberrypi ~ $

이제 마지막으로 해 줘야 할 일은 advertising data에 beacon 값을 넣어주는 것이다. 다음과 같이 명령을 입력해 준다. (좀 길지만 한 줄에 다 입력해 준다.)


pi@raspberrypi ~ $ sudo tools/hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A 
FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C8 00

위의 값들 중에서 FF는 Manufacturer Specific Data의 시작을 알려 주고, 4C 00은 Apple의 Company ID(0x004C), 그리고 나머지 부분부터 C8까지가 beacon의 payload이다.

이제 라즈베리 파이는 비콘으로 동작하게 된다. 확인해 보려면 iOS7 이후 버젼을 OS를 사용하는 아이폰/아이패드/아이팟 터치 또는 안드로이드 폰에 beacon toolkit 또는 유사한 앱을 설치해 실행하면 된다.

앱을 시작해 listen 모드로 들어가면 아래와 유사한 화면을 볼 수 있을 것이다.



이제 동작하는건 확인했지만 라즈베리 파이를 부팅할 때 마다 매번 위의 명령을 입력하기 힘드니 스크립트를 사용하는것이 편하다.

pi@raspberrypi ~ $ cat /home/pi/beacon.sh

#!/bin/bash
# ref: http://www.theregister.co.uk/Print/2013/11/29/feature_diy_apple_ibeacons/
set -x
# inquiry local bluetooth device
#hcitool dev
export BLUETOOTH_DEVICE=hci0
#sudo hcitool -i hcix cmd <OGF> <OCF> <No. Significant Data Octets> <iBeacon Prefix> <UUID> <Major> <Minor> <Tx Power> <Placeholder Octets>

#OGF = Operation Group Field = Bluetooth Command Group = 0x08
#OCF = Operation Command Field = HCI_LE_Set_Advertising_Data = 0x0008
#No. Significant Data Octets (Max of 31) = 1E (Decimal 30)
#iBeacon Prefix (Always Fixed) = 02 01 1A 1A FF 4C 00 02 15

export OGF="0x08"
export OCF="0x0008"
export IBEACONPROFIX="1E 02 01 1A 1A FF 4C 00 02 15"

#uuidgen  could gerenate uuid
export UUID="4a 4e ce 60 7e b0 11 e4 b4 a9 08 00 20 0c 9a 66"

export MAJOR="00 02"
export MINOR="00 01"
export POWER="C5 00"


# initialize device
sudo hciconfig $BLUETOOTH_DEVICE up
# disable advertising
sudo hciconfig $BLUETOOTH_DEVICE noleadv
# stop the dongle looking for other Bluetooth devices
sudo hciconfig $BLUETOOTH_DEVICE noscan

sudo hciconfig $BLUETOOTH_DEVICE pscan


sudo hciconfig $BLUETOOTH_DEVICE leadv

# advertise
sudo hcitool -i $BLUETOOTH_DEVICE cmd 0x08 0x0008 $IBEACONPROFIX $UUID $MAJOR $MINOR $POWER
sudo hcitool -i $BLUETOOTH_DEVICE cmd 0x08 0x0006 A0 00 A0 00 00 00 00 00 00 00 00 00 00 07 00
sudo hcitool -i $BLUETOOTH_DEVICE cmd 0x08 0x000a 01

echo "complete"


pi@raspberrypi ~ $

/home/pi/beacon.sh 라는 파일을 만들어 위의 파란색 부분의 내용을 넣어주면 된다. 위의 스크립트 중에 hcitool cmd 0x08 0x0006 a0 00 a0 00 .. 에서 첫번째/두번째 바이트 (0xa0 0x00)은 minimum interval, 세번째/네번째 바이트(0xa0 0x00)은 maximum interval이다. 0xa0 0x00은 0x00a0 (big endian)이 되므로 10진수로는 160이 된다. BLE에서 시간 granularity는 0.625ms이므로 최소/최대 인터벌은 모두 160 * 0.625ms = 100ms가 된다. 즉 매 0.1초마다 한번씩 비콘 신호를 advertising하게 된다.

파일을 만들었으면 chmod 명령으로 실행 퍼미션을 추가해 준다.

pi@raspberrypi ~ $ chmod +x beacon.sh

이제부터는 ./beacon.sh 만 입력해 주면 라즈베리 파이가 비콘으로 동작한다.

pi@raspberrypi ~ $ ./beacon.sh
+ export BLUETOOTH_DEVICE=hci0
+ BLUETOOTH_DEVICE=hci0
+ export OGF=0x08
+ OGF=0x08
+ export OCF=0x0008
+ OCF=0x0008
+ export 'IBEACONPROFIX=1E 02 01 1A 1A FF 4C 00 02 15'
+ IBEACONPROFIX='1E 02 01 1A 1A FF 4C 00 02 15'
+ export 'UUID=4a 4e ce 60 7e b0 11 e4 b4 a9 08 00 20 0c 9a 66'
+ UUID='4a 4e ce 60 7e b0 11 e4 b4 a9 08 00 20 0c 9a 66'
+ export 'MAJOR=00 01'
+ MAJOR='00 01'
+ export 'MINOR=00 00'
+ MINOR='00 00'
+ export 'POWER=C5 00'
+ POWER='C5 00'
+ sudo hciconfig hci0 up
+ sudo hciconfig hci0 noleadv
+ sudo hciconfig hci0 noscan
+ sudo hciconfig hci0 pscan
+ sudo hciconfig hci0 leadv
+ sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 4a 4e ce 60 7e b0 11 e4 b4 a9 08 00 20 0c 9a 66 00 01 00 00 C5 00
< HCI Command: ogf 0x08, ocf 0x0008, plen 32
  1E 02 01 1A 1A FF 4C 00 02 15 4A 4E CE 60 7E B0 11 E4 B4 A9
  08 00 20 0C 9A 66 00 01 00 00 C5 00
> HCI Event: 0x0e plen 4
  01 08 20 00
+ sudo hcitool -i hci0 cmd 0x08 0x0006 A0 00 A0 00 00 00 00 00 00 00 00 00 00 07 00
< HCI Command: ogf 0x08, ocf 0x0006, plen 15
  A0 00 A0 00 00 00 00 00 00 00 00 00 00 07 00
> HCI Event: 0x0e plen 4
  01 06 20 0C
+ sudo hcitool -i hci0 cmd 0x08 0x000a 01
< HCI Command: ogf 0x08, ocf 0x000a, plen 1
  01
> HCI Event: 0x0e plen 4
  01 0A 20 0C
+ echo complete
complete 

pi@raspberrypi ~ $

이제 라즈베리 파이를 비콘으로 사용하려면 부팅될 때 마다 자동으로 위의 스크립트가 실행되도록 설정해 주면 된다.

라즈베리 파이에서 특정 프로그램이 부팅될 때 실행되게 하는 방법은 몇가지가 있지만 /etc/rc.local을 수정하는 방법 또는 cron을 사용하는 방법은 문제가 있다. 라즈베리 파이에서 블루투스가 활성화 된 이후에 위의 스크립트가 실행되어야만 하는데 두가지 방법은 스크립트가 먼저 실행되어 버리기 때문에 비콘으로 동작하지 못한다.

그러므로 systemd를 사용해 준다. 먼저 /lib/systemd/system 디렉토리에 두개의 파일을 만들어 준다. 각각 파일의 내용은 아래와 같다.

pi@raspberrypi ~ $ cat /lib/systemd/system/beacon.service
[Unit]
Description=Beacon service
After=bluetooth.target

[Service]
Type=forking
ExecStart=/home/pi/beacon.sh
ExecReload=/home/pi/beacon.sh

[Install]
WantedBy=bluetooth.target


pi@raspberrypi ~ $ cat /lib/systemd/system/beacon.target
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Beacon
Documentation=man:systemd.special(7)
StopWhenUnneeded=yes


pi@raspberrypi ~ $ sudo systemctl daemon-reload
pi@raspberrypi ~ $ sudo systemctl enable beacon.service
Synchronizing state for beacon.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d beacon defaults
Executing /usr/sbin/update-rc.d beacon enable


pi@raspberrypi ~ $

이제 시스템을 리부팅 하면 항상 자동으로 비콘이 시작된다.





아이폰에서 Beecon 앱으로 확인해 본 결과이다. 스크립트에서 설정한 UUID(4a4e......9a66) , Major(2), Minor(1) 를 확인할 수 있다.






2016년 4월 28일 목요일

맥에서 라즈베리 파이 3 사용하기 (Start using Raspberry Pi 3 in Mac OS X)

라즈베리 파이를 사용하려면 먼저 micro SD 카드에 OS를 설치해 줘야 한다. 라즈베리 파이에 사용할 수 있는 OS들은 https://www.raspberrypi.org에서 다운받을 수 있다.


위의 DOWNLOADS를 선택해 준다.


사용할 수 있는 OS는 몇 가지 있지만 여기서는 가장 많이 사용되는 Raspbian을 사용한다.


현재 Raspbian은 Jessie 버젼이 최신이다. ZIP 파일을 다운받는다.


다운 받은 ZIP 파일 압축을 해제하면 위와 같은 img 파일이 생성된다. 이 img 파일을 microSD 카드에 써 주면 되는 것이다.


microSD 카드를 맥에 연결한 다음 먼저 터미널 창을 열고 'diskutil list' 명령을 입력해서 microSD 카드가 어떤 디바이스 이름으로 식별되었나 확인해 준다. 위의 츌력 결과를 보면 여기서는 16GB microSD 카드를 사용하고 있으므로 '/dev/disk3' 라는 이름으로 식별되었다는걸 알 수 있다.


이제 microSD 카드를 unmount 시켜 준다. 'diskutil unmountDisk /dev/disk3' 와 같이 빨간색 부분은 위에서 확인한 microSD 카드의 디바이스명을 쳐 줘야 한다.


microSD 카드가 unmount 되었으면 이제 이미지를 microSD 카드에 써 준다. 'sudo dd bs=1m if=~/Desktop/2016-03-18-raspbian-jessie.img of=/dev/rdisk3' 에서 빨간색 부분은 img 파일의 위치이고 파란색 부분은 microSD 카드의 디바이스 명인데 위와 달리 '/dev/disk3' 가 아니고 '/dev/rdisk3'를 사용해 줘야 한다. 명령을 입력하면 루트로 실행하기 위해 암호를 물어본다. 자신의 맥 계정의 암호를 입력해 주면 된다. 명령이 실행되면 microSD카드에 기록하는데 상당한 시간이 걸린다. (약 10분 가량) 화면에 아무 변화가 없지만 실행되고 있는 것이므로 실행이 끝날 때 까지 가만히 놔두면 된다.

이제 OS가 준비되었는데 라즈베리 파이에 키보드/마우스/모니터를 연결해 사용하는 경우는 OS가 부팅된 후에 네트웍 설정을 변경해 주면 되지만 키보드/마우스/모니터 없이 headless 환경에서 사용하는 경우라면 처음에 ssh로 접속을 해야만 하는데 DHCP로 IP를 받아오면 ssh로 접속할 주소를 확인하기가 힘들다. 그래서 처음부터 부팅할 때 IP 주소를 static으로 설정을 변경해 주면 편하다.


microSD카드를 보면 cmdline.txt 라는 파일이 있다. 이 파일의 내용을 수정해 주면 된다.


파일을 열어 보면 기본적으로 위와 같은 내용이 들어 있다.


파일의 맨 뒷 부분에 위와 같이 자신이 원하는 라즈베리파이의 IP 주소를 추가해 주고 파일을 저장한다.

이제 맥에서 microSD 카드를 뽑아 라즈베리 파이에 넣어주고 케이블들을 연결한 다음 전원을 공급해 부팅 시키면 된다.





위의 비디오에서 볼 수 있는 것 처럼 라즈베리 파이3의 경우 부팅이 완료될 때 까지 대략 40초 정도가 소요된다.

이제 맥의 터미널에서 ssh로 라즈베리에 접속해 본다.


디폴트 유저명은 'pi' 이고 암호는 'raspberry' 이다. 그러므로 'ssh pi@192.168.145.10' 명령으로 연결하면 된다. 물론 명령에서 ip 주소(여기서는 '192.168.145.10')는 각자 자신이 설정해 준 주소로 바꿔줘야 한다.

맨 처음 접속하는 것이므로 라즈베리 파이의 authenticity가 확인되지 않으므로 믿을 수 있는 서버인가를 확인하는 메시지가 나온다. 여기에 'yes'를 입력해 주면 된다. 처음 한번만 해 주면 다음번 부터는 다시 나타나지 않는다. 그리고 암호(여기서는 초기 디폴트 암호인 'raspberry')를 넣어주면 된다. 암호는 연결되자 마자 바로 바꿔주는게 좋다.



접속되면 'sudo raspi-config' 명령을 입력해 설정을 변경해 준다.



프로그램에서 먼저 '1 Expand Filesystem'을 선택해서 엔터를 누른다. 그럼 몇가지가 실행된 후 라즈베리 파이가 리부팅 된다. 리부팅 되면 ssh 연결이 끊어지게 되므로 조금 후 다시 연결해 주면 된다.





그리고 'sudo apt-get update', 'sudo apt-get dist-upgrade', 'sudo rpi-update' 명령을 순서대로 실행해서 설치된 패키지와 라즈베리 파이 펌웨어를 최신으로 업그레이드 해 주면 된다.