Tuesday, 8 September 2020

ESP8266 sebagai pengirim data dari Arduino ke Database SQL

Latar belakang permasalahan:

Saya mempunyai Arduino yang berfungsi sebagai pengolah data dari sensor. Kemudian saya ingin menyimpan data-data tersebut ke database SQL. Untuk bagian pembacaan sensor oleh Arduino sudah tidak ada masalah, tapi untuk menyimpan ke SQL bagaimanakah caranya? berikut adalah catatan saya dalam menemukan solusinya.. 

Sekilas mengenai ESP8266 :

Modul Wifi ESP8266 ini sebenarnya adalah sejenis Mikrokontroler juga, karena punya beberapa pin digital input/output, maupun analog dan pin serial. Kelebihan yang paling utama dari modul ini adalah sudah adanya Wifi, sehingga kita bisa memanfaatkannya untuk berkomunikasi dengan perangkat-perangkat lain selama terhubung dalam jaringan TCP/IP. 

Sebenarnya pada Arduino juga bisa kita pakai shield khusus untuk koneksi Ethernet TCP atau Wifi. Hanya karena pada saat ini saya belum bisa mendapatkan modul/shield tersebut maka saya memutuskan untuk memanfaatkan modul Wifi ESP8266 karena kebetulan sudah ada.

Baiklah mari kita mulai. Seperti inilah sistem yang akan kita buat :

- Arduino yang saya pakai adalah Arduino Uno
- modul ESP8266 yang saya pakai adalah NodeMCU Lolin
- IDE yang saya pakai untuk programming Arduino dan ESP adalah Arduino IDE,
- SQL database yang saya pakai adalah MySQL,
- web server platform yang saya pakai adalah Laragon.
- Laptop yang saya pakai sebagai Webserver sudah dilengkapi wifi,
- jaringan LAN saya gunakan Hotspot dari ponsel,
- dari Arduino ke ESP terhubung dengan koneksi Serial TTL
- dari ESP ke Webserver berkomunikasi dengan protokol HTTP POST.

 

Langkah-langkah :

1. Konfigurasi database MySQL

Dengan asumsi MySQL sudah terinstal di laptop/PC anda, mari kita masuk ke MySQL Workbench (atau bisa pakai HeidiSQL pada platform Laragon) untuk membuat database/schema baru dan beberapa tabel baru.  
- buat database/schema baru dengan nama ardulog 
- buat tabel baru dengan nama tblog dengan kolom-kolom berikut:




2. Konfigurasi Webserver Laragon

Bagi anda yang belum instal Laragon, silahkan download versi portable nya yaitu Laragon Mint dari situs resminya. Setelah itu jalankan aplikasi Laragon dan klik pada tombol Start All untuk mulai mengaktifkan Webserver. Selanjutnya kita akan membuat beberapa file PHP di dalam folder www di lokasi aplikasi Laragon dijalankan. 
- buat file connection.php lalu isi dengan script berikut:
<?php
$conn = new mysqli("localhost","root","123456","ardulog");

// Check connection
if ($conn -> connect_errno) {
  echo "Failed to connect to MySQL: " . $conn -> connect_error;
  exit();
}

?>
yang ditandai kuning adalah user MySQL dan Password-nya, silahkan diganti dengan user dan password anda.

- buat file server_log.php lalu isi dengan script berikut:

<?php
  include("connection.php");

  if(!empty($_POST)){
    $tag = $_POST["tag"];
    $value = $_POST["value"];
        
    $query = "INSERT INTO tblog (tag,value)
            VALUES ('".$tag."','".$value."')";
    if ($conn->query($query) === TRUE) {
      echo "Berhasil menyimpan data ke database";
    } else {
      echo "Error: " . $sql . "<br>" . $conn->error;
    }
  }
  
?>

3. Sketch ESP

Pasang kabel USB ke modul ESP, lalu buka Arduino IDE, pilih Board yang sesuai, saya pilih board NodeMCU 1.0 (ESP-12E Module). Pilih port COM yang sesuai. Tulis script/sketch berikut:

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
 
String ssid = "AndroidAP_HD";
String pass = "hadilina8";
String msg = "";  

void setup() {
  Serial.begin(9600);
  ConnectWifi();
}
void loop() {
  if(Serial.available()){      
    while(Serial.available()){
      msg += char(Serial.read());           
    }
  }
  if(msg.startsWith("*") && msg.endsWith("#")){
    Serial.println(msg);
    String cmd = msg;
    msg = "";
    if(cmd.substring(0,7)=="*>POST="){
      int len = cmd.length();
      String ns = cmd.substring(7,len-1);
      String spage = splitString(ns, '$', 0);
      String spost = splitString(ns, '$', 1);
      post2server(spage, spost);      
    }
  }  
}
void ConnectWifi(){    
  WiFi.begin(ssid, pass);
  int i=0;
  while(WiFi.status() != WL_CONNECTED) {
    delay(1000);
    i+=1;
    Serial.print(".");
    if(i>20){
      Serial.println("WiFi failed! ");
      return;
    }
  }
  Serial.println("");
  Serial.println("WiFi connected.");  
  Serial.println(WiFi.localIP());  
}
String splitString(String data, char separator, int index)
{
  int found = 0;
  int strIndex[] = { 0, -1 };
  int maxIndex = data.length() - 1;
  for (int i = 0; i <= maxIndex && found <= index; i++) {
      if (data.charAt(i) == separator || i == maxIndex) {
          found++;
          strIndex[0] = strIndex[1] + 1;
          strIndex[1] = (i == maxIndex) ? i+1 : i;
      }
  }
  return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
}
void post2server(String page, String postData)
{
  HTTPClient http; 
  http.begin(page);
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");
      
  int httpCode = http.POST(postData); 
  String payload = http.getString();  
      
  Serial.println(httpCode); 
  Serial.println(payload);  
      
  http.end();
}

    
yang saya tandai kuning adalah nama Access point (SSID) dan Password untuk Wifi, silahkan ganti dengan SSID dan Password hotspot wifi anda.
Upload sketch.

4. Sketch Arduino

Pasang kabel USB ke Arduino, lalu buka Arduino IDE, pilih Board yang sesuai, saya pilih board Arduino/Genuino Uno. Pilih port COM yang sesuai. Tulis script/sketch berikut:

#include "SoftwareSerial.h"

SoftwareSerial ss(2, 3);

int i;

void setup() {
  Serial.begin(9600);
  ss.begin(9600);
  i = 0;
}

void loop() {
  delay(10000);
  i += 1;
  String spost = "*>POST=";
  spost += "http://192.168.43.17/server_log.php";
  spost += "$";
  spost += "tag=loop";
  spost += "&value=";
  spost += i;
  spost += "#";
  ss.print(spost);
  Serial.println(spost);
}
yang saya tandai kuning adalah IP dari PC/laptop webserver, silahkan ganti dengan IP laptop anda. 
Upload sketch.

5. Menyambungkan kabel dari Arduino ke ESP

Pada script Arduino diatas, saya menggunakan pin digital 2 dan 3 untuk komunikasi serial ke ESP, jadi silahkan anda pasang kabel dari pin digital 2 Arduino ke pin serial TX pada ESP, dan pin digital 3 pada Arduino sambung ke pin serial RX pada ESP. 



Setelah Arduino dan ESP tersambung, maka Arduino akan mengirim POST setiap 10 detik sekali. Isinya berupa nilai loop yang akan terus bertambah. Jika tidak ada masalah maka table di MySQL akan bertambah setiap 10 detik sekali, seperti berikut: 



Jika menemukan masalah atau data tidak sampai ke SQL, coba reset Arduino dan atau ESP nya. 

Demikian dari kami.. selamat mencoba.. 


0 komentar:

Post a Comment

 
Copyright © . HadiSCADA - Posts · Comments
Theme Template by BTDesigner · Powered by Blogger