코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-08-11 14:25:32
WiFi(Wireless Fidelity)는 무선접속장치가 설치된 곳에서 전파나 적외선 전송방식을 이용하여 일정 거리 안에서 무선 인터넷을 할 수 있는 근거리 통신망을 지칭하는 기술입니다.
근래에 들어서 선없이 인터넷이나 상호간 통신이 가능하다는 장점때문에 게임기, 프린터, TV등 다양한 주변기기들에서도 와이파이가 지원되고 있습니다.
사진 출처 : http://www.kuccblog.net/477
NO | 부품명 | 수량 | 상세설명 |
1 | 아두이노 우노 R3 | 1 | 아두이노 |
2 | 아두이노 WIFI 실드 | 1 | WI-FI 실드 |
부품명 | 아두이노 우노 R3 | 아두이노 WI-FI 실드 |
파트 |
아두이노 우노 R3 기준으로 아두이노 실드를 바로 꽂을 수 있습니다. 각 핀에 맞게 꼽아 주시면 됩니다.
#include <WiFi.h>
char ssid[] = "AndroidHotspot6971"; // 연결하실 와이파이 이름
char pass[] = "00001111"; // 네트워크 보안키
int status = WL_IDLE_STATUS;
void setup() {
Serial.begin(9600);
while (!Serial) {
; // 시리얼 포트에 연결될 때까지 기다림(아두이노 레오나르도만 쓰면 됨)
}
// 현재 아두이노에 연결된 실드를 확인
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// 와이파이 실드가 아닐 경우
while(true);
}
// 와이파이에 연결 시도
while ( status != WL_CONNECTED) { // 연결이 될 때 까지 반복
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
// WPA/WAP2 네트워크에 연결
status = WiFi.begin(ssid, pass);
delay(10000);
}
// 연결에 성공했으면 연결확인 메시지와 연결된 네트워크 정보를 띄운다.
Serial.print("You're connected to the network");
printCurrentNet();
printWifiData();
}
void loop() {
// 10초마다 네트워크 연결 확인을 해준다.
delay(10000);
printCurrentNet();
}
void printWifiData() {
// WI-FI 실드의 IP를 출력한다.
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
Serial.println(ip);
// MAC어드레스를 출력한다.
byte mac[6];
WiFi.macAddress(mac);
Serial.print("MAC address: ");
Serial.print(mac[5],HEX);
Serial.print(":");
Serial.print(mac[4],HEX);
Serial.print(":");
Serial.print(mac[3],HEX);
Serial.print(":");
Serial.print(mac[2],HEX);
Serial.print(":");
Serial.print(mac[1],HEX);
Serial.print(":");
Serial.println(mac[0],HEX);
}
void printCurrentNet() {
// 접속하려는 네트워크의 SSID를 출력한다.
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// 접속하려는 router의 MAC 주소를 출력한다.
byte bssid[6];
WiFi.BSSID(bssid);
Serial.print("BSSID: ");
Serial.print(bssid[5],HEX);
Serial.print(":");
Serial.print(bssid[4],HEX);
Serial.print(":");
Serial.print(bssid[3],HEX);
Serial.print(":");
Serial.print(bssid[2],HEX);
Serial.print(":");
Serial.print(bssid[1],HEX);
Serial.print(":");
Serial.println(bssid[0],HEX);
// 수신 신호 강도를 출력한다.
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.println(rssi);
// 암호화 타입을 출력한다.
byte encryption = WiFi.encryptionType();
Serial.print("Encryption Type:");
Serial.println(encryption,HEX);
Serial.println();
}
* 이 코드는 스케치를 사용하여 작성 / 업로드 합니다. 스케치에 대한 사용법은 링크를 참고하시기 바랍니다.
이 소스는 아두이노에서 직접 제공하는 예제 ConnectWithWPA 의 소스입니다. (파일 -> 예제 -> WiFi -> ConnectWithWPA)
와이파이 연결 시 보안 타입에 WPA / WPA2 일 경우에만 밑에 소스를 사용할 수 있습니다. (Web 방식으로 쓰시는 경우는 네트워크 연결 시 keyindex를 추가하셔야 합니다.)
(무선 네트워크를 쓰시는 경우에는 제어판 -> 네트워크 및 인터넷 -> 네트워크 및 공유 센터 -> 무선 네트워크 관리 로 들어 가시면 보안 유형이 나옵니다.)
#include <WiFi.h> char ssid[] = "AndroidHotspot6971"; // 연결하실 와이파이 이름 char pass[] = "00001111"; // 네트워크 보안키 int status = WL_IDLE_STATUS;
WI-FI 실드를 사용하기 위해서는 WiFi 라이브러리를 사용해야 합니다. (사용하지 않았을 경우 컴파일이 되지 않습니다.)
ssid 에는 와이파이 이름, pass에는 해당 와이파이 네트워크 보안키를 적어 줍니다. (자신이 연결하고 싶은 와이파이에 이름과 보안키)
(현재 적혀 있는 ssid와 pass는 제가 쓰고 있는 와이파이 이름과 보안키입니다. 이것을 사용자에게 맞게 바꿔주셔야 연결이 됩니다. 맞지 않으면 Attempting to connect to WPA SSID: 와이파이 이름이 계속 뜨게 됩니다.)
WAP 대신 Web 형식을 사용하시는 경우 여기서 keyindex를 같이 선언해 줍니다.(int 타입)
Serial.begin(9600); while (!Serial) { ; // 시리얼 포트에 연결될 때까지 기다림(아두이노 레오나르도만 쓰면 됨) } // 현재 아두이노에 연결된 실드를 확인 if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); // 와이파이 실드가 아닐 경우 while(true); }
while(!Serial)문을 사용하여 시리얼에 연결될 때까지 계속 대기합니다.(이건 아두이노 레오나르도만 쓰면 됩니다.).
그 후 아두이노에 연결된 실드를 확인하여 WIFI 실드가 연결될 때까지 계속 대기합니다.
// 와이파이에 연결 시도 while ( status != WL_CONNECTED) { // 연결이될 때까지 반복 Serial.print("Attempting to connect to WPA SSID: "); Serial.println(ssid); // WPA/WAP2 네트워크에 연결 status = WiFi.begin(ssid, pass); delay(10000); } // 연결에 성공했으면 연결확인 메시지와 연결된 네트워크 정보를 띄운다. Serial.print("You're connected to the network"); printCurrentNet(); printWifiData();
실드를 확인했으면 그다음으로는 WIFI에 연결을 해야 합니다. 연결 시도 중입니다 라는 메시지를 띄우고 그 후 WiFi.begin(ssid,pass)를 이용하여 접속 시도를 합니다. 연결이 성공할 때까지 계속 반복해 줍니다.
(WPA 대신 Web 타입을 사용하시는 경우 WiFi.begin(ssid, keyindex, pass); 이렇게 사용하셔야 합니다.)
연결이 성공했으면 성공 확인 메시지를 띄우고 연결된 네트워크의 데이터를 출력해 줍니다.
void loop() { // 10초마다 네트워크 연결을 확인해준다. delay(10000); printCurrentNet(); }
연결이 성공 한 후, 10초마다 네트워크 연결을 확인해 준다.
void printWifiData() { // WI-FI 실드의 IP를 출력한다. IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); Serial.println(ip); // MAC어드레스를 출력한다. byte mac[6]; WiFi.macAddress(mac); Serial.print("MAC address: "); Serial.print(mac[5],HEX); Serial.print(":"); Serial.print(mac[4],HEX); Serial.print(":"); Serial.print(mac[3],HEX); Serial.print(":"); Serial.print(mac[2],HEX); Serial.print(":"); Serial.print(mac[1],HEX); Serial.print(":"); Serial.println(mac[0],HEX);
printWifiData() 함수는 아두이노와 연결된 WIFI 실드에 대한 IP 정보와 MAC 어드레스를 출력하는 함수입니다.
void printCurrentNet() { // 접속하려는 네트워크의 SSID를 출력한다. Serial.print("SSID: "); Serial.println(WiFi.SSID()); // 접속하려는 router의 MAC 주소를 출력한다. byte bssid[6]; WiFi.BSSID(bssid); Serial.print("BSSID: "); Serial.print(bssid[5],HEX); Serial.print(":"); Serial.print(bssid[4],HEX); Serial.print(":"); Serial.print(bssid[3],HEX); Serial.print(":"); Serial.print(bssid[2],HEX); Serial.print(":"); Serial.print(bssid[1],HEX); Serial.print(":"); Serial.println(bssid[0],HEX); // 수신 신호 강도를 출력한다. long rssi = WiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.println(rssi); // 암호화 타입을 출력한다. byte encryption = WiFi.encryptionType(); Serial.print("Encryption Type:"); Serial.println(encryption,HEX); Serial.println(); }
printCurrentNet() 함수는 현재 연결된 네트워크의 이름과 라우터의 MAC주소, 연결 수신 신호 강도와 암호화 타입을 출력 해 주는 함수입니다.
(수신 신호 강도와 암호화 타입은 위에 시작 전 개념 이해하기에서 자료를 링크했습니다. 궁금하신 점 있으시면 링크 확인해 주세요)
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!