최근에 위즈넷 아카데미에서 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
[0,186]
[OK]
disconnecting.
LED is OFF
//////////////////////////////////////////////////////////////////
위에서 마지막에 멈춰버리고, 플랫폼에서의 명령 전달이 안되는데요.
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;
}
////////////////////////////////////