위즈네트 아카데미

OPEN PROJECT

오픈 프로젝트

쉴드체험단 (1기) [체험단 wizfi-shield 03] 와이파이 잡기

자랑쟁이 2014.12.01 09:00 조회 수 : 28


지난 글에 이어 세번째 글입니다.


기본제공되는 샘플코드중에 WizFiWebClientTest를 가지고 접속이 잘되는지
테스트를 해 보았습니다.


코드는 다음과 같습니다.


/******************************************************************
WizFiShield Web Client Test ExampleThis sketch connect to a website(http://www.google.com) using WizFi ShieldCircuit:
WizFiShield connected to Arduino via SPIRST: pin 2  // Output
DRDY: pin 3  // Input
CSB: pin 4  // output


 MOSI: pin 11  // output
MISO: pin 12  // input
SCK: pin 13  // out


 Created 18 Sep. 2012
by James YS Kim  (jameskim@wiznet.co.kr, javakys@gmail.com)Modified 27 May. 2013
by Jinbuhm Kim  (jbkim@wiznet.co.kr, jinbuhm.kim@gmail.com)


*****************************************************************/


// WizFiShield communicates using SPI, so include the SPI library:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <SPI.h>
#include <WizFi2x0.h>
#include <WizFiClient.h>
#include <TimerOne.h>


#define SSID    ""        // SSID of your AP
#define Key     ""  // Key or Passphrase
// Wi-Fi security option (NO_SECURITY, WEP_SECURITY, WPA_SECURITY, WPA2PSK_SECURITY)
//#define Security        WPA_SECURITY


WizFi2x0Class myWizFi;
WizFiClient myClient;
TimeoutClass ConnectInterval;


boolean Wifi_setup = false;


///////////////////////////////
// 1msec Timer
void Timer1_ISR()
{
myWizFi.ReplyCheckTimer.CheckIsTimeout();
}
//
//////////////////////////////


void setup() {
byte retval;Serial.begin(9600);
Serial.println("rnSerial Init");// initalize WizFi2x0 module:
myWizFi.begin();ConnectInterval.init();


  // Socket Creation with Server IP address and Server Port num
myClient =  WizFiClient("google.com", 80);// Timer1 Initialize
Timer1.initialize(1000); // 1msec
Timer1.attachInterrupt(Timer1_ISR);myWizFi.SendSync();
myWizFi.ReplyCheckTimer.TimerStart(3000);Serial.println("Send Sync data");while(1)
{
if(myWizFi.CheckSyncReply())
{
myWizFi.ReplyCheckTimer.TimerStop();
Serial.println("Rcvd Sync data");
break;
}
if(myWizFi.ReplyCheckTimer.GetIsTimeout())
{
Serial.println("Rcving Sync Timeout!!");
// Nothing to do forever;
for(;;)
;
}
}
////////////////////////////////////////////////////////////////////////////
// AP association
while(1)
{
retval = myWizFi.associate(SSID, Key, Security, true);

if(retval == 1){
Serial.println("AP association Success");
Wifi_setup = true;
break;
}else{
Serial.println("AP association Failed");
}
}

}



void loop()
{
uint8_t retval;
byte rcvdBuf[129];memset(rcvdBuf, 0, 129);if(Wifi_setup)
{
myWizFi.RcvPacket();if(myClient.available()){
if(myClient.read(rcvdBuf))
{
Serial.print((char *)rcvdBuf);
}
}else{
retval = myClient.connect();
if(retval == 1)
{
Serial.println("Connected! ");
myClient.write((byte *)"GET /search?q=WizFi210 HTTP/1.0rnrn");
}else
Serial.println("Connection Failed");
}
}
}


위 코드에서 아래 세줄에 해당하는 부분만 입력하면 되는데,


#define SSID    ""        // SSID of your AP
#define Key     ""  // Key or Passphrase
// Wi-Fi security option (NO_SECURITY, WEP_SECURITY, WPA_SECURITY, WPA2PSK_SECURITY)
//#define Security        WPA_SECURITY


SSID는 지금 접속할 AP의 이름이고...
key는 암호입니다. 그래서 SSID는 영문으로 되어 있는것이 사용하기 더 편합니다.


그리고 Security의 경우는 가장 많이 사용하는 iptime 제품의 경우 기본이 WPA2PSK -AES로 설정이 되어 있는데,
이경우 전처리기에서 Security를 WPA2PSK_SECURITY로 바꾸고 앞에 주석처리를 해제 하면,
바로 작동이 됩니다.


와이파이를 잡는 중에 매우 특이한 현상을 발견했는데, iptime 공유기의 문제인지,
멀티 와이파이를 하나더 잡으면 문제없이 작동하는데, 기존의 와이파이에 접속하면
접속이 안되더군요...


 192_168_0_1_20141129_074024


사진에서 보면 scod와 test가 있는데, 이 실험시 test를 잡은게 아니라 scod를 잡은겁니다. 즉 scod를 잡고 있는 상태에서 test를 만들면, 연결이 되고 test를 없애면 연결이 안되는 특이한 현상이...