Arduino Kirim data ke MySQL via Ethernet

by | Jul 24, 2017 | Artikel, Artikel Arduino, Artikel Hardware, Tutorial | 8 comments

Arduino Kirim data ke MySQL dapat dilakukan dengan berbagai macam cara. Salah satunya adalah dengan menggunakan ethernet shield. Pada artikel kali ini saya akan sedikit memberikan informasi tentang Arduino Kirim data ke MySQL. Agar Arduino bisa kirim data ke MySQL diperlukan hal-hal berikut ini :

  • Arduino
  • Ethernet Shield
  • Kabel LAN
  • Kabel FTDI
  • Sensor, saya menggunakan DHT11 (Sensor Suhu dan Kelembaban)
  • Kabel (Wiring)
Langkah-langkah :

Pertama, pasang ethernet shield pada Arduino dan pastikan ethernet shieldnya terpasang dengan benar. Kedua, hubungkan pin data sensor DHT11 ke ke salah satu pin digital Arduino, pin VCC sensor ke Vout Arduino dan GND sensor ke GND Arduino. Awas! Jangan sampai terbalik pemasangannya. FYI, untuk pemasangan pin data sensor jangan dipasangkan ke pin 10,11,12 pada Arduino. Karena pin ini digunakan oleh ethernet shield.

Jika semuanya sudah terpasang dengan baik dan benar, kini saat nya kita coding. Buka Arduino SDK di komputernya, jika belum punya, bisa download di situs resmi Arduino nya.

Arduino Kirim Data Ke MySQL

Source Code Arduino Kirim data ke MySQL
#include<dht11.h>
#include <Ethernet.h>
#include <SPI.h>

#define DHT_SENSOR_PIN 2
#define STATUS_CONNECTED 1
#define STATUS_DISCONNECTED 0

char namaServer[] = "192.168.0.103";


byte IP_eth[] = {192,168,0,110};
byte MAC_eth[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };


int respon_dht11;
int counter = 0;

boolean startRead = false; 

char inString[32];
char charFromWeb[9];

dht11 sensor_dht;
EthernetClient myEthernet;

int iterasi = 0;

void setup(){
  Serial.begin(9600);
  Serial.println("--------------------------------------------------"); 
  Serial.println("Setting Perangkat");
  Serial.println("Mohon menunggu . . . ");
  Serial.println("Setting Ethernet MAC Address dan IP Address");
  Serial.println("Mohon menunggu . . . ");
  if (Ethernet.begin(MAC_eth) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(MAC_eth,IP_eth);
  }
  // Ethernet.begin(MAC_eth,IP_eth);
  Serial.println("Setting Sensor Suhu dan Kelembaban");
  Serial.println("Mohon menunggu . . . ");
  Serial.print("Versi Library DHT : ");
  Serial.println(DHT11LIB_VERSION);
  delay(1000);
  Serial.println("Setting Perangkat selesai!");
  Serial.println("--------------------------------------------------");
}

void loop() {
  iterasi++;
  Serial.print("Iterasi ke : ");
  Serial.println(iterasi);
  inisialisasi_dht11();
  String a = ambil_data_dht11();
  int resultBukaKoneksi = bukaKoneksi();
  if(resultBukaKoneksi==1){
    kirimData(a);
    Serial.println();
  }
  delay(1000); 
  Serial.println("--------------------------------------------------");
}

int bukaKoneksi(){
  Serial.print("Mencoba sambungan ke server http://"); 
  Serial.println(namaServer);  
  Serial.println("Mohon menunggu . . . ");
  if(myEthernet.connect(namaServer,80)){
    Serial.println("Sambungan ke server berhasil!");
    return STATUS_CONNECTED; 
  }
  else{
    Serial.print("Sambungan ke server gagal!");
    Serial.println();
    return STATUS_DISCONNECTED;
  }
  delay(1000);
}

void kirimData(String a){
  Serial.println("Menjalankan perintah kirim data");
  String data = " Arduino";
  int ln = data.length();
  String uri_segment;
  uri_segment = "/iot_server/index.php/device/post_data/" + a; 
  myEthernet.print("GET ");
  myEthernet.print(uri_segment); 
  delay(1000);
  Serial.print("Data yang dikirim di ke server : ");
  Serial.println(a);
  myEthernet.println(" HTTP/1.0");
  myEthernet.print( "Host: " );
  myEthernet.println(" 192.168.0.103 \r\n");
  Serial.println("Host OK");
  myEthernet.println( "Content-Type: application/x-www-form-urlencoded \r\n" );
  Serial.println("Content type OK");
  myEthernet.print( "Content-Length: " );
  myEthernet.print(ln);
  myEthernet.print(" \r\n");
  myEthernet.println( "Connection: close" );
  myEthernet.println();
  String res;
  res = bacaWebText();
  if(!res.equals("")){
    Serial.println("Data suhu dan kelembaban tersimpan.");
    Serial.print("Jumlah rows database ada : ");
    Serial.println(res);
  }
}

String bacaWebText(){
  unsigned int time;
  Serial.println("Baca respon dari server . . . "); 
  Serial.println("Mohon menunggu . . . ");
  time = millis();
  Serial.print("Timer Millis () : ");
  Serial.println(time);
  int stringPos = 0;
  memset( &inString, 0, 32 );
  int unvailable_ctr = 0;
  while(true){
    if (myEthernet.available()) {
      char c = myEthernet.read();
      Serial.print(c);
      if (c == '#' ) { 
        Serial.print("Menemukan start key # dengan isi : ");
        startRead = true;  
      }
      else if(startRead){
        if(c != '^'){ 
          inString[stringPos] = c;
          stringPos ++;
        }
        else{
          startRead = false;
          Serial.println();
          Serial.println("Baca respon dari server selesai!");
          myEthernet.stop();
          myEthernet.flush();
          Serial.println("Sambungan diputuskan . . . ");
          return inString;
        }
      }
    }
    else{
      //Serial.println("ethernet unavailable");
      delay(50);
      unvailable_ctr++;
      if(unvailable_ctr == 25){
        myEthernet.stop();
        myEthernet.flush();
        Serial.println("Koneksi mengalami time out");
        Serial.println("Sambungan diputuskan . . . ");
        Serial.println("Reset...");
        return inString;
      }
    }
  }
  delay(1000);
}

void inisialisasi_dht11(){
  respon_dht11 = sensor_dht.read(DHT_SENSOR_PIN);
  switch (respon_dht11){
  case DHTLIB_OK:  
    Serial.println("Sensor DHT status : OK"); 
    break;
  case DHTLIB_ERROR_CHECKSUM: 
    Serial.println("Sensor DHT status : Checksum error"); 
    break;
  case DHTLIB_ERROR_TIMEOUT: 
    Serial.println("Sensor DHT status : Time out error"); 
    break;
  default: 
    Serial.println("Sensor DHT status : Unknown error"); 
    break;
  }
  delay(1000);
}

String ambil_data_dht11(){
  Serial.print("Temperatur : ");
  Serial.print(sensor_dht.temperature);
  Serial.print(",\t");
  Serial.print("Kelembaban : ");
  Serial.print(sensor_dht.humidity);
  Serial.print(",\t");
  Serial.print("Kelembaban : ");
  Serial.println(dewPoint(sensor_dht.temperature,sensor_dht.humidity));
  delay(2000);
  String temperature = String(sensor_dht.temperature);
  String humidity = String(sensor_dht.humidity);
  String dew_point = String(dewPoint(sensor_dht.temperature,sensor_dht.humidity));
  String data = temperature + "/" + humidity + "/" + dew_point + "/" ;
  return data;
}

double dewPoint(double celsius, double humidity){
  double RATIO = 373.15 / (273.15 + celsius);
  double RHS = -7.90298 * (RATIO - 1);
  RHS += 5.02808 * log10(RATIO);
  RHS += -1.3816e-7 * (pow(10, (11.344 * (1 - 1/RATIO ))) - 1) ;
  RHS += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO - 1))) - 1) ;
  RHS += log10(1013.246);
  double VP = pow(10, RHS - 3) * humidity;
  double T = log(VP/0.61078);   
  return (241.88 * T) / (17.558 - T);
}

Source Code Arduino Kirim data ke MySQL (untuk Web Server) :

Pada artikel ini, Arduino kirim data ke MySQL melalui jaringan LAN. Agar data yang dikirim dari Arduino dapat masuk ke database MySQL, di sini saya juga membuat sebuah program menggunakan bahasa pemrograman PHP. Fungsi utama dari program ini adalah menerima data yang dikirimkan dari Arduino via Ethernet (LAN) dan menjalankan query-query (perintah dasar SQL / database) sehingga data dapat tersimpan ke dalam database. Dengan kata lain, aplikasi dengan PHP ini merupakan aplikasi yang bekerja dari sisi server, sedangkan arduino (dan ethernet) bekerja pada sisi client. Untuk mendapatkan aplikasi PHP ini, Anda bisa request melalui kontak WA saya di 085720015270.