WIZFi & Arduino Mega 예제(Ubidots 클라우드 연동)

이번 예제에서는 IoT 클라우드 서비스 중 하나인 Ubidots를 WIZFi와 Arduino Mega를 통해 사용하는 방법에 대해 알아보겠습니다.

Ubidots 개요

Ubidots는 IoT 클라우드 서비스를 제공하며, 다양한 IoT 기기와 연동하여 데이터를 수집, 분석, 제어 기능을 제공합니다.

Ubidots 이용방법

1. Ubidots 사이트에 접속합니다. (http://ubidots.com/)

2. Ubidots ID가 없는 경우 우측 상단의 “SIGN UP”을 클릭하여 회원가입을 진행하고, Ubidots ID가 있는 경우 “LOGIN”을 클릭하여 로그인 합니다.
Ubidots Main Page

 

3. 로그인을 하면 아래와 같은 홈페이지가 팝업되며, Devices(빨간색 테두리)를 클릭합니다.
Ubidots Log In

 

4. 우측 상단의 (+)나 Add Device를 클릭하면, “My Data Source” 라는 디바이스가 생성됩니다.
Ubidots Devices
Ubidots Devices Create

 

5. 생성된 디바이스 “My Data Source”를 클릭하면 아래와 같은 화면이 출력됩니다.

6. “Add Variable”을 클릭한 후 “Default”를 클릭합니다.
Ubidots Add variable

 

7. 아래 그림과 같이 New variable이 생성되며, (i)를 누르면 “Variable ID”를 확인할 수 있습니다. (Variable ID는 꼭 기억해 둡시다.)
Ubidots Add variable result

 

8. 우측 상단의 본인 아이디를 클릭하고, “API Credential”을 클릭합니다.
Ubidots Add variable result

 

9. 아래 그림과 같이 “API Key”와 “Token”을 확인할 수 있습니다. (Token은 꼭 기억해 둡시다.)
Ubidots Add variable result

WIZFi & Arduino Mega와 Ubidots 연결

1. 아두이노 홈페이지에서 아두이노 IDE를 다운로드 후 설치합니다. (https://www.arduino.cc/en/Main/Software)

2. 아래 그림과 같이 아두이노 포트와 보드를 세팅합니다.
Ubidots Add variable result
Ubidots Add variable result

 

3. 아래 그림과 같이 코드를 올린 뒤 아두이노에 올립니다. (코드는 아래에 자세히 적혀 있습니다.)
Ubidots Add variable result

 

4. 확인을 위해 Ubidots의 Device를 클릭하여 살펴보면 아래 그림과 같이 WIZFi & 아두이노 Mega가 Ubidots에 데이터를 준 것을 확인 할 수 있습니다.
Ubidots Add variable result

code

#include <Arduino.h>
#include "WizFi310.h"

char ssid[] = “Matthew”; //your network SSID
char pass[] = “00000000”; //your network password
int status = WL_IDLE_STATUS; //the Wifi radio’s status

// Ubidots My Source Variable ID
String TEST = “58abcef476254260e33f3b98”; // TEST Variable ID

// Ubidots My token ID
String token = “qFN72VE2UMEYvdO1yKzMgQtxI2mHmI”; // default token

// Connect server
char server[] = “things.ubidots.com”;
#define REMOTE_PORT 80

WiFiClient client;

// getRequest String buffer
String Stringbuffer = “”;

int TEST_pin = 13; // Arduino LED D13 pin

void setup() {
Serial.begin(9600);
Serial3.begin(115200);

delay(6000);
Serial.print(“Starting…”);
Serial.println(“WiFi initiallize”);
WiFi.init(&Serial3);

if (WiFi.status() == 0) {
Serial.println(“Failed to configure WiFi”);
// don’t continue
while(true)
;
}
//attempt to connect to WiFi network
while (status != WL_CONNECTED)
{
Serial.print(“[WiFi] Attempting to connect to WPA SSID: “);
Serial.print(ssid);
//Connect to WPA/WPA2 network
status = WiFi.begin(ssid, pass);
}
pinMode(TEST_pin, OUTPUT);
digitalWrite(TEST_pin, LOW);
delay(1000);
}

void loop() {
sendValue();
delay(20000);
}

void sendValue(void)
{
Serial.println(“Sensor value Sending…”);
int bodySize = 0;
delay(20000);

String varString = “[{\”variable\”: \”” + TEST +”\”, \”value\”:” + String(TEST_pin) + “}]”;
Serial.print(varString);
bodySize = varString.length();
delay(20000);

if (client.connect(server, REMOTE_PORT))
{
client.print(“POST /api/v1.6/collections/values/?force=true HTTP/1.1\r\n”);
client.print(“Host: things.ubidots.com\r\n”);
client.print(“User-Agent: Arduino-Ethernet/1.0\r\n”);
client.print(“X-Auth-Token: “);
client.print(token);
client.print(“\r\n”);
client.print(“Content-Length:”);
client.print(String(bodySize));
client.print(“\r\n”);
client.print(“Content-Type: application/json\r\n”);
client.print(“Connection: close\r\n”);
client.print(“\r\n”);
client.print(varString);
client.print(“\r\n\r\n”);
}
else
{
Serial.println(“connection failed”);
}
while (!client.available());
//Serial3.println(“Reading..”);
while (client.available())
{
char c = client.read();
Serial.print(c); // Response Monitoring
}
client.flush();
client.stop();
}