zigbee IoT 장치들(End Device)를 사용하기 위해선 장치들이 연결되기 위한 Coordinator가 필요하다.

코디네이터를 중심으로 end device 들이 연결되는데, 중간에 네트워크 확장을 위해서 라우터를 추가하기도 함.

코디네이터 혹은 라우터로 사용할 수 있는 CC2531 을 구매 후 펌웨어 변경 작업을 정리해 보았음.


CC2531 펌웨어 플래싱 with RPi

* 참고: 
    * What do I need? | zigbee2mqtt.io - https://www.zigbee2mqtt.io/getting_started/what_do_i_need.html
    * Flashing the firmware on the CC2531 USB stick | zigbee2mqtt.io - https://www.zigbee2mqtt.io/getting_started/flashing_the_cc2531.html
    * Alternative flashing methods | zigbee2mqtt.io - https://www.zigbee2mqtt.io/information/alternative_flashing_methods.html
    * ConBee implementation #72 - https://github.com/jmichault/flash_cc2531/issues/9


우선 CC2531(약 $5) 이랑 다운로더 케이블(약 $2)를 준비한다. 난 AliExpress 에서 주문하였음.

칩안테나(회로에 안테나가 그려져 있는) 버전이 있고 안테나 단자가 달려 있고 안테나를 같이 파는 버전도 있다.

CC2531 을 그냥 쓸 경우 신호가 약하다는 글을 많이 봐서 난 안테나 버전으로 구매하였음.


펌웨어 작업이 이미 되어 있는 CC2531을 팔기도 한다던데 그걸 살 경우 다운로더 케이블과 이 작업이 필요없다.


위에 참고로 건 글 중 Flashing the firmware on the CC2531 USB stick 글을 보면 Windows, Mac, Linux 에서 플래싱을 할 수 있지만, 왠지 pi에서 하는게 더 편할 것 같았다.

pi나 아두이노로 진행하는 방법은 Alternative flashing methods 글을 참고하면 됨.


1. 파이에 WiringPI 설치

sudo apt install wiringpi


2. 파이에서 툴 다운로드

git clone https://github.com/jmichault/flash_cc2531.git


3. 파이와 다운로더 모듈 간에 GPIO핀 연결

연결을 위해선 암-암 점퍼 케이블 4개가 필요함.

다운로더 모듈

 파이

 pin 1 (GND)

 pin 39 (GND)

 pin 7 (reset)

 pin 35 (GPIO24, BCM19)

 pin 3 (DC)

 pin 36 (GPIO27, BCM16)

 pin 4 (DD)

 pin 38 (GPIO28, BCM20)

다운로더 모듈의 핀보드는 모듈에 적혀있으니 그걸 보면 되고, 파이의 핀 위치는 https://pinout.xyz/ 사이트 참고.


4개 핀도 연결하고 전원 공급을 위해 CC2531 을 파이의 USB단자에도 연결해준다.


4. 플래싱

1) 먼저 잘 연결이 되었는지 확인해본다.

cd flash_cc2531
./cc_chipid -m 90
  ID = b524.

ID가 0000, ffff 등이 나온다면 뭔가 오류가 있음.

원래 -m 90 을 붙여주지 않아도 되는데, 나의 경우 계속 붙여줘야 정상적으로 진행이 가능했다.


2) 펌웨어 파일 다운로드

코디네이터 버전 - https://github.com/Koenkk/Z-Stack-firmware/tree/master/coordinator/Z-Stack_Home_1.2/bin/default

라우터 버전 - https://github.com/Koenkk/Z-Stack-firmware/tree/master/router/CC2531/bin

# 코디네이터
wget https://github.com/Koenkk/Z-Stack-firmware/raw/master/coordinator/Z-Stack_Home_1.2/bin/default/CC2531_DEFAULT_20190608.zip
unzip CC2531_DEFAULT_20190608.zip

# 라우터
wget https://github.com/Koenkk/Z-Stack-firmware/raw/master/router/CC2531/bin/CC2531_router_2020_09_29.zip
unzip CC2531_router_2020_09_29.zip


라우터 버전은 펌웨어가 3개가 나온다.

- router-cc2531-std.hex: 라우터 기능만 작동
- router-cc2531-diag.hex: 라우터 + 진단 정보
- router-cc2531-diag-usb.hex: 라우터 + 진당전보 + USB 시리얼포트로 인식 (진단정보를 USB로 읽기 가능)

진단정보가 뭘 말하는건지 모르겠어서 난 그냥 -std 버전을 사용하였음.


3) 펌웨어 플래싱

./cc_erase -m 90
./cc_write -m 90 CC2531ZNP-Prod.hex (혹은 해당하는 펌웨어명)


보통 HA에서 Zigbee 를 사용하기 위해 CC2531 칩 + zigbee2mqtt 를 많이 사용하지만,
ConBee II 라는 애가 "Very powerful"⁽¹⁾ 라고 소개되어 있어서가 있어서 구매해보았다.

아마존에서 $47에 구매, 57,304원이 빠져나갔다. CC2531 한개가 약 $5 인걸 고려하면 무시무시한 금액...ㅠㅠ


zigbee2mqtt 와 아직 호환이 완벽하지 않다고 적혀있어서⁽²⁾ deCONZ 란걸 사용해보았음

(1) Supported adapters | zigbee2mqtt.io - https://www.zigbee2mqtt.io/information/supported_adapters.html
(2) ConBee implementation - #72 https://github.com/Koenkk/zigbee-herdsman/issues/72


deCONZ 설정

# USB 제어를 하기 위해 현재 사용자를 dialout 그룹에 추가
# RPi 에서 pi 계정의 경우 이미 추가가 되어 있음.
sudo usermod -a -G dialout $USER

# 이미지 받아오기
docker pull marthoc/deconz

docker run -d \
    --name=deconz \
    --net=host \
    --restart=always \
    -v /home/pi/ha/deconz:/root/.local/share/dresden-elektronik/deCONZ \
    --device=/dev/ttyACM0 \
    -v /etc/localtime:/etc/localtime:ro \
    -e DECONZ_WEB_PORT=2000 \
    -e DECONZ_WS_PORT=2001 \
    marthoc/deconz


설정 파일 위치는 지정하기 나름. 이전 글에 이어서 /home/pi/ha/deconz으로 지정하였음.

--device=/dev/ttyACM0 부분은,, zigbee 모듈을 연결하고 해당 USB 항목을 넘겨주는건데 알아서 하자.

포트는 기본이 80, 443 인데 마음에 안들어서 각 2000, 2001 로 바꾸었다.

이제 http://RPi주소:2000로 접속 가능.


HA 웹페이지 통합 구성요소로 가면 deCONZ가 나타나고 클릭해서 연결하면 된다.

deCONZ 웹에서도 그룹을 만들거나, 제어를 하는게 가능하지만 어차피 HA로 제어를 할테니 zigbee 장비 연결만하고 돌아오면 됨.

그룹을 만들 경우 HA에도 나타나서 거슬린다.


문제점

 localhost 주소가 아닌 경우 pi의 IP가 바뀌면 HA와 deCONZ가 서로 통신을 못하는 어처구니 없는 일이 발생한다.

로컬주소로 바꿔봤는데도 이상함.. 그냥 deCONZ 자체가 IP가 바뀌면 이상하게 작동을 한다..ㅡㅡ


그리고 다원 DNS의 Zigbee Smart plug 는 연결은 되지만 제어만 되고 전력 소모량 등의 값은 올라오지 않는다.

Zigbee 전등 스위치는 아예 연결도 안됨...


결국 deCONZ 대신 zigbee2mqtt 를 다시 깔았다.. 이건 따로 글을 쓸 예정.

deCONZ 를 안쓸 경우 만들었던 docker 이미지를 꺼주거나, 지워주자.


# 인스턴스 정지
docker stop deconz

# 컨테이너 삭제
docker rm deconz

# 이미지 삭제
docker rmi marthoc/deconz


Home Assistant(이하 HA)를 설치하는 방법은 다양한 것 같지만, 난 RPi3B+ 에다가 docker 로 설치하였음.


# 도커 설치
sudo curl -fsSL https://get.docker.com/ | sudo sh

# 사용자 계정을 docker 그룹에 추가
sudo usermod -aG docker $USER

# HA 이미지 받아오기
docker pull homeassistant/raspberrypi3-homeassistant:stable

# 실행
docker run --init -d \
    --name="home-assistant" \
    --net=host \
    --restart=always \
    -v /home/pi/ha/config:/config \
    -e "TZ=Asia/Seoul" \
    homeassistant/raspberrypi3-homeassistant:stable


타임존은 어차피 다시 설정하던데 왜 적으라는지 모르겠다.. 혹시 모르니 일단 지정.

설정 파일이 저장될 위치는 그냥 적당히 /home/pi/ha/config 으로 지정했다.


실행이 되면 http://RPi주소:8123 으로 HA 관리 페이지에 접속할 수 있다.

계정 생성시에 처음에 적는 이름이 아니라 두번째 란인 사용자 이름이 ID 임에 주의..


HomeBridge 설정

iOS HomeKit 사용을 위해 HomeBridge를 활성화하려면 설정 파일에 한줄 추가해줘야 한다.

sudo vi /home/pi/ha/config/configuration.yaml

# Configure a default setup of Home Assistant (frontend, api, etc)
default_config:

# Text to speech
tts:
  - platform: google_translate

group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

homekit:

이 후 HA 서버를 재시작

iOS 홈 앱에서 액세서리 추가 - HA 웹페이지 알림에 뜬 QR 혹은 코드로 등록하면 된다.


* 추가한 후에 HA에 새로운 기기가 추가되거나 삭제해도 홈킷에 제깍제깍 반영이 되지 않는다...

그럴 땐 HA를 재시작 하면 바로 반영 되는 것 같음...


블루투스를 이용해서 쉘에 접근할 수 있는 방법이 있다고 해서 정리해봄.


와이파이를 제대로 사용할 수 없는 등의 환경에 유용할 것 같은데.. 마냥 편하진 않다. 느리기도 하고...


0. bluetoothd 실행 옵션

bluez 5 부터 일부 커맨드라인 툴들이 deprecated 되었다.

hciconfig 는 바로 지원을 하는 것 같은데, SPP 추가를 위한 sdptool 이 작동하지 않음.


sudo vi /lib/systemd/system/bluetooth.service

ExecStart=/usr/lib/bluetooth/bluetoothd -C

데몬파일을 열어서 이렇게 수정해주자.(마지막에 -C 옵션 추가)



sudo systemctl daemon-reload
sudo systemctl restart bluetooth

그 후 블루투스 서비스를 재시작해주면 된다.



1. SP profile 추가

RPi 의 블루투스 프로파일에 SPP, Serial Port Profile 을 추가해야한다.


sudo sdptool add SP

위 명령어로 추가 가능. 재부팅, 서비스를 재시작 등을 하면 없어진다.

이 작업을 자동으로 해주고 싶으면,

블루투스 데몬 파일(/lib/systemd/system/bluetooth.service)에 아래와 같이 추가해줘도 됨.


ExecStartPost=/usr/bin/sdptool add SP

# 데몬 파일을 수정해줬으면 리붓하거나 reload & restart 해주자.
sudo systemctl daemon-reload
sudo systemctl restart bluetooth


추가가 되었는지는 아래와 같이 확인할 수 있다.


sudo sdptool browse local
(...)
Service Name: Serial Port
Service Description: COM Port
Service Provider: BlueZ
Service RecHandle: 0x10005
Service Class ID List:
  "Serial Port" (0x1101)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 1
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Serial Port" (0x1101)
    Version: 0x0100



2. 다른 장치에서 파이를 검색 가능하게 설정


# Page Scan & Inquiry Scan
sudo hciconfig hci0 piscan 
#OR
sudo btmgmt connectable on
sudo btmgmt discov yes

# Page Scan (기본값)
sudo hciconfig hci0 pscan
#OR
sudo btmgmt connectable on
sudo btmgmt discov no

# Scan 비활성화
sudo hciconfig hci0 noscan 
#OR
sudo btmgmt connectable off
sudo btmgmt discov no

Scan 을 활성화해두면 명령어로 재부팅 전까지 다른 장치의 블루투스 스캔에 응답할 수 있다.


Page Scan(connectable) 은 이미 서로 알고 있는, 즉 페어링된 적이 있는 기기와 연결하는 방식이고

Inquiry Scan(discoverable) 은 서로 모르는 기기가 연결하기 위한 방법이다.

(즉, 처음 연결이 필요할때만 Inquiry Scan 모드를 활성화해주면 된다.)


hciconfig hci0 명령어로 확인해보면 각 PSCAN ISCAN 키워드로 활성화 상태를 알려주고,

btmgmt info 명령어로 확인해본다면 current settings에 discoverable 이 있는지로 Inquiry Scan 활성화 여부를 확인할 수 있다.




3. RFCOMM 실행, 서비스화

RFCOMM 을 통해서 시리얼 연결을 터미널로 연결한다.



#rfcomm watch [dev] [channel] [cmd]
#    watch: listen 과 동일하지만, 자식 프로세스가 종료되거나 클라이언트와 연결이 끊길 경우 다시 listening 시작함.
sudo rfcomm watch hci0 1 getty rfcomm0 115200 vt100

이 명령어를 실행하면 다른 장치에서 블루투스로 파이에 연결했을때 터미널로 연결해준다.

특정 계정 자동 로그인을 해주고 싶다면 마지막에  -a <사용자> 를 추가해주자.

sudo rfcomm watch hci0 1 getty rfcomm0 115200 vt100 -a pi


이 명령어를 매번 실행해줄 수 없으므로, 이것도 데몬화한다.

/etc/systemd/system/rfcomm.service 파일을 아래와 같이 만들어 준다.



[Unit]
Description=RFCOMM service
After=bluetooth.service
Requires=bluetooth.service

[Service]
ExecStart=/usr/bin/rfcomm watch hci0 1 getty rfcomm0 115200 vt100

[Install]
WantedBy=multi-user.target


이후 아래 명령어로 활성화 해주면 끝.



sudo systemctl daemon-reload
sudo systemctl enable rfcomm # 자동실행 활성화
sudo systemctl start rfcomm # 시작



4. Mac 에서 연결

시스템 환경설정 - Bluetooth 에서 검색해서 연결할 수 있다.

일단 연결하면 기기 등록 후 잠깐 연결됨 상태이다가 바로 연결 안 됨 상태로 바뀔텐데 상관없음.



ls /dev/cu.*
(out)/dev/cu.MALS    /dev/cu.SOC    /dev/cu.Bluetooth-Incoming-Port
(out)/dev/cu.[hostname]-SerialPort


이렇게 /dev/cu.[hostname]-SerialPort 장치가 추가되어 있다. 추가가 안되어있다면 SP profile 이 제대로 추가가 안된 상태임.


이 장치를 열면 되는데, screen 으로 열 수 있다.


screen /dev/cu.[hostname]-SerialPort 115200


왜 그런건진 잘 모르겠는데, 이 상태에선 일부 출력(ssh 로그인이라던가..)이 client 의 쉘이 아니라, rfcomm을 실행한 쉘에 출력이 된다.

hyphen 옵션을 주고 다시 로그인해주면 해결됨.

su pi -


윈도우 사이즈도 제대로 반영이 안된다는 것 같은데, 이 경우에는 ssh localhost 로 해결된다고.



5. 다른 장치에서 연결

알아서 블루투스 시리얼 연결을 시도해보자... 일반적으로 많이 하는 SPP 연결방법과 동일해서 레퍼런스가 많을 듯.


윈도우는 모르겠고, 안드로이드에서는 관련 앱이 많을 것이고, iOS 에서는 안되는 것으로 안다.


SPP 말고 다른 프로파일로 어찌 만들어본다면 가능할 것 같긴 한데.. 일단 나는 맥에서만 연결이 되면 되기 때문에 나머진 생략.


참고

https://www.reddit.com/r/raspberry_pi/comments/6nchaj/guide_how_to_establish_bluetooth_serial/

워낙 잘못된 방법이 소개된 글이 많아 고생을 하여 작성.

Raspberry PI Zero W, Jessie 기준이다.


TX, RX 핀은 구글에 검색하면 이미지가 많이 나오니 핀 배열을 참고하자.


검색을 해보면 텍스트 파일을 수정하거나 데몬을 끄고 켜는 등의 작업이 많은데 다 필요없다.


$ sudo raspi-config


Interfacing Options

-> Serial

-> Would you like a login shell to be accessible over serial? <No>

-> Would you like the serial port hardware to be enabled? <Yes>


이렇게만 해주면 boot 설정 변경 등을 알아서 해주며 재부팅이 필요할 경우 재부팅까지 묻는다.


이 후 /dev/ttyS0 파일스트림을 사용하면 된다. /dev/ttyAMA0 이 아님!


블루투스 데몬이나 시리얼 서비스 등등을 바꿔야한다는 글들이 많지만 다 필요없으니 참고.



Python 에서 시리얼 통신

아래 방법 중 하나로 serial 라이브러리 설치


sudo python -m pip install pyserai
sudo apt install python-serial (Python3 의 경우엔 python3-serial)



import serial
ser = serial.Serial('/dev/ttyS0', 9600, timeout=3)

ser.readline().strip().decode('utf-8')
ser.write(b'TEST\n')
ser.write('TEST\n'.encode('utf-8')


serial 변수 생성 이후 open 하고 싶다면,


ser = serial.Serial(timeout=3)
ser.port = '/dev/ttyS0'
while True:
	try:
		ser.open()
		if ser.is_open: break
		time.sleep(1)
	except: pass



참고

class serial.Serial:
	__init__(port=None, baudrate=9600, bytesize=EIGHTBITS, 
		parity=PARITY_NONE, stopbits=STOPBITS_ONE, timeout=None, 
		xonxoff=False, rtscts=False, write_timeout=None, dsrdtr=False, 
		inter_byte_timeout=None, exclusive=None)


예전에 학교 학생회관에 DID(디지털 정보 디스플레이, Digital Information Display) 느낌으로 라즈베리파이와 모니터로 만들어서 설치한 적이 있었는데,

그 당시엔 pygame 으로 이미지를 순차 디스플레이 하는 방법을 사용했었지만 좀 구린 점이 있었고...

다른 쓸만한 방법을 발견해서 업데이트.


우선 목적은 정해진 이미지들을 순차적으로 전체화면으로 보여주고, 전원이 켜지자마자 바로 이미지를 보여주는 모드로 들어가야함. 그냥 디지털 액자 생각해도 된다.


Raspberry Digital Signage 이라는 커스텀 OS 가 있길래, 이걸 사용하려 했는데 유료 플랜이 아니면 실사용이 어려울 정도로 기능 제약이 있음. chromium 을 사용해서 만들었다는 점에 아이디어를 얻어서 좀더 찾아봤다.


직접 chromium-browser 를 실행하는 방법도 있었지만,, 이래저래 귀찮은 와중에 딱 이런 목적으로 만들어진

FullPageOS (github) 를 발견.


추가적인 나의 상황은, 네트워크가 불안정한 환경. 즉 이미지 수정을 오프라인으로 해줘야한다.

여러가지 방법이 있겠지만, boot 파티션에 남는 약 20MB 정도의 용량을 활용하기로 결정.

boot 파티션을 웹 루트 하위에 심볼릭 링크를 건 다음, php 스크립트로 이미지 목록을 가져와서 뿌려지는 방식을 사용하였다.


1. FullPageOS 설치

당연히 젤 처음해야할 작업.

직접 컴파일할 필요는 없으니 이미지는 http://unofficialpi.org/Distros/FullPageOS/ 여기서 다운.


메모리카드에 만드는 방법은 여러가지 방법이 있으니 알아서 해주자.

Mac 에서 설치디스크 만들기 (Flashing Image)


2. 일단 네트워크가 되는 환경에서 작업!

만든 php 스크립트를 업로드 해야하니... 다른 방법도 있겠지만 그냥 파이를 부팅한 다음에 네트워크에 물리는 방법이 편하다.

ssh 는 기본적으로 활성화이니 무선 네트워크 설정 혹은 유선랜을 물리자. 기본 호스트네임은 fullpageos.local


와이파이 설정은 라즈비언과 조금 다르게 부트파티션에 fullpageos-wpa-supplicant.txt 파일이 있다. 수정해주자.


3. php 스크립트 집어넣고 심볼릭 링크.

fullpageos 에 기본적으로 lighttpd 와 php 등이 설치되어 있다.

/var/www/html 이 기본 루트. 다른거를 굳이 지워줄 필요는 없으니 did 폴더 정도 만들어주자.

그리고 boot 파티션에 images 폴더를 만들고, 이것도 심볼릭 링크 생성.


$ sudo mkdir /var/www/html/did

$ sudo mkdir /boot/images

$ sudo ln -s /boot/images /var/www/html/did/images


(만든 스크립트는 나중에 수정으로 업로드 예정)


4. 실행될 웹주소 수정

/boot/fullpageos.txt 파일을 수정하면 된다. boot 파티션에 있기 때문에 컴퓨터에서 바로 수정도 가능


$ sudo bash -c 'echo "http://localhost/did/" > /boot/fullpageos.txt'


5. 이미지 파일 넣기

컴퓨터에 연결해서 파일을 넣거나, 지금은 네트워크가 연결된 상황이니 /boot/images 에 이미지를 넣어주자.


6. 재부팅

왠지 서비스를 재시작하는 방법이 있을 것 같지만, 잘 모르겠으니 그냥 재부팅.

한 15초 정도 부팅이 지나면 바로 이미지들이 재생되기 시작한다.


대충 jquery 로 짜면서 fade out 효과를 줬는데.. 조금 버벅인다ㅠ

인터넷 연결이 상시되는 환경이면 애초에 온라인 상의 웹에 바로 물리고 주기적으로 새로고침되게 짜는 것도 좋다.

라즈베리파이3 기준  bluez 는 기본으로 설치가 되어있는 듯.


파이썬 라이브러리 설치

$ apt install python-bluez

..는 python2 밖에 안된다.


$ sudo apt install python3-dev libbluetooth-dev

$ sudo pip3 install pybluez



iBeacon 스캔

몇가지 예제들이 있던데, 내가 좀 수정함


https://github.com/iolate/rasp-ble-scanner



(작성 중...)

어차피 SSH 연결해서 쓸텐데, 첫 연결시에 모니터와 키보드 마우스를 연결해야하는게 너무 귀찮고 번거로웠다.


headless 설치법을 발견해서 정리.


1. SSH 활성화

컴퓨터에서, 라즈베리파이 부트 파티션 루트에 ssh 파일을 생성


2. 와이파이 연결 설정

마찬가지로 루트에 wpa_supplicant.conf 파일 생성 후 아래 내용 입력

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
	ssid="<ssid>"
	psk="<password>"
}


3. SSH 연결

pi@raspberrypi.local 로 ssh 연결 시도.

비밀번호는 raspberry

passwd


hostname 변경

그냥 raspi-config 로 바꾸는게 낫다


sudo raspi-config

 -> 2 Network Options - N1 Hostname


timezone 변경

sudo timedatectl set-timezone Asia/Seoul



99. (내가 편할려고 쓰는) 기타


apt 리포지토리 변경

/etc/apt/sources.list


deb http://ftp.kaist.ac.kr/raspbian/raspbian/ stretch main contrib non-free rpi


apt 기본


sudo apt update
sudo apt upgrade

sudo apt install vim screen


Kodi 설치

sudo apt install kodi


아두이노로 인터넷 연결을 사용하고 싶었으나, 학교 무선망은 기업용 WPA2 였고, 이는 OS 레벨단의, 잘 만들어진, 인증이 없으면 사용하기 힘들다는 글들만...


가능한 모듈이 있다고 한들 그 가격이 비쌀것이기에 결국 라즈베리파이로 눈을 돌렸다.


라즈베리파이에서도 연결하는게 쉽진 않았지만 여튼...


설정법이 워낙 다양하겠지만, 우리학교(UNIST)에선 이렇게 가능했다.


참고로 우리 학교 공용망에 대해 간략히 설명하자면

SSID: WUNIST_AAA

보안종류: WPA2 Enterprise

암호화: AES

네트워크 인증 방법: PEAP

EAP 인증 방법: MSCHAP v2

*서버 인증서 유효성 검사 하지 않음


1. wpa_supplicant 설정

우선

/etc/wpa_supplicant/wpa_supplicant.conf

이 파일의 내용을 수정한다.



ssid 는 알거고,

key_mgmt 는 개인용이 WPA-PSK / 기업용이 WPA-EAP

proto 랑 pairwise 는 아래 표 참고

 

WPA1 

WPA2 

proto 

WPA 

RSN 

pairwise

TKIP

CCMP 

identity 랑 password 는 인증정보 알아서 입력해주면 되고,

scan_ssid / eap / phase1 / phase2 등도 위와 같이 입력해주면 된다.


뭐 없어도 되는 값들이 있을 수 있지만, 그냥 저 상태로 잘 되길래 더이상 터치 안했다.


보통 ca_cert 값에, pem 파일을 넣을텐데, 위에 적었듯이, 서버 인증서 유효성 검사를 하지 않을 경우 생략하면 된다.



2. 설정 확인

설정 및 인증이 잘 되는지 확인해보려면 아래와 같은 명령어를 사용한다.

우선 네트워크 연결을 꺼주고..

# ifdown wlan0

우리가 만든 설정파일로 연결을 시도한다.

# wpa_supplicant -Dwext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf

(혹시나 네트워크 이름이 wlan0 이 아닐경우 바꿔주자.)


참고로 -B 옵션은 백그라운드. 밑에선 쓴다.


로그를 읽어보면 '아 안됐구나..' / '어 된건가?'

하는 감이 온다.(귀찮)



3. network interface 설정

/etc/network/interfaces 를 아래와 같이 수정해준다.


lo, eth0 인터페이스들은 알아서 하고,



이렇게 입력해준다.


4. 연결하기

# ifdown wlan0

# ifup wlan0


을 한 후, 로그에서 DHCP 로 아이피까지 잘 받아오면 성공.


나의 경우 2번에 한번 꼴로 잡는 것 같은데, 왜그런진 잘 모르겠다.

재부팅시마다 잘 잡아야 할텐데...;;;


그냥 시간이 좀 걸리는 것 같기도 하고....



참고 URL

http://weworkweplay.com/play/automatically-connect-a-raspberry-pi-to-a-wifi-network/

https://www.raspberrypi.org/forums/viewtopic.php?p=353961

+ Recent posts