초급 예제

누구나 쉽게 따라해볼 수 있는 쉬운 예제들입니다. 가볍게 도전~!

OrangeBoard WiFi와 Thingspeak를 연동하여 사용하기

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 온도 센서 브레드 보드 점퍼 케이블


 

 

 

 

 

하드웨어 making

 

※ 아래의 핀은 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를 사용하기 위해서는 우선 Thingspeak사이트(https://thingspeak.com/)에 접속합니다.

여러 사이트가 그렇듯 Thingspeak로 회원제로 운영하기 때문에 사이트를 사용하기 위해서는 회원가입을 해야 합니다.

 

사이트 상단에 Sign Up을 눌러 회원가입을 진행합니다.

회원가입을 할때 Time Zone을 입력하는 란이 있는데 우리나라는 GMT+9:00에 위치해 있습니다. 

 

 

 

 

 

 

회원가입을 완료했다면 로그인 후 Channels - My Channels를 클릭합니다.

 

 

 

 

 

New Channel을 눌러 새로운 채널을 생성합니다.

 

 

 

 

New Channel을 클릭하여 아래와 같이 갑자기 빈칸이 많이 보이는데 다 입력할 필요 없이 간단하게 NameField만 입력해도 됩니다.

Name은 생성되는 채널의 이름이고, Description은 채널 설명입니다.

Field는 데이터의 값을 표현하는 구역으로 Field를 생성할 경우 하나의 값을 그래프로 표현이 가능합니다.

 

이번 튜토리얼에서는 온도센서의 값 1개만을 받아오기 때문에 Field를 1개만 생성하였습니다.

이 외의 하단의 값들은 부가적인 기능으로써 지금 당장은 쓰지 않으니 작성하지 않아도 됩니다.

 

 

 

 

작성후에 하단의 Save Channel을 누르면 채널이 생성됩니다.

 

 

 

 

이제 생성된 채널을 켰을때 아래와 같은 창이 뜬다면 이제 센서값을 받을 준비가 끝났습니다.

 

아래 창에 대해 간단히 설명하자면

Channel ID는 현재 생성된 채널의 고유 값입니다.

Author는 채널 생성자이고

Access는 현재 채널의 접근 권한을 가르킵니다. 채널을 생성할때 Name과 Field외에 아무것도 건드리지 않았기 때문에 기본 값으로 Private로 설정되어 있습니다.

 

 

 

 

소프트웨어 Coding

#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개의 값을 사용자가 작성해주어야 하는데

SSIDPASS는 사용자가 현재 쓰고 있는 WiFi의 이름과 패스워드를 작성하여 넣으면 됩니다.

 

 

 

 

APIKEY는 아래 사진의 빨간 박스 안에 위치해 있습니다.

API Keys를 클릭 후 Write API Key에 해당하는 값을 입력하면 됩니다. 

 

 

 

 

 

 

위의 값을 입력 후에 코드를 업로드 하면 이제 Thingspeak에서 정상적으로 센서값에 따라 그래프를 그리는 모습을 볼 수 있습니다.

<2016년 10월 5일 현재 온도는 24.71도 입니다>

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

Thingspeak, 클라우드, IoT, WiFi, OrangeBoard, 오렌지보드, 와이파이