読者です 読者をやめる 読者になる 読者になる

がりらぼ

WindowsRuntimeの応援ブログ

ArudinoでEthernetシールドを使ってHttpPostをする

Arduino

ホスト名の指定でかなりまよった

{hostname}のところをwww.hogehog.comなり、hogehoge.netなり、ホスト名を入れる

POSTのところは/api/temp のようにホスト名からアクセスしたいところの相対パスになる

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

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

const char *server = "http://{hostname}/api/temp";
const char *host = "{hostname}";

EthernetClient client;
 
int tempPin=A0;

unsigned long prevTime=0;
 
void send_request(float value)
{
  char buffer[256];
  char value_str[64];
  
  if (client.connect(host, 80)) {
    //Serial.println(value);
    sprintf(buffer, "POST %s HTTP/1.1", "/api/temp");
    client.println(buffer);
    sprintf(buffer, "Host: %s", host);
    client.println(buffer);
 
    client.println("Content-Type: application/json");
 
    dtostrf(value,5,2,value_str);  //Arduinoではsprintfで小数をあつかうことができないのでこれ
    sprintf(buffer, "%s",value_str);
 
    client.print("Content-Length: ");
    client.println(strlen(buffer));
    
    client.println();
 
    client.println(buffer);
    Serial.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);
    
  }
   
  
  
}