코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2016-10-04 16:48:21
Thingspeak는 대표적인 IoT 클라우드 솔루션 서비스 중 하나로 무료로 다양한 기능들을 사용할 수 있습니다.
Thingspeak는 사물을 뜻하는 Thing과 말하다의 의미를 지닌 Speak의 합성어로 '사물이 말하다'라는 뜻, 즉 IoT기기들이 출력하는 여러가지 값들을 의미합니다.
Thingspeak에서는 내가 만든 데이터 뿐만 아니라 아래 사진처럼 현재 실시간으로 작동하는 해외 여러나라 다른 사람들의 데이터도 확인할 수 있습니다.
<public channels을 클릭할 경우 실시간으로 작동하는 수천개의 채널을 볼 수 있다>
Thingspeak에서는 MATLAB을 사용한 분석도 제공하기 때문에 단순히 센서값 축적뿐만 아니라 정밀한 데이터 분석도 가능합니다.
이번글에서는 Thingspeak와 OrangeBoard WiFi를 연동하여 온도센서의 값을 Thingspeak에 올리는 방법에 대해 알아보겠습니다.
OrangeBoard WiFi가 없으신 경우, ESP8266을 모듈을 사용하실 수도 있습니다. (http://kocoafab.cc/tutorial/view/625)
No | 부품명 | 수량 | 상세 설명 |
1 | OrangeBoard WiFi | 1 | WizFi250을 사용한 WiFi보드 |
2 | 온도 센서 | 1 | TMP36 |
3 | 브레드 보드 | 1 | |
4 | 점퍼 케이블 | 4 |
OrangeBoard WiFi | 온도 센서 | 브레드 보드 | 점퍼 케이블 |
※ 아래의 핀은 WiFi모듈과 오렌지 보드 간 통신(SPI통신)을 위해 사용되는 핀이니 사용이 불가한 점을 유의해야 합니다.
혹시 아래 핀에 연결된 선이 있다면 사용이 중복되기 때문에 다른 핀에 연결해야 합니다.
Pin Number | WizFi250 |
D4 | WIFI_SS |
D2 | WIFI_RESET |
D3 | WIFI_DATA_READY(GPIO14) |
D11 | WIFI_MOSI |
D13 | WIFI_SCK |
D12 |
WIFI_MISO |
Thingspeak를 사용하기 위해서는 우선 Thingspeak사이트(https://thingspeak.com/)에 접속합니다.
여러 사이트가 그렇듯 Thingspeak로 회원제로 운영하기 때문에 사이트를 사용하기 위해서는 회원가입을 해야 합니다.
사이트 상단에 Sign Up을 눌러 회원가입을 진행합니다.
회원가입을 할때 Time Zone을 입력하는 란이 있는데 우리나라는 GMT+9:00에 위치해 있습니다.
회원가입을 완료했다면 로그인 후 Channels - My Channels를 클릭합니다.
New Channel을 눌러 새로운 채널을 생성합니다.
New Channel을 클릭하여 아래와 같이 갑자기 빈칸이 많이 보이는데 다 입력할 필요 없이 간단하게 Name과 Field만 입력해도 됩니다.
Name은 생성되는 채널의 이름이고, Description은 채널 설명입니다.
Field는 데이터의 값을 표현하는 구역으로 Field를 생성할 경우 하나의 값을 그래프로 표현이 가능합니다.
이번 튜토리얼에서는 온도센서의 값 1개만을 받아오기 때문에 Field를 1개만 생성하였습니다.
이 외의 하단의 값들은 부가적인 기능으로써 지금 당장은 쓰지 않으니 작성하지 않아도 됩니다.
작성후에 하단의 Save Channel을 누르면 채널이 생성됩니다.
이제 생성된 채널을 켰을때 아래와 같은 창이 뜬다면 이제 센서값을 받을 준비가 끝났습니다.
아래 창에 대해 간단히 설명하자면
Channel ID는 현재 생성된 채널의 고유 값입니다.
Author는 채널 생성자이고
Access는 현재 채널의 접근 권한을 가르킵니다. 채널을 생성할때 Name과 Field외에 아무것도 건드리지 않았기 때문에 기본 값으로 Private로 설정되어 있습니다.
#include <SPI.h>
#include "WizFi250.h"
char ssid[] = "SSID"; // your network SSID (name)
char pass[] = "PASS"; // your network password
String apiKey = "APIKEY";
const char* server = "api.thingspeak.com";
int status = WL_IDLE_STATUS;
WiFiClient client;
void printWifiStatus();
void setup() {
Serial.begin(115200);
WiFi.init();
// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// don't continue:
while (true)
;
}
// attempt to connect to WiFi network
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network
status = WiFi.begin(ssid, pass);
}
Serial.println("Connected to wifi");
printWifiStatus();
}
void loop() {
float sensor = analogRead(A0);
float voltage = (sensor * 5000) / 1024;
voltage = voltage - 500;
float celsius = voltage / 10;
if (client.connect(server, 80)) { // "184.106.153.149" or api.thingspeak.com
String postStr = apiKey;
postStr += "&field1=";
postStr += String(celsius);
postStr += "\r\n\r\n";
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
Serial.print("Temperature: ");
Serial.print(celsius);
Serial.print(" degrees Celcius");
Serial.println("% send to Thingspeak");
}
client.stop();
Serial.println("Waiting…");
// thingspeak needs minimum 15 sec delay between updates
delay(5000);
}
void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print your WiFi shield's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
위의 코드를 업로드 하기 전에 코드상에서 사용자가 작성해야 할 부분이 3곳이 있습니다.
SSID, PASS, APIKEY 이렇게 3개의 값을 사용자가 작성해주어야 하는데
SSID와 PASS는 사용자가 현재 쓰고 있는 WiFi의 이름과 패스워드를 작성하여 넣으면 됩니다.
APIKEY는 아래 사진의 빨간 박스 안에 위치해 있습니다.
API Keys를 클릭 후 Write API Key에 해당하는 값을 입력하면 됩니다.
위의 값을 입력 후에 코드를 업로드 하면 이제 Thingspeak에서 정상적으로 센서값에 따라 그래프를 그리는 모습을 볼 수 있습니다.
<2016년 10월 5일 현재 온도는 24.71도 입니다>
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!