Wizfi 250 질문입니다

최근에 위즈넷 아카데미에서 wizfi 250 수업을 들었습니다.

wizfi 250을 아두이노 메가에 연결한 뒤, ubidots 회사의 IoT 플랫폼을 이용해서

센서값을 받거나 LED를 제어하는 실습을 했었는데요.

2015년 6월쯤에 wizfi 250 EVB V1.0을 하나 무료로 받았었는데, 이 보드를 가지고 집에서 똑같이 해보니까

잘 안되어서 질문을 드립니다.

WiFi의 SSID랑 Password, 그리고 ubidots 플랫폼에서 token, var ID는 다시 잘 설정했고요.
LED, 센서 연결도 다시 잘 했습니다.

wizfi250+아두이노 우노 + ubidots 플랫폼 강의자료를 다시 보면서 했는데요.

시리얼 모니터 창을 열어서 확인하니, 와이파이에 접속까지는 되는데, 중간에 멈춰버립니다.

아래는 시리얼 모니터 메세지 입니다.

/////////////////////////////////////////////////////////

Serial Init

===== SPI Send =====
AT

==================

===== SPI Recv =====
WizFi250 Version 1.0.3.1 (WIZnet Co.Ltd)
AT
[OK]

==================

===== SPI Send =====
AT+MECHO=0

==================

===== SPI Recv =====
AT+MECHO=0
[OK]

==================

AT+WNET=1

[OK]

AT+WLEAVE

[OK]

AT+WSET=0,olleh_WiFi_59C6

[OK]

AT+WSEC=0,0000000366

[OK]

AT+WJOIN

Joining : olleh_WiFi_59C6
Successfully joined : olleh_WiFi_59C6
[Link-Up Event]
IP Addr : 172.30.1.2
Gateway : 172.30.1.254
[OK]

AT+FDNS=thing.ubidots.com,1000

50.23.124.68
[OK]

AT+SCON=O,TCN,50.23.124.68,80,0

[OK]
[CONNECT 0]send GET

AT+SSEND=0,0.0.0.0,80,186

[0,186]
[OK]
disconnecting.
LED is OFF

AT+FDNS=thing.ubidots.com,1000

//////////////////////////////////////////////////////////////////

위에서 마지막에 멈춰버리고, 플랫폼에서의 명령 전달이 안되는데요.

AT+FDNS=thing.ubidots.com,1000

무엇이 문제인지 좀 알려주셨으면 합니다.(네트워크 쪽은 잘 모르니 쉽게 설명 부탁드립니다.)

wizfi250이 작년 6월때 받은 보드이고, 혹시 최근 위즈넷에서의 실습때는 wizfi250이 다른 버전인지요?

그리고 혹시나 해서 아두이노 우노에 업로드한 코드도 붙입니다.

////////////////////////////////////////////////////
#include <Arduino.h>
#include <SPI.h>
#include <IPAddress.h>
#include “WizFi250.h”
#include “WizFi250_tcp_client.h”

//Ubidots information
#define TOKEN “” //
#define VARID_LED_Red “” //

//Parse JSON
#define PARSE “"value"”
#define ENDPARSE “,”

//Wi-Fi information
#define SSID “olleh_WiFi_59C6”
#define KEY “”//
#define AUTH “”

//Hardware Pin status
#define Pin_LED_Red 2

//Server information
char server = “thing.ubidots.com”;
#define REMOTE_PORT 80

//Time to get the LED status
unsigned long lastGetTime = 0;
const unsigned long getInterval = 1 * 1000;

boolean Wifi_setup = false;
boolean lastConnected = false;

int SendMethod;

String rcvbuf;

WizFi250 wizfi250;
WizFi250_TCP_Client myClient(server, REMOTE_PORT);

// function
int postData(String VARID, float data);
int parser_value(String buf);
int getStatus(String VARID);
float getTempC();
char * floatToString(char * outstr, double val, byte precision, byte widthp);

//The setup function is called once at startup of the sketch
void setup()
{
// Add your initialization code here
Serial.begin(115200);
Serial.println(“\r\nSerial Init”);

pinMode(Pin_LED_Red, OUTPUT);   //added
digitalWrite(Pin_LED_Red, LOW);

wizfi250.begin();
wizfi250.setDebugPrint(4);
wizfi250.hw_reset();

wizfi250.sync();
wizfi250.setDhcp();

for(int i = 0; i < 10; i++)		// Try to join 30 times
{
	if( wizfi250.join(SSID, KEY, AUTH) == RET_OK )
	{
		Wifi_setup = true;
		break;
	}
}
SendMethod = 0;

}

// The loop function is called in an endless loop
void loop()
{

if( Wifi_setup )
{
	wizfi250.RcvPacket();

	if( myClient.available() )
	{
		char c = myClient.recv();

		if( c != NULL )
		{
			rcvbuf += c;
		}
	}
	else
	{
		if(!myClient.getIsConnected() && lastConnected )
		{
			//Serial.println(rcvbuf);
			int rcv_value = parser_value(rcvbuf, PARSE);
			Serial.println("disconnecting.");
			myClient.stop();

			digitalWrite(Pin_LED_Red, rcv_value);
			Serial.print("LED is ");
				
			if(rcv_value) 
				Serial.println("ON");
			else 
				Serial.println("OFF");
			
			rcvbuf = "";
		}

		if(!myClient.getIsConnected() && (millis() - lastGetTime > getInterval))
		{
			getStatus(VARID_LED_Red);
		}

		lastConnected = myClient.getIsConnected();
	}
}

}

int getStatus(String VARID)
{

String TxData;

if(myClient.connect() == RET_OK)
{
	Serial.println("send GET");

	TxData =  "GET /api/v1.6/variables/";
	TxData += VARID;
	TxData += " HTTP/1.1\r\n";
	TxData += "Host: things.ubidots.com\r\n";
	TxData += "X-Auth-Token: ";
	TxData += TOKEN;
	TxData += "\r\n";
	TxData += "Content-Type: application/json\r\n";
	TxData += "Connection: close\r\n";
	TxData += "\r\n\r\n";

	myClient.send((String)TxData);

	lastGetTime = millis();

	return true;
}

return false;

}

int parser_value(String buf, String Param)
{
int firstSign;
int secondSign;
int endSign;
String tmpVal;
int value;

firstSign = buf.indexOf(Param);
secondSign = buf.indexOf(':', firstSign);
endSign = buf.indexOf(ENDPARSE, secondSign);

tmpVal = buf.substring(secondSign + 1 , endSign);
tmpVal.trim();
value = tmpVal.toInt();

return value;

}

////////////////////////////////////

안녕하세요

작년 강의에서 나눠드렸던 EVB의 펌웨어는 1.0.3.1입니다.
그리고, 작년 말부터 정식 펌웨어가 1.0.3.3으로 바뀌어 강의용에서도 1.0.3.3을 사용했습니다.

하지만 해당 문제는 펌웨어 버전의 문제는 아닌듯 합니다.

AT+FDNS 명령은, thing.ubidots.com의 IP를 얻어오는 명령입니다.
뒤에 1000 파라메터가 timeout인데, 1000ms 안에 IP를 얻어오지 못하고 있는 것으로 생각됩니다.

char server = “thing.ubidots.com”; 를
IPAddress server (123,123,123,123);
형태로 바꿔주시면, FDNS 명령을 사용하지 않고, 해당 IP로 직접 접속을 시도하게 되니, 사용해보시길 바랍니다.
(123,123,123,123) 대신에 thing.ubidots.com의 IP를 넣어주세요.

//Server information
//char server = “thing.ubidots.com”;
IPAddress server (50,23,124,68);

위와 같이 IP를 직접 넣었는데요.
아래와 같이 시리얼 결과가 나왔습니다.
At+SCON에서 멈췄고, LED제어가 여전히 안되는데요.
좀더 알려주셨으면 합니다.
감사합니다.

///////////////////////////////////////////////////////

Serial Init

===== SPI Send =====
AT

==================

===== SPI Recv =====
WizFi250 Version 1.0.3.1 (WIZnet Co.Ltd)
AT
[OK]

==================

===== SPI Send =====
AT+MECHO=0

==================

===== SPI Recv =====
AT+MECHO=0
[OK]

==================

AT+WNET=1

[OK]

AT+WLEAVE

[OK]

AT+WSET=0,DLAB_office_2.4G

[OK]

AT+WSEC=0,dlab1685

[OK]

AT+WJOIN

Joining : DLAB_office_2.4G
Successfully joined : DLAB_office_2.4G
[Link-Up Event]
IP Addr : 192.168.1.25
Gateway : 192.168.1.1
[OK]

AT+SCON=O,TCN,50.23.124.68,80,0

[OK]
[CONNECT 0]send GET

AT+SSEND=0,50.23.124.68,80,186

[0,186]
[OK]
disconnecting.
LED is OFF

AT+SCON=O,TCN,50.23.124.68,80,,0

////////////////////////////////////////////////////////

안녕하세요

원인을 파악하기에는 정보가 너무 부족하네요…
아두이노 어떤 모델을 사용하시나요?

로그상으로는 서버(thing.ubidots.com)에 커넥션이 제대로 이루어지지 않고 있습니다.
한번은 연결이 되고, 두번째에서 항상 접속이 안되는지…
아니면 가끔 나타나는 현상인지 궁금합니다.
공유기와 연결된 신호 강도가 약할 수 도 있구요…