2013年4月12日金曜日

KL25ZとWIZ820ioでcosmへ送信する


WIZ820ioのインターフェースをEthetnetInterfaceのsocket互換に作り直して、cosmへのデータを送信しています。
cosmのベータ版ではあるが、httpプロトコルではなくてtcpプロトコルにJSON形式を載せています。
更に、DNSやDHCPを使わずにIPアドレス固定で接続することも可能です。

下のグラフは一週間の大気圧センサの値です。
あまり精度はよくないが先週末からの低気圧が通過したのがわかります。


参考:
Socket Server
https://cosm.com/docs/beta/socket_server/
IP Addresses
https://cosm.com/docs/v2/ip_addresses.html


#include "mbed.h"
#include "WIZ820ioInterface.h"
#include "MPL115A1.h"

SPI spi(PTD2,PTD3,PTD1); // SPI_0
MPL115A1 bar(spi, PTA13); // spi, cs
WIZ820ioInterface eth(&spi,PTD0,PTD5); // spi, cs, reset

#define qq(...)  #__VA_ARGS__
const char* format = qq(
{
  "method" : "put",
  "resource" : "/feeds/12345678",
  "headers" : {"X-ApiKey":"APIKEYAPIKEYAPIKEYAPIKEYAPIKEYAPIKEYAPIKEYAPIKEY"},
  "body" : {
    "datastreams" : [
      {"id":"6", "current_value":"%.2f"},
      {"id":"7", "current_value":"%.2f"}  
    ]
  }
}
);

void cosm()
{
    char buf[512];
    snprintf(buf, sizeof(buf), format, bar.readPressure() * 10, bar.readTemperature());
    TCPSocketConnection sock;
    sock.set_blocking(false);
    int ret = sock.connect("173.203.98.29", 8081); // cosm tcp server
    if (ret < 0) {
        return;
    }
    sock.send(buf, strlen(buf));
}

int main()
{
    eth.init();
    eth.connect();
    while(1) {
        cosm();
        wait_ms(30*1000);
    }   
}

(2013/4/12)
---

0 件のコメント: