공유기 없이 라즈베리파이와 주변장치 연결하기(ap mode)
SSH로 접속하고 로그인하는 과정은 생략하도록 하겠습니다.
1. 업데이트 & 업그레이드
$sudo apt-get update $sudo apt-get upgrade -y
2. 패키지 설치
$sudo apt-get install hostapd -y
$sudo apt-get install dnsmasq -y
여기서 hostapd는 wifi ap mode로 설정할 때 사용하며
dnsmasq 는 DHCP나 DNS를 설정할 때 사용합니다.
3. 자동실행 설정
$sudo systemctl disable hostapd
$sudo systemctl disable dnsmasq
여기서 바로 넘어가면 설정이 되지 않은 채로 실행되므로 이를 정지시켜 줍니다.
4. hostapd 설정
$sudo nano /etc/dhcpcd.conf
맨 밑에 추가해 주면 됩니다.
interface=wlan0
driver=nl80211
ssid=RPI3wifi
hw_mode=g
channel=6
wmm_enabled=0
macaddr_acl=0
auth_algs=1
wpa=2
wpa_passphrase=1234567890
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
대충 보자면 wlan0을 설정하고 ssid를 설정하고 뭐라 뭐라 돼있는데 솔직히 2개만 신경 썼습니다.
ssid랑 wpa_passphrase
ssid는 우리가 와이파이를 켰을 때 보이는 이름이며
wpa_passphrase는 비밀번호입니다.
다른 건 드라이버나 채널 암호화 방식 등등입니다.
완료되었다면 저장 후 종료를 해줍니다.
nano 에디터 기준으로 Ctrl + x, y, enter를 하면 저장 후 종료하게 됩니다.
$sudo nano /etc/default/hostapd
#demon_conf=""
부분을
demon_conf="/etc/hostapd/hostapd.conf"
로 바꾸어 줍니다.
5. dnsmasq 설정
$sudo nano /etc/dnsmasq.conf
#Pi3Hotspot Config
#stop DNSmasq from using resolv.conf
no-resolv
#Interface to use
interface=wlan0
bind-interfaces
dhcp-range=10.0.0.3,10.0.0.20,12h
저장-종료를 해줍니다.
6. network 설정
$sudo nano /etc/network/interfaces
allow-hotplug wlan0
iface wlan0
inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
3번째 줄에 #을 추가하여 아래와 같이 바꿔줍니다.
allow-hotplug wlan0 iface wlan0 inet manual # wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
이제 스크립트를 수정해 주어야 합니다.
왜 수정하느냐?
라즈베리파이를 켰을 때 일일이 연결해서(이더넷같은 방법으로) ap mode 켜주고 할 순 없으니까요
7. rc.local 설정
rc.local은 라즈베리파이가 부팅될 대 실행되는 프로그램이나 커맨드에 관한 부분입니다. 자세한 내용은 아래 링크를 참조해 주시기 바랍니다.
https://www.raspberrypi.org/documentation/linux/usage/rc-local.md
$sudo nano /etc/rc.local
#!/bin/sh -e
위와 같이 되어있는 맨 윗줄을
#!/bin/bash -e
로 바꾸어 줍니다.
그리고 fi (printf ~~ 바로 아래)와 exit 0 사이에 아래 스크립트를 추가해 줍니다.
#Wifi config - if no prefered Wifi generate a hotspot
#RPi Network Conf Bootstrapper
createAdHocNetwork()
{
echo "Creating RPI Hotspot network"
ifconfig wlan0 down
ifconfig wlan0 10.0.0.5 netmask 255.255.255.0 up
service dnsmasq start
service hostapd start
echo " "
echo "Hotspot network created"
echo " "
}
echo "================================="
echo "RPi Network Conf Bootstrapper"
echo "================================="
echo "Scanning for known WiFi networks"
ssids=( 'mySSID1','mySSID2' )
connected=false
for ssid in "${ssids[@]}"
do
echo " "
echo "checking if ssid available:" $ssid
echo " "
if iwlist wlan0 scan | grep $ssid > /dev/null
then
echo "First WiFi in range has SSID:" $ssid
echo "Starting supplicant for WPA/WPA2"
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf > /dev/null 2>&1
echo "Obtaining IP from DHCP"
if dhclient -1 wlan0
then
echo "Connected to WiFi"
connected=true
break
else
echo "DHCP server did not respond with an IP lease (DHCPOFFER)"
wpa_cli terminate
break
fi
else
echo "Not in range, WiFi with SSID:" $ssid
fi
done
if ! $connected; then
createAdHocNetwork
fi
제일 처음 고쳤던 sh를 bash로 바꾸는 부분을 잘 몰라서 검색을 해보았습니다.
키워드 : sh vs bash
얻은 링크 : http://stackoverflow.com/questions/5725296/difference-between-sh-and-bash
다음으로 스크립트에 관한 내용입니다.
여기서 신경 쓸 부분은
ssids=( ‘ssid1’, ‘ssid2’ )
부분입니다.
이 부분은 주변에 와이파이를 스캔해본 뒤 일치하는 ssid가 있으면 wpa_supplicant.conf 에 설정되어 있는 데로 연결을 시도하며 그게 아니라면 ap mode로 진입합니다.
위처럼 ‘,’를 이용하여 여러 개를 넣을 수 있으며 1개만 넣어주어도 됩니다.
일치하는 ssid가 있으면 ap mode로 바뀌지 않으므로 일부러 틀린 ssid를 넣어 와이파이가 공유기에 접속하지 못하게 하였습니다.
저장-종료 후 재부팅을 해줍니다.
$sudo reboot
이까지 되었다면 라즈베리파이를 ap mode로 사용할 수 있습니다.
8. 추가사항(필수)
이대로 진행해보니 에러가 하나 발생하였습니다.
pip를 설치하려는데 에러가 나길래
$ping google.com
을 해보니 알 수 없는 주소라는 에러가 출력되었습니다.
그런데
$ping 8.8.8.8
은 잘됩니다.
dns 문제인가 싶어 dnsmasq를 먼저 수정해 보았습니다.
하지만 뭘 수정해야 할지 모르므로 구글링
키워드 : dnsmasq raspberry pi
얻은 링크 : https://www.raspberrypi.org/forums/viewtopic.php?t=46154
중간에 server=8.8.8.8 이라는 부분이 보였습니다.
이를 dnsmasq.conf에 추가해 줍니다.
# /etc/dnsmasq.conf
server=8.8.8.8
를 맨 마지막에 추가해 주었습니다.
저장-종료 후 재부팅을 해줍니다.
$sudo reboot
설정이 잘 되었는지 확인
$ping google.com
잘 되는군요.
여기까지 이번 글을 마치도록 하겠습니다.
다음 시간에는 Django 설치법으로 뵙겠습니다.
참고자료
이미지 출처 : 사라졌다.
'개발자 > Raspberry Pi' 카테고리의 다른 글
강력한 시리얼 통신 프로그램 UART, Serial to USB 코드 (2) | 2018.02.09 |
---|---|
삼바서버 접속과 설치 방법 - 라즈베리파이 원격 연결 (2) | 2017.06.02 |
libpam-chksshpwd:armhf 에러 메시지 raspberry pi3 (1) | 2017.03.27 |
wiringPi GPIO 설정 이렇게 초기화 된다. (0) | 2017.03.26 |
라즈베리 파이에서 node js 로 온습도 센서 dht22에서 데이터 읽어오기 (4) | 2017.03.14 |
라즈베리파이와 MCP3208 ADC 컨버터 사용하기 - 회로와 소스코드 (30) | 2017.02.12 |
라즈베리 파이 LCD display C 언어 (0) | 2017.02.10 |
라즈베리 파이 Serial 프로그램 예제와 설명 (0) | 2017.02.06 |
더욱 좋은 정보를 제공하겠습니다.~ ^^