Menyimpan data Arduino ke database MySQL

arduino mysql database
Pada kesempatan kali ini, saya akan mencoba share mengenai metode penyimpanan data dari arduino ke MySQL database. Mengapa harus disimpan di database? Hal ini untuk memudahkan pengolahan data ke tahap selanjutnya seperti pembuatan grafik atau tabel yang digunakan sebagai acuan komparasi perubahan nilai dari waktu ke waktu tertentu, dan sebagainya. Sebagai contohnnya saya akan menggunakan sensor DHT 22 yang basicnya dapat dilihat pada posting berikut. Agar lebih mudah dalam mempelajari tutorial berikut, diharapkan terlebih dahulu untuk mempelajari mengenai database dan pemrograman web. Namun saya akan mencoba memaparkan dengan bahasa yang mudah dipahami sehingga diharapkan dapat mengikuti sambil belajar.

1. Alat dan Bahan
Untuk tools yang digunakan adalah ARDUINO UNO, ETHERNET SHIELD W5100, DHT22, LCD 16X2 with I2C Driver. Untuk bagian server database silahkan disiapkan XAMPP, TEXT EDITOR (NOTEPAD ++).

2. Konfigurasi Database
Download Xampp(saya menggunakan versi 5.6.40) lalu install dan jalankan. Jalankan service untuk modul apache dan MySQL.
arduino mysql database
arduino mysql database

Buka browser kemudian akses phpMyAdmin. http://localhost/phpmyadmin/ . maka akan tampil halaman dashboard phpMyAdmin seperti berikut.
arduino mysql database

Sekarang kita lanjut untuk membuat database yang nantinya akan digunakan untuk menyimpan data suhu dan kelembaban dari arduino. Nama databasenya adalah arduino_sensor, nama tabelnya adalah dht_data, dengan 4 kolom didalamnya yaitu id, waktu, kelembaban, dan suhu. Klik tombol Home dan pilih menu SQL
arduino mysql database

pada query SQL tuliskan kode berikut untuk membuat databasenya. selanjutnya pilih Go. Kalau berhasil maka akan ada keterangan checklist hijau.

CREATE DATABASE arduino_sensor;
 CREATE TABLE arduino_sensor.dht_data (
    id integer primary key auto_increment,
 waktu timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    kelembaban float,
    suhu float
  );
arduino mysql database

Langsung saja kita cek databasenya dengan pilih home => Databases => pilih arduino_sensor => pilih dht_data. Maka akan terlihat tabel sederhana yang masih kosong.
arduino mysql database

3. PHP Script untuk insert data ke database
Untuk melakukan proses insert data ke MySQL terdapat beberapa metode, silahkan dibaca-baca disini. Sementara untuk perolehan datanya saya akan menggunakan metode GET dari parameter yang kita masukkan dalan URL (lebih jelasnya silahkan main kesini). Siapkan folder untuk menyimpan script php (disini saya buat folder namanya arduino_mysql)  di direktori C:\xampp\htdocs
arduino mysql database
Buka folder tersebut kemudian buat file control.php . Buka file tersebut dengan notepad ++ , isi dengan script berikut. Untuk koneksi ke mysql pastikan username dan passowrd telah sesuai. Secara default username= 'root' dan password = ' ' sehingga ditulis mysqli_connect('localhost','root',' ')

<?php
class dht22{
 public $link='';
 function __construct($suhu, $kelembaban){
  $this->connect();
  $this->storeInDB($suhu, $kelembaban);
 }
 
 function connect(){
  $this->link = mysqli_connect('localhost','root','') or die('Cannot connect to the DB');
  mysqli_select_db($this->link,'arduino_sensor') or die('Cannot select the DB');
 }
 
 function storeInDB($suhu, $kelembaban){
  $query = "insert into dht_data set kelembaban='".$kelembaban."', suhu='".$suhu."'";
  $result = mysqli_query($this->link,$query) or die('Errant query:  '.$query);
  if($result === TRUE){echo "Data Tersimpan";}else{echo "Gagal Menyimpan data";}
 }
 
}
if($_GET['dataSuhu'] != '' and  $_GET['dataKelembaban'] != ''){
 $dht22=new dht22($_GET['dataSuhu'],$_GET['dataKelembaban']);
}

?>
arduino mysql database
arduino mysql database

OK. Sekarang kita bisa ujicoba script diatas dengan menggunakan URL melalui web browser denganmengakses = http://localhost/arduino_mysql/control.php?dataKelembaban=Nilai_kelembaban&dataSuhu=Nilai_suhu , misal kita kasih nilai kelembaban =90 dan nilai suhu = 27 , maka tinggal dimasukkan saja http://localhost/arduino_mysql/control.php?dataKelembaban=90&dataSuhu=27  
Kalau berhasil maka akan ada keterangan seperti gambar berikut
arduino mysql database

Mari kita chek di database apakah sudah tersimpan atau cuma tipu-tipu? Dan ternyata data sudah ter record ya.. Selanjutnya mari kita oprek bagian arduinonya.
arduino mysql database

4. Server IP Adddress Setting
Sesuai dengan dasar komunikasi jaringan komputer, agar suatu perangkat dapat berkomunikasi dengan perangkat lain dalam suatu jaringan, maka perangkat-perangkat tersebut harus memiliki IP address yang satu kelas. Lebih mudahnya mari kita definisikan untuk IP komputer kita adalah 192.168.10.10 dan IP untuk arduino adalah 192.168.10.5. Jadi ubah pengaturan IP pada PC menjadi static dengan IP 192.168.10.10 . Detail cara mengubah IP address pada windows 10 dapat dilihat disini.
arduino mysql connection

5. Wiring Schematic
Untuk wiringnya dapat dilihat pada gambar dibawah.
arduino mysql connection
6. Arduino Program
Pastikan terlebih dahulu telah menginstall library yang dibutuhkan yaitu DHT dan LiquidCrystal_I2C.

/* Arduino Send data to mysql server */
#include "DHT.h"
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //MAC Address

#define DHTPIN 2
#define DHTTYPE DHT22

DHT dht(DHTPIN,DHTTYPE);

float DataKelembaban;
float DataSuhu;

int period = 30000; //interval simpan data ke db
unsigned long time_now = 0;

unsigned long byteCount = 0;
bool printWebData = true;  // set to false for better speed measurement


char server[] = "192.168.10.10";
IPAddress ip(192,168,10,5); //arduino IP
EthernetClient client; 

void setup() {
  Serial.begin(115200);
  dht.begin();
  lcd.begin();

  //intro gak penting
  lcd.setCursor(0,0);
  lcd.print("   Temperature");
  lcd.setCursor(0,1);
  lcd.print("     Monitor");
  
  Ethernet.begin(mac, ip);
  Serial.print("Local IP: ");
  Serial.println(Ethernet.localIP());
  delay(2000);
  lcd.clear();
}

void loop(){
  DataKelembaban = dht.readHumidity();
  DataSuhu = dht.readTemperature(); 
  String print_temp = "Temp: ";  print_temp += String(DataSuhu); print_temp += " C";
  String print_humd = "Humd: ";  print_humd += String(DataKelembaban); print_humd += " %";
  lcd.setCursor(0,0);  lcd.print(print_temp);
  lcd.setCursor(0,1);  lcd.print(print_humd);
  if(millis() >= time_now + period){
    time_now += period;
    SendtoDB();
  } 
  int len = client.available();
  if (len > 0) {
        byte buffer[80];
        if (len > 80) len = 80;
        client.read(buffer, len);
        if (printWebData) {
          Serial.write(buffer, len); // show in the serial monitor (slows some boards)
        }
        byteCount = byteCount + len;
  } 
  
}

//insert data ke DB via injeksi control.php
void SendtoDB(){
   if (client.connect(server, 80)) {
    Serial.println("");
    Serial.println("connected");
    // Make a HTTP request:
    Serial.print("GET /arduino_mysql/control.php?dataKelembaban=");
    Serial.print(DataKelembaban);
    Serial.print("&dataSuhu=");
    Serial.println(DataSuhu);
    Serial.println("");
    
    client.print("GET /arduino_mysql/control.php?dataKelembaban=");     //YOUR URL
    client.print(DataKelembaban);
    client.print("&dataSuhu=");
    client.print(DataSuhu);
    client.print(" ");      //SPACE BEFORE HTTP/1.1
    client.print("HTTP/1.1");
    client.println();
    client.println("Host: 192.168.10.5");
    client.println("Connection: close");
    client.println();
  } else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
 }

7. Hasil
Setelah proses upload selesai dan tidak ada masalah, maka program akan bekerja. Pastikan kabel LAN telah tersambung antara arduino dengan komputer. Apabila dilihat dari serial Monitor hasilnya kurang lebih seperti ini
Menyimpan data Arduino ke  database MySQL
Sementara apabila kita cek ke database akan terlihat beberapa data yang masuk.
Arduino Send Data to MySQL databases
Arduino Send Data to MySQL databases
Arduino Send Data to MySQL databases
Script program PHP diatas merupakan program sederhana. kamu juga bisa menggunakan contoh yang lebih tersetruktur dalam PHP Rest API seperti di post berikut.