티스토리 뷰

Cloud에 센서 정보 저장하기 : Dweet.io


우리는 때때로 센서정보를 받아 자주 확인하고 싶어합니다.

자신이 직접 Server를 구축하여 데이터를 저장하고 관리하는 반면, Cloud 서비스를 이용하기도 합니다. 오늘은 간단한 Cloud 서비스를 이용하려고 하며, 그 중 Dweet.io 를 사용하려고 합니다.


Dweet.io



먼저 Dweet.io의 URL은 다음과 같습니다. 

https://dweet.io/

위 URL로 접속하면 아래와 같은 화면을 볼 수 있으며, 화면의 하단으로 내려가면 Dweet에 대한 소개와 사용법을 확인할 수 있습니다.



자세한 내용은 천천히 둘러보시고, 바로 진행해 보겠습니다. 

우선 Dweeting에 대해 알아보기 위해 상단 메뉴의 [Play] 버튼을 클릭합니다. 

그럼 아래와 같은 화면이 나오게 되는데, 붉은박스가 있는 부분을 클릭합니다.



그러면 아래와 같이 입력란이 나타납니다. 입력란을 채우고, [Try it out!] 을 클릭합니다.

  • thing : 고유한 ID (누군가와 겹치면 문제가 생기겠죠)
  • key : 보안을 위해 사용합니다 (선택)
  • content : thing ID에 입력한 내용물입니다 (우리의 경우 센서 값)

어차피 테스트이기 때문에 간략히 적어보겠습니다. (ID만 잘 찾아주세요)



이제 우리가 어디에 요청을 보내야하는지, 응답값에 대한 정보를 얻을 수 있습니다.

일단 우리는 Request를 잘 활용하면 되겠죠?


그렇다면 이 Request에 대한 Cloud다운(?) 응답은 어디서 볼 수 있을까요?

그것은 아래 링크로 들어가서 ID검색창에 자신이 만든 ID를 입력해보면 됩니다.

https://dweet.io/follow



다른 방법으로 위처럼 검색하는 것이 아니라 URL에 ID를 추가하면 바로 볼 수 있습니다.

예를 들어, ID가 YOURTHINGSNAME일 경우, 아래와 같 URL을 브라우저에 입력하면 됩니다.

https://dweet.io/follow/YOURTHINGSNAME



지금까지의 과정은 고유한 ID를 찾고, 작동방식을 어느정도 이해하기 위해 진행한 것입니다. 

확인해보니 http 프로토콜을 사용하여 요청을 보내면 Dweet.io에서 응답을 주는 형태로 되어있는 것이었죠.

이를 토대로 Dweet.io의 메인 화면으로 넘어가면 아래와 같은 설명을 볼 수 있는데, 우리는 이 부분을 아두이노 코드로 구현할 것입니다.






회로 구성



[WIFI 사용]

보드 : Arduino Mega 2560 + WizFi310


[Ethernet 사용]

보드 : WizArduino ( or Arduino Board + Ethernet Shield2 )


그리고 아래의 실드를 사용하였습니다. 

이 부분은 선택사항이기 때문에, 이 실드를 사용하지 않고 별도로 회로를 구성하셔도 됩니다.

또한, 소자에 대한 의존성이 없는 튜토리얼이기 때문에 추가적인 회로구성 없이 진행하셔도 됩니다.



우선 위 실드를 사용하면,

  • A0 : 가변저항
  • A1 : CDS 센서
  • A2 : 온도 센서(LM35)

의 회로 구성이 됩니다.


만약 WizFi310(WIFI)을 사용하신다면 Serial3과 연결합니다.




아두이노에서 사용할 Request 함수 만들기



위 A0, A1, A2핀의 데이터를 POST하는 것을 기준으로 진행하겠습니다.

우선, 제가 작성한 함수를 가져와 보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**
 * @brief   Post analog sensor data
 * @detail  Post to dweet analog sensor data using HTTP.
 * @param   void
 * @return  connect result
 * @throws
 */
int postAnalogSensor(void) {
    SERIAL_DEBUG.println("[Net Info] connecting to server...");
 
    if (client.connect(server_dns, 80)) {
        SERIAL_DEBUG.print("[Net Info] Connected! Sending HTTP request to ");
        SERIAL_DEBUG.println(server_dns);
 
        client.print(post_url);
 
        client.print("RESIS=");
        client.print(analogRead(PIN_RESISTOR));
        client.print("&LIGHT=");
        client.print(analogRead(PIN_LIGHT));
        client.print("&TEMP=");
        client.println(calculateTemp(PIN_TEMP));
 
        client.print("Host: ");
        client.println(server_dns);
        client.println("Connection: close");
        client.println();
 
        //SERIAL_DEBUG.println("Send Request !");
 
        SERIAL_DEBUG.println();
 
        return 1;
    }
 
    SERIAL_DEBUG.println("[Net Info] Connect Failed!");
    SERIAL_DEBUG.println();
    return 0;
}
cs


함수 이름에 analog 라는 단어를 넣은 이유는, 이미 함수 코드에 analogRead 및 특정 핀에 대한 읽기가 지정되어 있기 때문입니다. 

모듈화를 원하시는 분들은 새로 만드시는게 좋겠죠.

어쨌든, Dweeting에서 사용된 방식을 코드에 그대로 구현해두었습니다. 

이를 풀어서 나타내면 아래와 같이 됩니다.

POST /dweet/for/academytest?RESIS=Value&LIGHT=Value&TEMP=Value

Host: www.dweet.io

Connection: close

client.print(ln) 을 사용하여 server로 요청하는 내용이 위와 같은 것입니다.

이렇게 되면, 홈페이지에서 설명하고 있는 dweeting 방식으로 dweet.io에 요청하게 되는 것이죠.


추가로, 제대로 응답이 오는지 확인하기 위해서, void debugHTTPResponse(); 함수를 만들어 두었습니다.

필요하다면 사용하고 필요없으면 주석처리하거나 삭제하면 됩니다.


전체 소스



전체 소스는 아래와 같습니다.

몇몇 수정사항이 필요하니, 주석을 잘 참조하시거나 다음절을 확인하고 진행해주세요.


[WizFi310] - WIFI

 


[WizArduino] - Ethernet


코드 수정 포인트



Dweet 홈페이지에서 ID를 생성했습니다. 당연히 바꿔주셔야겠죠?

const char* server_dns = "www.dweet.io";
const char* post_url = "POST /dweet/for/YOURTHINGSNAME?";   // Change YOURTHINGSNAME
//const char* post_url = "POST /dweet/for/academytest?"; //example

전체 소스 초반을 보면, 위와 같은 내용이 있을 것입니다.

여기서, YOURTHINGSNAME 부분을 생성한 ID로 변경해주시면 됩니다.


혹시 몰라 주석처리된 곳에 예제를 두었으니 확인해보세요. 

저의 경우는 ID를 academytest 로 하였습니다.

그 외의 수정포인트들은 주석에 설명이 되어 있고, 사용자 임의설정에 의존적이니 언급하지 않겠습니다.





실행 & 테스트



보드에 업로드가 완료되었다면, Serial 모니터를 엽니다.


[WizFi310] - WIFI



[WizArduino] - Ethernet



Request도 보내고, Response도 받아왔네요.

첫 절에서 알아보았던 방법으로 웹브라우저에 URL을 입력하면, 아래와 같이 그래프 형태로 데이터를 볼 수 있습니다.



Dash board로 보고 싶으신 분들은 위의 붉은박스 버튼을 눌러 아래와 같이 사용할 수도 있습니다.




댓글
댓글쓰기 폼