がりらぼ

WindowsRuntimeの応援ブログ

ArduinoからMobileServiceにデータを送る

ArduinoにはEthernetシールドをつけましょう。
RESTAPIを使ってデータをMobileServiceに送信します。

mac[]をEthernetMacアドレスに、serverをモバイルサービスのドメイン名に、table_nameをデータを挿入したいテーブル名に、ams_keyはモバイルサービスのアクセスキーに置き換えます。

この例ではmillis()関数を利用して1時間に1回計測データをMobileServiceに送信しています。

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0xAB, 0x39 };

const char *server = "***.azure-mobile.net";

const char *table_name = "{tablename}";
 
const char *ams_key = "{access key}";
 
EthernetClient client;
 
int tempPin=A0;

unsigned long prevTime=0;
 
void send_request(float value)
{
  char buffer[64];
  char value_str[64];
  
  if (client.connect(server, 80)) {
    Serial.println(value);
    sprintf(buffer, "POST /tables/%s HTTP/1.1", table_name);
    client.println(buffer);
 
    sprintf(buffer, "Host: %s", server);
    client.println(buffer);
 
    sprintf(buffer, "X-ZUMO-APPLICATION: %s", ams_key);
    client.println(buffer);
 
    client.println("Content-Type: application/json");
 
    dtostrf(value,5,2,value_str);  //Arduinoではsprintfで小数をあつかうことができないのでこれ
    sprintf(buffer, "{\"value\": %s}",value_str);
 
    client.print("Content-Length: ");
    client.println(strlen(buffer));
 
    client.println();
 
    client.println(buffer);
    
  }
  
}

void read_response()
{
  bool print = true;
  
  while (client.available()) {
    char c = client.read();
    // Print only until the first carriage return
    if (c == '\n')
      print = false;
    if (print)
      Serial.println(c);
  }
}
 
void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac);
  prevTime=0;
  delay(1000);
}

void loop()
{
  if((millis()-prevTime)>(unsigned long)(3600000)){//1000*60*60
    int val = analogRead(tempPin);
    
    
    float temp=(float)val*500/1024-60;
    
    send_request(temp);
    read_response();
    client.stop();
    
   
    prevTime=millis();
    delay(1000);
    
  }
   
  
  
}