2015/01/24 19:36

위즈네트 WizFi250-EVB 체험기 - 8 (미완성 작품) ㄴ WizFi250 체험단

계획한 작품을 만들지는 못했지만, 포스팅은 마무리해야할 것 같아 미완의 작품을 포스팅합니다.

이전 포스팅에서 계획한대로 Google docs와 Pushingbox를 사용한 티미님의 강좌를 참고하기로 했습니다.

티미님의 강좌 링크 : http://cafe.naver.com/arduinostory/21230

 

저의 프로젝트는 지하철에서 광고를 보다가 문뜩 떠올랐습니다.

온라인 배너, YouTube 광고 등등.. 온라인상에서의 광고들은 고객이 광고를 시청하는 시간대, 시청시간, 광고 클릭 빈도 등등 많은 정보를 얻을 수 있고, 그에 대한 피드백을 할 수 있습니다.

그런데, 오프라인 광고들은 유동인구 정도의 포괄적인 정보로  세부적인 정보를 유추하는 방법 밖에 없을 것이라고 생각했습니다.

그래서 광고판에 센서와 통신모듈을 설치해서 이러한 정보를 수집할 수 있다면 더욱 효율적인 광고를 할 수 있을 것이라고 생각합니다.

 

그래서 제가 한번 달아보려고 했습니다..

PIR 센서로 광고 앞에 사람이 머물러 있는 시간대와 얼마나 오래 머물러 있는지를 판단해서 Spreadsheets에 DB화 하는 것이 목표였습니다.

그 과정은 아래와 같습니다.

 

flow_a

 

왜 아두이노에서 spreadsheets로 바로 가지 않고 저런 과정을 거치는지는 티미님의 강좌를 보시면 알 수 있습니다

.scheboard

PIR 센서가 part list에 없어서.. 적외선 센서로 넣어놨습니다.

사진에는 TEST를 위해 PIR 대신 TACT스위치로 해놓았습니다.

 

하지만 지금 현재 상황은..

flow_b

 

막혔습니다..ㅎㅎ

 

pushingbox의 wizfi250 예제는 GET방식의 예제만 나와있고, 티미님의 예제는 이더넷을 사용하고 있습니다.

그래서 POST하는데 애를 먹고 있습니다.



소스코드



#include <Arduino.h>
#include <SPI.h>
#include <IPAddress.h>
#include "WizFi250.h"
#include "WizFi250_tcp_client.h"


#define SSID "iptime"
#define KEY ""
#define AUTH "OPEN"

#define  REMOTE_PORT    80
#define  LOCAL_PORT     5004
#define sensorPin 6 ////센서핀
#define ledPin 8 ////LED핀


int itvTime=5*10; //// interval, 이 시간 이상 광고를 보고 있으면 시청시간을 전송함(약 5초, loop delay를 100으로 해서)
boolean cState=false;
boolean pState=false;
unsigned int count=0;

char server[] = "api.pushingbox.com";
char DEVID1[]= "디바이스ID";

WizFi250  wizfi250;
WizFi250_TCP_Client myClient(server, REMOTE_PORT);

boolean Wifi_setup = false;
boolean lastConnected = false;

void sendPushingbox(int sec);
//The setup function is called once at startup of the sketch
void setup()
{
// Add your initialization code here
Serial.begin(9600);
Serial.println("\r\nSerial Init");
        
        pinMode(sensorPin,INPUT_PULLUP);
        pinMode(ledPin,OUTPUT);

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

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

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

// The loop function is called in an endless loop
void loop()
{
//Add your repeated code here
uint8_t retval=0, len=0;
uint8_t ch;

        cState=digitalRead(sensorPin); //// PIR 센서의 상태를 읽습니다.
if( Wifi_setup )
{
wizfi250.RcvPacket();

if( myClient.available() )
{
ch = myClient.recv();
if(ch != NULL)
Serial.print((char)ch);
}
else
{

                                if(cState==true) count++;
                                else if(cState==false && pState==true && count>itvTime){
                                        digitalWrite(ledPin,HIGH);
                                 if(myClient.connect()==RET_OK){
                                              Serial.println("connect server");

                                              sendPushingbox(count); ////itvTime 이상 광고를 보고 떠나면, 시간을 인수로 보냄
                                              count=0;
                                         }else Serial.println("connection failed");
                                }
                                else count=0;
                                
                               if( !myClient.getIsConnected() && lastConnected ){
      Serial.println();
              Serial.println("disconnecting.");
              myClient.stop();
        }
                                lastConnected = myClient.getIsConnected();
                   }

}
                   
        delay(100);
        digitalWrite(ledPin,LOW);
        pState=cState;
}

        

void sendPushingbox(int count){
 
     String Txbuf;
     String Data;
      
       Data="";
       Data="&seconds=";
       Data+=count/10;
 
       Txbuf = "";
       Txbuf+="POST /pushingbox?devid=";
       Txbuf+=DEVID1;
       Txbuf+=Data;
       Txbuf+=" HTTP/1.1\r\n";
       Txbuf+="Host: ";
       Txbuf+=server;
       Txbuf+="\r\nContent-Length:";
       Txbuf+=Data.length();
      
       Txbuf+="\r\nUser-Agent: Arduino";
       Txbuf+="\r\n\r\n";
      
       Serial.println((String)Txbuf);
       myClient.send((String)Txbuf);

}



sendPushingbox에서 문제가 발생합니다..
예제에는 Content-Length가 없어도 동작하는것 같은데 저는 아래같이 떴습니다.
woCL


HTTP/1.1 400 Content Length Required.. 그래서 Content Length를 추가했습니다.

덧글

  • 꿈이뭘까 2015/01/24 19:39 # 답글

    이 문제는 USB 케이블이 잘못된 것으로 확인되었습니다.
    케이블을 새로 사서 해보니 정상동작했습니다.
  • 알게뭐야 2015/02/08 02:54 # 삭제 답글

    같은시기 지원했던터라... 이해가가요...
    어려워서 진행하기가 버거웠던 기억이나네요..
    그래서 저는 끝난 지금까지 천천히 진행하고있어요ㅎ
댓글 입력 영역