본문 바로가기

개인 연구실/바람의 연구실

thingspeak 에 데이터 쓰는 법과 읽는 법 (HTTP POST & GET)



아두이노라이브러리를 사용해서 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


응답은 json 으로 다음과 같은 포맷으로 나온다.


{
    "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


63797 채널에서 최근 데이터를 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