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");
  }
 
}









Otomotiv teknolojileri ile ilgilendiğimiz doğrudur. Otomotiv ve gömülü sistem yazılımı geliştirmede yeteneklerimizi geliştirerek çözüm ortağınız olmayı hedefliyoruz.

Platformio gömülü sistemler için geliştirilmiş yeni nesil ekosistemdir.

Platformio ile aşağıdaki geliştirme platformlarında proje geliştirebilirsiniz;

  • Aceinna IMU
  • Atmel AVR
  • Atmel SAM
  • Espressif 32
  • Espressif 8266
  • Freescale Kinetis
  • Infineon XMC
  • Intel ARC32
  • Intel MCS-51 (8051)
  • Kendryte K210
  • Lattice iCE40
  • Maxim 32
  • Microchip PIC32
  • Nordic nRF51
  • Nordic nRF52
  • NXP LPC
  • RISC-V
  • RISC-V GAP
  • Shakti
  • Silicon Labs EFM32
  • ST STM32
  • ST STM8
  • Teensy
  • TI MSP430
  • TI Tiva
  • WIZNet W7500




Platformio ile proje oluştururken birçok  Framework kullanabilirsiniz. Bunlar aşağıda listelenmiştir.

  • Arduino
  • CMSIS
  • Energia
  • ESP-IDF
  • ESP8266 Non-OS SDK
  • ESP8266 RTOS SDK
  • Freedom E SDK
  • Kendryte Standalone SDK
  • libOpenCM3
  • mbed
  • PULP OS
  • Pumbaa
  • Shakti SDK
  • Simba
  • SPL
  • STM32Cube
  • WiringPi



MQTT Python Publish Örneği



#!/usr/bin/python# -*- coding: utf-8 -*-
# MQTT Python Publish Örneği# Mese Bilisim
import paho.mqtt.client as mqtt
import time

MQTT_HOST = "iothook.com"
MQTT_PORT = 1883MQTT_KEEPALIVE_INTERVAL = 45MQTT_TOPIC = "test"MQTT_MSG = ""

def on_connect(client, userdata, flags, rc):
print(client, userdata, flags, rc)

def on_publish(client, userdata, mid):
print(client, userdata, mid)

def on_log(mqttc, obj, level, string):
print(mqttc, obj, level, string)

mqttc = mqtt.Client()
mqttc.on_log = on_log
mqttc.on_connect = on_connect
mqttc.on_publish = on_publish

# mqttc.username_pw_set(username="username", password="password")mqttc.connect(MQTT_HOST, MQTT_PORT, MQTT_KEEPALIVE_INTERVAL)
for i in range(0, 5000000):
MQTT_MSG = "data/%s" % i
mqttc.publish(MQTT_TOPIC, MQTT_MSG)
time.sleep(1)
mqttc.disconnect()




#!/usr/bin/python# -*- coding: utf-8 -*-
# MQTT Python Subscribe Örneği# Mese Bilisim
import paho.mqtt.client as mqtt

def on_message(mosq, obj, msg):
print("MESSAGE: " + msg.topic + " " + str(msg.qos) + " " + str(msg.payload))

mqttc = mqtt.Client()
mqttc.on_message = on_message
mqttc.connect("iothook.com", 1883, 60)
mqttc.subscribe("#", 0)
mqttc.loop_forever()