IoT 장치에서 데이터를 취득한 후에는 데이터 통계 및 분석 방법을 이용해, 패턴을 추출하고, 변화량이나 추세를 예측하는 등의 작업이 매우 중요해 집니다. 예를 들어, 에너지 전력 소비량을 시간에 따라 그래프에 표시하면, 불필요하게 에너지를 소비하는 시점이 언제인지, 그때 어떤 장치가 에너지를 소비하는 지 등을 알 수 있습니다.
이 글은 IoT 장치에서 센싱된 데이터를 취득하여 데이터를 분석하는 간단한 방법을 보여줍니다. 이 글에서는 데이터 취득 및 제어는 아두이노와 Blynk를 사용하며, 데이터 분석은 ThingSpeak를 사용할 것입니다.
이 글은 다음 레퍼런스를 참고 하였습니다.
- From blink to Blynk, an IoT journey on the wings of NodeMCU
- blynk data log storage
- Send sensor data to ThingSpeak
- Send data to ThingSpeak with Arduino
- WiFi101 thingSpeak Data Uploader
- Arduino MPPT solar charger controller
- ThingSpeak
- ThingSpeak 센서값 모니터링
- Arduino YUN based ThingSpeak
- HTTP client
- HTTP client and Bridge
- WiFi101 ThingSpeak Data Uploader
- Arduino YUN and sending data to ThingSpeak with POST
ThingSpeak 기반 데이터 분석
ThingSpeak 데이터 분석 영상
1. ThingSpeak 동작 방식
ThingSpeak는 클라우드 기반으로 동작되는 데이터 분석 솔류션으로 오픈소스 기반으로 동작합니다. RESTful API를 사용하기 때문에, 데이터를 ThingSpeak로 전송하는 것은 매우 쉽습니다. Matlab 스크립트를 웹상에서 지원하므로, 과학 실험 데이터 분석도 가능합니다. 게다가, 메시지 교환 세계 표준인 MQTT (Message Queueing Telemetry Transport) 도 지원합니다.
ThingSpeak에서 데이터 분석을 위해서는 보통 다음과 같은 준비 단계를 거쳐야 합니다.
1. ThingSpeak 가입
2. ThingSpeak 데이터 분석 채널 생성
3. 채널에 분석이 필요한 데이터 필드 생성
4. 채널 설정 저장
이렇게 채널이 만들어지면, 채널 내에 정의된 필드 별로, 데이터를 RESTful API를 이용해, ThingSpeak에 저장하면 됩니다.
2. 센싱 데이터 전송
센싱 데이터는 다음 코드와 같이 ThingSpeak 에서 제공하는 API, 미리 생성된 API 키를 이용해, 각 데이터 필드에 데이터를 전송하는 과정을 거칩니다.
#include "HttpClient.h"
//Thingspeak parameters
String thingspeak_update_API = "http://api.thingspeak.com/update?";
String thingspeak_write_API_key = "key=XXXXXXXXXXXXXX";//Insert Your Write API key here
String thingspeakfieldname = "&field1=";
void setup() {
Bridge.begin(); // Initialize Bridge
Serial.begin(9600); // Initialize Serial
while (!Serial); // Wait until a Serial Monitor is connected.
int data=240; // Data to be sent to thingspeak, change this variable value and post accordingly
postToThinspeak(data); // run various example processes
Serial.flush(); // Ensure the last bit of data is sent.
}
void loop() {
// Do nothing here.
}
void postToThinspeak(int data) {
HttpClient client;
String request_string = thingspeak_update_API + thingspeak_write_API_key + thingspeakfieldname + data;
// Make a HTTP request:
client.get(request_string);
// if there are incoming bytes available
// from the server, read them and print them:
while (client.available()) {
char c = client.read();
Serial.print(c);
}
delay(15000);
}
이제, 이 코드를 WiFi 쉴드가 장착된 아두이노에 입력하고, 실행을 하면, ThingSpeak의 해당 채널에서 수집되는 데이터를 실시간 그래프로 시각화될 것입니다. 물론, 이 데이터는 통계 데이터, 회귀분석, 연관분석, 패턴분석, 클러스터링 등 다양한 데이터 분석 자료로 활용할 수 있고, Matlab과 같은 스크립트를 약간만 수정함으로써 손쉽게 결과값을 얻을 수 있습니다.
3. 결론
IoT 시대에 꼭 필요한 데이터 분석도구입니다.