Arduino ve W5100 Ethernet Shield ile IOT Server a Veri Gönderme

Arduino kütüphaneleri ile ethernet kartı üzerinden internet sunucumuza veri göndermek oldukça kolaydır. Örneğimizde iothook.com sitesine HTTP GET metodu ile veri göndereceğiz. field_1 ve field_2 olarak kullandığımız 2 alan sayısı 8 e kadar yükseltilebilir. Yani en fazla 8 veri alanı kullanabiliriz. Bu alanların her birinde ayrı bir değişkeni iot sunucusuna get metodu ile gönderebiliriz.

IOTHOOK server larına veri göndermek için öncelikle hesap açarak cihaz eklemek gerekmektedir. Cihaz ekledikten sonra okuma ve yazma API KEY elde edeceğiz. Bu KEY ile ile iothook sunucusunda işlem yapabiliriz.

Arduino kodunda kullanılan "Ethernet.h" isimli kütüphane gerekli olan "EthernetClient" istemcisini oluşturarak verileri göndermemizi sağlayacaktır.

Arduino Ethernet Shield örneğine https://github.com/electrocoder/IOThook/tree/master/examples/python/arduino adresinden de ulaşabilirsiniz.

/*
  Server Odasi Sicaklik ve Nem Takibi
  electrocoder@gmail.com
  sahin@mesebilisim.com
  mesebilisim.com
  13.01.2020
*/
#include <SPI.h>
#include <Ethernet.h>
#include <dht.h>

#define pin 2
dht DHT;
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);
IPAddress myDns(192, 168, 1, 1);
EthernetClient client;
char server[] = "iothook.com";
unsigned long lastConnectionTime = 0;
const unsigned long postingInterval = 20 * 1000;

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ;
  }
  Serial.println("Initialize Ethernet with DHCP:");
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    if (Ethernet.hardwareStatus() == EthernetNoHardware) {
      Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
      while (true) {
        delay(1);
      }
    }
    if (Ethernet.linkStatus() == LinkOFF) {
      Serial.println("Ethernet cable is not connected.");
    }
    Ethernet.begin(mac, ip, myDns);
    Serial.print("My IP address: ");
    Serial.println(Ethernet.localIP());
  } else {
    Serial.print("  DHCP assigned IP ");
    Serial.println(Ethernet.localIP());
  }
  delay(1000);
}

void loop() {
  //int readData = DHT.read22(pin);
  float t = 5; //DHT.temperature;
  float h = 12; //DHT.humidity;
  if (client.available()) {
    char c = client.read();
    Serial.write(c);
  }
  if (millis() - lastConnectionTime > postingInterval) {
    httpRequest(t, h);
  }
}

void httpRequest(float t, float h) {
  client.stop();

  if (client.connect(server, 80)) {
    Serial.println("connecting...");
    client.println("GET /api/update/?api_key=1c623cec154a45c6158d8681&field_1=" + String(t) + "&field_2="+ String(h) +" HTTP/1.1");
    client.println("Host: www.iothook.com");
    client.println("User-Agent: arduino-ethernet");
    client.println("Connection: close");
    client.println();

    lastConnectionTime = millis();
  } else {
    Serial.println("connection failed");
  }
 
}