아두이노라이브러리를 사용해서 Thingspeak 에 데이터를 쓰는 것을 해보았다. 비슷하게 같은 라이브러리의 예제 ReadPrivateChannel 을 보면 최신 데이터를 하나 가져오는 것도 어렵지 않게 할수 있다.
이제 http 프로토콜에서 thingspeak 에 데이터를 쓰는 법과 읽는 법을 익힌다. 이 방법을 가지고 matlab 에서 thingspeak 의 데이터를 가지고 와서 그래프를 그리거나 Signal Processing 을 할수 있으며 현재 무료 툴인 SciLab 에서도 이와 비슷한 기능을 구현중인 것으로 알고 있다.
json 포맷을 사용하므로 조금만 신경을 쓰면 MatLab 이나 SciLab 등의 툴에서 ThingSpeak 에 저장된 데이터를 가져와서 사용할 수 있다. 그 기초가 되는 부분을 여기에 소개한다.
1. 데이터 쓰기
http 기반으로 데이터를 쓸때 다음의 포맷을 사용한다.
https://api.thingspeak.com/update?api_key=[자신의 Write API Key]&field1=0.0002
thingspeak 에 채널을 만들어 두었고, Read API Key 와 Write API Key 를 얻었으면 Write API Key 를 사용해서 데이터를 넘겨줄수 있다. 만약 Write API Key 가 VGYJ5QWJDYEFQ 이고, field 를 하나 만들어 두었고 그 field 에 0.002 라는 값을 쓰고 싶다면 다음과 같이 웹브라우저 (필자는 windows10 환경에서 구글 chrome 브라우저 에서 테스트 하였다)의 주소창에 적어주면 된다.
http://api.thingspeak.com/update?api.key=VGYJ5QWJDYEFQ&field1=0.002
이러면 내가 만들어 둔 채널에 데이터가 쓰인다. 데이터를 쓸때는 채널번호가 필요없다. API Key 만 있으면 정해진 채널에 데이터가 기록된다. 모니터 화면에는 몇번째 기록인지 번호가 나타난다.
이때 json 포맷으로 응답을 받고 싶다면 update 대신에 update.json 을 쓰면 된다.
http://api.thingspeak.com/update?api.key=VGYJ5QWJDYEFQ&field1=0.002
{
"channel_id": 3,
"field1": '73',
"field2": null,
"field3": null,
"field4": null,
"field5": null,
"field6": null,
"field7": null,
"field8": null,
"created_at": '2014-02-25T14:13:01-05:00',
"entry_id": 320,
"status": null,
"latitude": null,
"longitude": null,
"elevation": null
}
json 포맷으로 나온 화면을 캡춰한 사진이다.
2. 데이터 읽기
데이터를 읽을때 일반 형태, json, xml 세가지 형태로 가져올 수 있다. 이중 많이 사용되고 데이터 크기가 비교적 작은 json 형식으로 데이터를 가져오기로 한다.
기본 명령은 다음과 같다. 역시 chrome 창 등에서 직접 주소란에 적어 넣으면 된다.
https://api.thingspeak.com/channels/[자신의 Channel ID]/feeds.json?results=[number]
간단하게는 두가지만 신경쓰면 된다. 첫째 자신의 channel ID 와 몇개의 데이터를 가져 올 것인지를 결정한다. 데이터는 최근에 갱신된 것부터 차례로 가져온다.
https://api.thingspeak.com/channels/63797/feeds.json?results=10
json 포맷은 다음과 같다.
{
"channel":
{
"id": 9,
"name": "my_house",
"description": "Netduino Plus connected to sensors around the house",
"latitude": "40.44",
"longitude": "-79.996",
"field1": "Light",
"field2": "Outside Temperature",
"created_at": "2010-12-13T20:20:06-05:00",
"updated_at": "2014-02-26T12:43:04-05:00",
"last_entry_id": 6060625
},
"feeds":
[
{
"created_at": "2014-02-26T12:42:49-05:00",
"entry_id": 6060624,
"field1": "188",
"field2": "25.902335456475583"
},
{
"created_at": "2014-02-26T12:43:04-05:00",
"entry_id": 6060625,
"field1": "164",
"field2": "25.222929936305732"
}
]
}
라즈베리서버를 이용해서 이와 동일한 서비스를 구축해 보는 것을 목표로 한다.
[Reference]
https://kr.mathworks.com/help/thingspeak/get-a-channel-feed.html
https://kr.mathworks.com/help/thingspeak/update-channel-feed.html