Arduino Kirim data ke MySQL via Ethernet

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.

Post Author: Laurensius Dede Suhardiman

Saya hanyalah orang bisa yang dilahirkan di sekitar kaki Gunung Ciremai, Kecamatan Cigugur, Kabupaten Kuningan. Tertarik dengan dunia IT pada saat duduk di bangku SMP. Telah lulus dari dari salah satu universitas ternama di Kota Bandung. Sempat bekerja sebagai freelancer bidang IT dan kini bekerja pada sebuah perusahaan perbankan. "Ngulik" / "ngoprek" tetap menjadi kegemaran saya sejak dulu :)

8 thoughts on “Arduino Kirim data ke MySQL via Ethernet

    Dito

    (23/04/2018 - 04:55)

    Mau tanya bang, saya kan ada projek untuk mengirim data sensor dari arduino ke database server menggunakan 3g shield (link :https://www.itead.cc/wiki/ITEAD_3G_Shield)
    la itu gimana konsepnya bang?
    terima kasih.

      Laurensius Dede Suhardiman

      (26/04/2018 - 04:29)

      Hello Dito, untuk konsep pada dasarnya nyaris sama saja seperti menggunakan ethernet maupun wifi.
      info lebih lanjut via Whatsapp saja ya di 087847328677. thanks

    Hans

    (10/05/2018 - 09:00)

    bang mau tanya, itu kabel FTDI nya connect kemana ya bang? sy pakai sensor gps neo bang.. mkasi sbelumnya bang

    erul

    (15/05/2018 - 07:35)

    mas itu script Arduino di flash ke arduino nya kan, terus itu IP diatas apakah IP server mysql?

      Laurensius Dede Suhardiman

      (02/06/2018 - 17:32)

      yups… script arduino pasti di flash ke arduino. untuk IP ada IP webserver ada iP si hardware. info lebih lanjut WA aja ke 087847328677

    lutfy

    (25/07/2018 - 08:01)

    untuk library dht nya bisa di lampirkan mas?

    efan

    (25/07/2018 - 09:13)

    Mas, boleh minta phpnya yang buat baca data yang dikirim dari arduino
    Kalau bisa mohon kirim ke email saya.

Komentar ditutup.