공유기 없이 라즈베리파이와 주변장치 연결하기(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' 카테고리의 다른 글
| 아두이노 메가 기구도면, 아두이노 기구도면, 아두이노 홀사이즈 (0) | 2018.06.01 |
|---|---|
| 강력한 시리얼 통신 프로그램 UART, Serial to USB 코드 (2) | 2018.02.09 |
| 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 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
캐어랩