Menyimpan data Arduino ke database MySQL
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.
Buka browser kemudian akses phpMyAdmin. http://localhost/phpmyadmin/ . maka akan tampil halaman dashboard phpMyAdmin seperti berikut.
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
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 );
Langsung saja kita cek databasenya dengan pilih home => Databases => pilih arduino_sensor => pilih dht_data. Maka akan terlihat tabel sederhana yang masih kosong.
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
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',' ')
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
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']); } ?>
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
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.
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.
5. Wiring Schematic
Untuk wiringnya dapat dilihat pada gambar dibawah.
6. Arduino Program
Pastikan terlebih dahulu telah menginstall library yang dibutuhkan yaitu DHT dan LiquidCrystal_I2C.
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
Sementara apabila kita cek ke database akan terlihat beberapa data yang masuk.
Script program PHP diatas merupakan program sederhana. kamu juga bisa menggunakan contoh yang lebih tersetruktur dalam PHP Rest API seperti di post berikut.
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.
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.
5. Wiring Schematic
Untuk wiringnya dapat dilihat pada gambar dibawah.
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
Sementara apabila kita cek ke database akan terlihat beberapa data yang masuk.
Script program PHP diatas merupakan program sederhana. kamu juga bisa menggunakan contoh yang lebih tersetruktur dalam PHP Rest API seperti di post berikut.
31 komentar
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");
error: 'SendtoDB' was not declared in this scope
SendtoDB();
^
error: a function-definition is not allowed here before '{' token
void SendtoDB(){
^
error: expected '}' at end of input
}
^
exit status 1
'SendtoDB' was not declared in this scope
atau silahkan menggunakan server online...
atw ada yagn harus di rubah dulu gtu?
2. cb nonaktifkan firewall