Komunikasi dua arah Arduino dengan Web Browser menggunakan MySQL, XAMPP/web hosting dan ESP8266

Untuk komunikasi jarak jauh atau komunikasi tanpa kabel menggunakan Arduino bisa menggunakan ESP8266 (wifi shield) yang akan menghubungkan arduino ke internet/jaringan lokal. Disamping itu harus pula dibangun server yang berfungsi sebagai penyedia layanan sehingga sistem komunikasi bisa berjalan timbal balik. Dalam server juga dibutuhkan media untuk merekam komunikasi tersebut, salah satu yang populer adalah database MySQL. Ini adalah salah satu cara menghubungkan arduino dengan database yang paling efisien.

Menghubungkan MySQL – Arduino dibutuhkan bahasa php sebagai penerjemah query (bahasa database), baik permintaan (GET request) dari arduino – MySQL dan web browser – MySQL. Jika skema ini sudah terbangun maka kita bisa mengkomunikasikan arduino – web browser (lokal / internet).

Menyimpan data dari arduino ke mysql esp8266 bisa dilaksanakan dengan cara ini, data dari arduino ditransmisikan melalui jaringan wifi dan diterima oleh web server. Data tersebut kemudian di proses oleh php dan juka diizinkan maka data tersebut akan disimpan dalam database.

Mengirim perintah dari browser ke arduino dengan esp8266 juga dapat dilakukan dengan cara sebaliknya.

Webserver yang digunakan dalam perancangan ini adalah XAMPP di PC lokal dan jasa server hosting.

Langkah perancangannya sebagai berikut:

  1. Merangkai Arduino + ESP8266
  2. Membuat sketch Arduino untuk mengirim dan menerima data dari database
  3. Konfigurasi koneksi ESP8266 ke access point wifi (AP)
  4. Install XAMPP server dan mengaktifkannya
  5. Untuk web server hosting, membuat database, user account dan priveleged-nya
  6. Membuat program php, dariArduino.php, keArduino.php, dariBrowser.php serta program php pendukung.

Arduino + ESP8266

Rangkaian yang digunakan:

Diagram:

Untuk menghubungkan arduino dengan jaringan, salah satu yang bisa digunakan adalah modul wifi shiel ESP8266. kali ini saya menggunakan library “WiFiEsp.h”.

Catatan, untuk terhubung ke web hosting, pastikan wifi terhubung ke internet (bridge connection)

sebelum menggunakannya konfigurasi dahulu modul tersebut, editlah bagian berikut:


char ssid[] = "ArduinoMySQL";        // Isi dengan nama profil Wifi
char pass[] = "12345678";            // password wifi
//char server[] = "192.168.123.1";     // alamat access point yang 
char server[] = "semesin.com";     // alamat server hosting 

sketch atau program berikut memiliki fitur:

  1. Menerima masukan string/text dari serial monitor dan mengirimkannya ke webserver untuk disimpan ke database MySQL.
  2. Menerima data perintah dari webserver dalam jangka waktu tertentu contoh kali ini setiap 5 detik.

sketch atau program lengkapnya sebagai berikut:

#include "WiFiEsp.h"

char ssid[] = "ArduinoMySQL";        // Isi dengan nama profil Wifi
char pass[] = "12345678";            // password wifi
//char server[] = "192.168.123.1";     // alamat access point yang telah terinstall XAMPP local host
char server[] = "semesin.com";     // alamat web hosting

char namaVariabel[] = "Variabel";
String text = "";
String Respon = "";
bool responDariServer = false;

bool statusKomunikasiWifi = false;
long waktuMulai;
long waktuMintaData = 5000; //minta data setiap 5000ms

WiFiEspClient client;
int status = WL_IDLE_STATUS;

void setup()
{
  Serial.begin(9600);
  Serial.println("Koneksi arduino dengan mySql menggunakan ESp8266 dan XAMPP");
  Serial.println("Ketik pesan yang akan dikirim (pastikan setting serial ke \"both NL & CR\")");
  Serial.println("http://www.semesin.com/project");
  Serial.println();

  Serial1.begin(115200);
  WiFi.init(&Serial1);

  // check for the presence of the shield
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue
    while (true);
  }

  // attempt to connect to WiFi network
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network
    status = WiFi.begin(ssid, pass);
  }

  // you're connected now, so print out the data
  Serial.println("You're connected to the network");
  
  printWifiStatus();
  waktuMulai = millis();
}

void loop()
{
  //tunggu imputan nilai dari untuk dikirim ke server
  while(Serial.available())
  {
    char c = Serial.read();
    if((c != '\r') && (c != '\n'))
    {
      text += c;
    }
    if(c == '\n')
    {
      statusKomunikasiWifi = kirimKeDatabase("dataDariSerial",text);
      text = "";
      waktuMulai = millis();
    }
  }

  if(waktuMintaData < millis() - waktuMulai)
  {
    statusKomunikasiWifi = ambilDatabase("perintah");
    waktuMulai = millis();
  }
  
  // periksa respon dari server
  if(statusKomunikasiWifi)
  {
    // if there are incoming bytes available
    // from the server, read them and print them
    while (client.available()) 
    {
      char c = client.read();
      Respon += c;
    }
  
    // if the server's disconnected, stop the client
    if (!client.connected()) {
      Serial.println("Disconnecting from server...");
      client.stop();
      statusKomunikasiWifi = false;
      responDariServer = true;
    }
  }

  // penanganan data yang diretima dari server
  if(responDariServer)
  {
    responDariServer = false;
    //Serial.println(Respon);
    int posisiData = Respon.indexOf("\r\n\r\n");
    String Data = Respon.substring(posisiData+4);
    Data.trim();

    String variabel;
    String nilai;

    Serial.println("Data dari server");
    posisiData = Data.indexOf('=');
    if(posisiData > 0)
    {
      variabel = Data.substring(0,posisiData);
      nilai = Data.substring(posisiData+1);
  
      //===========Penanganan respon disini
      Serial.print(variabel);
      Serial.print(" = ");
      Serial.println(nilai);
    }
    Respon = "";
  }
}
bool ambilDatabase(String variabel)
{
  Serial.println();
  Serial.println("Starting connection to server...");
  // if you get a connection, report back via serial
  if (client.connect(server, 80)) {
    Serial.println("Connected to server");
    // Make a HTTP request
    client.print("GET /arduino_mysql/keArduino.php?variabel=");
    client.print(variabel);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(server);
    client.println("Connection: close");
    client.println();

    long _startMillis = millis();
    while (!client.available() and (millis() - _startMillis < 2000));

    return true;
  }
  return false;
}

bool kirimKeDatabase(String namaVariabel, String nilai)
{
  Serial.println();
  Serial.println("Starting connection to server...");
  // if you get a connection, report back via serial
  if (client.connect(server, 80)) {
    Serial.println("Connected to server");
    // Make a HTTP request

    // parameter 1
    client.print("GET /arduino_mysql/dariArduino.php?");
    client.print("variabel=");
    client.print(namaVariabel);
    
    // parameter 2 dan selanjutnya
    client.print("&");
    client.print("nilai=");
    client.print(nilai);
    
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(server);
    client.println("Connection: close");
    client.println();

    return true;
  }
  return false;
}

void printWifiStatus()
{
  // print the SSID of the network you're attached to
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength
  long rssi = WiFi.RSSI();
  Serial.print("Signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");

  IPAddress gateway = WiFi.gatewayIP();
  Serial.print("gateway:");
  Serial.print(gateway);
  Serial.println(" ");
}

tampilan serial monitor dari arduino:

 

XAMPP webserver + database MySQL

untuk membuat webserver di komputer lokal instal XAMPP (saya menggunakan v3.2.2) atau bundel webserver lain yang termasuk didalamnya MySQL.

untuk memulainya jalankan/aktifkan webserver dan MySQL

 

Web Hosting + Database MySQL

catatan: huruf besar/kecil berpengaruh (case-sensitif)

Server hosting umumnya memiliki fitur kemanan, untuk itu kita harus masuk ke cpanel kemudian membuat sebuah database dengan memilih menu ‘MySQL® Database Wizard‘ dan mengisi nama database, misalnya ‘arduino_mysql’.

selanjutnya ‘next step’ buatlah akun dengan memasukkan nama dan paswword (nama dan password ini akan dimasukkan ke ‘fungction.php’).

selanjutnya prilih privileges yang akan digunakan.

sebagai webserver dan database server yang akan berhubungan timbal balik dengan arduino, maka kita buat halaman web berbasis bahasa PHP dan memiliki fitur:

  1. Menerima data dari Arduino menggunakan metode ‘GET’ dengan parameter ‘variabel’, ‘nilai’, dan ‘status’.
  2. Menyimpan data dari entri data di webserver, dan akan mengirimkannya ke Arduino saat diminta.
  3. Menyedian halaman tampilan database ke halaman web.

fitur-fitur ini saya buatkan dalam beberapa program PHP, untuk menggunakannya extract file Arduino MySQL dan copy ke folder “/arduino_mysql” (untuk XAMPP root folder “C:\xampp\htdocs\arduino_mysql”, untuk web hosting “public_html/arduino_mysql”) dengan program berikut:

file php yang digunakan diuraikan disini:

function.php

sebelum menggunakan file ini edit dahulu bagian sesuai kebutuhan:

    $servername = "localhost";
    $username = "******_Arduino";
    $password = "Arduino";
    $database = "******_arduino_mysql";

kode lengkap function.php

  <?php

 function databaseConnect()
  {
    /* XAMPP
    $servername = "localhost";
    $username = "root";
    $password = "";
    $database = "arduino_mysql";
    */
    
    $servername = "localhost";
    $username = "******_Arduino";
    $password = "Arduino";
    $database = "******_arduino_mysql";
    
    // Create connection
    $conn = new mysqli($servername, $username, $password);

    // Check connection
    if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
    }
    echoDebug("Connected successfully<br>");
    
    // Create database
    $sql = "CREATE DATABASE IF NOT EXISTS ".$database;
    if ($conn->query($sql) === TRUE) {
      echoDebug("Database created successfully<br>");
    } else {
      echoDebug("Error creating database: " . $conn->error);
    }
    
    // Connect to database
    $conn = new mysqli($servername, $username, $password, $database);
    // Check connection
    if ($conn->connect_error) {
      die("Database connection failed: " . $conn->connect_error);
    }
    echoDebug("Database connected successfully<br>");
    
    // sql to create table
    $sql = "CREATE TABLE IF NOT EXISTS arduino_data (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    variabel VARCHAR(30) NOT NULL,
    nilai VARCHAR(30) NOT NULL
    )";
    
    if ($conn->query($sql) === TRUE) {
      echoDebug("Table arduino_data created successfully</br>");
    } else {
      echoDebug("Error creating table: " . $conn->error);
    }
    // sql to create table
    $sql = "CREATE TABLE IF NOT EXISTS browser_data (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    variabel VARCHAR(30) NOT NULL,
    nilai VARCHAR(30) NOT NULL
    )";
    
    if ($conn->query($sql) === TRUE) {
      echoDebug("Table arduino_data created successfully</br>");
    } else {
      echoDebug("Error creating table: " . $conn->error);
    }
    return $conn;
  }
  function echoDebug($message) 
  {
    // hapus komen '//' jika ingin men-debug pesan
    //echo $message;
  }
?> 

index.php

 <?php
  include("function.php");
  
  $conn = databaseConnect();

  if(isset($_GET['message']))
  {
    echo $_GET['message'];
    echo "<br>";
    echo "<br>";
  }
  $sql = "SELECT * FROM arduino_data";
  $result = $conn->query($sql);

  echo "<html>";
  echo "<head>";
  echo "<meta http-equiv='refresh' content='10'>";
  echo "</head>";
  echo "<body>";
  echo "Arduino Data";
  echo "<table border='1'>";
  echo "<tr>";
  echo "<td width='50'>id</td><td width='100'>Variabel</td><td width='200'>Nilai</td>";
  echo "</tr>";
  if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
      echo "<tr>";
      echo "<td>".$row["id"]."</td><td>".$row["variabel"]."</td><td>".$row["nilai"]. "</td>";
      echo "</tr>";
    }
  } else {
    echo "<td colspan='3'>";
    echo("tidak ada hasil");
    echo "</td>";
  }
  echo "</table>";
  
  echo "<form action='dariBrowser.php' method=GET>";
  echo "<input type='hidden' name='aksi' value='hapus'><br>";
  echo "<input type='submit' value='Hapus semua data'>";
  echo "</form>";

  echo "<br>Kirim data ke Arduino<br>";
  echo "<form action='dariBrowser.php' method=GET>";
  echo "Nama variabel:<br><input type='text' name='variabel'><br>";
  echo "Nilai:<br><input type='text' name='nilai'><br>";
  echo "<input type='submit' value='Kirim'>";
  echo "</form>";
  echo "</body>";
  echo "</html>";

  $conn->close();
?> 

keArduino.php

 <?php
  include("function.php");
  
  $conn = databaseConnect();
  
  // Kirim respon bila ada
  if(isset($_GET["variabel"]))
  {
    $variabel = $_GET["variabel"];
    $sql = "SELECT * FROM browser_data WHERE variabel='".$variabel."'";

    if($result = $conn->query($sql))
    {
      $row = $result->fetch_assoc();
      echo $row["variabel"]."=".$row["nilai"];
    }
  }
  
  $conn->close();
?> 

dariArduino.php

 <?php
  include("function.php");
  
  $conn = databaseConnect();
  
  if(isset($_GET["variabel"]) && isset($_GET["nilai"]))
  {
    // Simpan data yang diterima ke database
    $variabel = $_GET["variabel"];
    $nilai = $_GET["nilai"];

    $sql = "INSERT INTO arduino_data (variabel, nilai) VALUES ('".$variabel."', '".$nilai."')";

    if ($conn->query($sql) === TRUE) {
      echoDebug("New record created successfully</br>");
    } else {
      echoDebug("Error: " . $sql . "<br>" . $conn->error);
    }
  }
  $conn->close();
?> 

dariBrowser.php

 <?php
  include("function.php");
  
  $conn = databaseConnect();
  
  if(isset($_GET["variabel"]) && isset($_GET["nilai"]))
  {
    // Simpan data yang diterima ke database
    $variabel = $_GET["variabel"];
    $nilai = $_GET["nilai"];
    
    $sql = "SELECT * FROM browser_data WHERE variabel='".$variabel."'";
    $result = $conn->query($sql);

    if ($result->num_rows > 0)
    {
      $sql = "UPDATE browser_data SET nilai='".$nilai."' WHERE variabel='".$variabel."'";
      if ($conn->query($sql) === TRUE) {
        echoDebug("Record updated successfully</br>");
      } else {
        echoDebug("Error updating record: " . $sql . "<br>" . $conn->error);
      }
    }
    else
    {
      $sql = "INSERT INTO browser_data (variabel, nilai) VALUES ('".$variabel."', '".$nilai."')";
      if ($conn->query($sql) === TRUE) {
        echoDebug("New record created successfully</br>");
      } else {
        echoDebug("Error: " . $sql . "<br>" . $conn->error);
      }
    }
      echo "<script type='text/javascript'> document.location = 'index.php?message=Entri data berhasil'; </script>";
    exit();
  }
  else if(isset($_GET['aksi']))
  {
    if($_GET['aksi'] == "hapus")
    {
      // sql to delete a record
      $sql = "TRUNCATE arduino_data";

      if ($conn->query($sql) === TRUE) {
        echoDebug("Record deleted successfully");
      } else {
        echoDebug("Error deleting record: " . $conn->error);
      }
      echo "<script type='text/javascript'> document.location = 'index.php?message=database telah dikosongkan'; </script>";
      exit();
    }
  }
  $conn->close();
?> 

Cara penggunaan

  • Nyalakan wifi (pastikan terhubung ke internet)
  • Masukkan perintah dari serial monitor, data akan tercatat dalam tabel ‘arduino_data’, dalam contoh ini nama variabelnya adalah ‘dataDariSerial’ dengan nilai sesuai dengan entry dari Serial monitor (pastikan setting serial ke “both NL & CR”)
  • Buka halaman “localhost/arduino_mysql/” atau “**nama server**/arduino_mysql/” di browser untuk melihat data yang dikirim dari arduino.
  • Masukan perintah dari formulir di halaman web, dan klik kirim untuk mengirim data ke Arduino, (dalam contoh ini arduino membaca variabel ‘perintah’ jadi masukkan nama variabel sebagai ‘perintah’ serta isikan juga kotak ‘nilai’nya)
  • Arduino akan membaca perintah setiap 5 detik dan akan dilaporkan di Serial monitor.

tampilan halaman web:

library : WiFiEsp.zip

Bagikan Link halaman ini :

216 thoughts on “Komunikasi dua arah Arduino dengan Web Browser menggunakan MySQL, XAMPP/web hosting dan ESP8266

  1. Selamat malam mas, saya udah ngikutin sesuai tutor di atas code nya tapi saya make rfid di kirim ke database, untuk database local sudah bisa, tetapi ke hosting tidak bisa mas, saya make framework codeigniter tetapi file untuk menghubungkan arduino dan server saya pisah tidak saya satuin dengan CI, jadi CI khusus nanti hanya mengambil data dari database setelah data bisa terkirim ke database.
    Kira-kira salah dimana ya mas.

  2. Mas kenapa ketika berhasil sekali mengirmkan data. terus ketika data berikut nya “No Socket available” data nya menjadi tidak terkirim mas.

  3. mas, setelah saya upload program di arduino ada notif error gini mas:
    error: ‘WiFiEspClient’ does not name a type
    WiFiEspClient client;

  4. Mantap mas udah bisa
    Tapi permasalahan utama saya itu saat upload program ke esp8266 nya mas.
    di buat perintah AT command sudah bisa (pas cuman program kosongan), kalo mau upload program sebenernya malah error terus mas.
    saya udah coba beberapa step sampai flashing modul esp saya dari internet, tapi masih tetep ga bisa mas. mungkin mas asep punya solusi. makasih mas.

    Errornya :
    error: failed reading byte
    warning: espcomm_send_command: cant receive slip payload data
    error: failed reading byte
    warning: espcomm_send_command: cant receive slip payload data

    #kadang cuman gini aja mas kalo rangkaiannya saya ubah
    warning: espcomm_sync failed
    error: espcomm_open failed
    error: espcomm_upload_mem failed

    1. esp8266-nya jenis apa / board apa?
      rekomendasi flash (datasheet)
      GPIO15-LOW
      GPIO0-HIGH
      GPIO2-HIGH
      Penggunaan standar arduino (komunikasi Serial melalui rx-tx)
      GPIO15-LOW
      GPIO0-LOW
      GPIO2-HIGH

  5. Arduino: 1.6.5 (Windows 8.1), Board: “Generic ESP8266 Module, 80 MHz, Flash, Disabled, ck, 26 MHz, 40MHz, DOUT (compatible), 512K (no SPIFFS), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200”

    In file included from C:\Users\Muh inwan suaidy\Documents\Arduino\libraries\WiFiEsp\src/WiFiEsp.h:29:0,
    from TAku.ino:1:
    C:\Users\Muh inwan suaidy\Documents\Arduino\libraries\WiFiEsp\src/WiFiEspServer.h:41:16: error: invalid abstract return type for member function ‘WiFiEspClient WiFiEspServer::available(uint8_t*)’
    WiFiEspClient available(uint8_t* status = NULL);
    ^
    In file included from C:\Users\Muh inwan suaidy\Documents\Arduino\libraries\WiFiEsp\src/WiFiEsp.h:28:0,
    from TAku.ino:1:
    C:\Users\Muh inwan suaidy\Documents\Arduino\libraries\WiFiEsp\src/WiFiEspClient.h:30:7: note: because the following virtual functions are pure within ‘WiFiEspClient’:
    class WiFiEspClient : public Client
    ^
    In file included from C:\Users\Muh inwan suaidy\Documents\Arduino\libraries\WiFiEsp\src/WiFiEspClient.h:25:0,
    from C:\Users\Muh inwan suaidy\Documents\Arduino\libraries\WiFiEsp\src/WiFiEsp.h:28,
    from TAku.ino:1:
    C:\Users\Muh inwan suaidy\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\cores\esp8266/Client.h:29:21: note: virtual int Client::connect(const IPAddress&, uint16_t)
    virtual int connect(CONST IPAddress& ip, uint16_t port) =0;
    ^
    C:\Users\Muh inwan suaidy\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\cores\esp8266/Client.h:37:22: note: virtual bool Client::flush(unsigned int)
    virtual bool flush(unsigned int maxWaitMs = 0) = 0;
    ^
    C:\Users\Muh inwan suaidy\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\cores\esp8266/Client.h:38:22: note: virtual bool Client::stop(unsigned int)
    virtual bool stop(unsigned int maxWaitMs = 0) = 0;
    ^
    TAku:17: error: cannot declare variable ‘client’ to be of abstract type ‘WiFiEspClient’
    In file included from C:\Users\Muh inwan suaidy\Documents\Arduino\libraries\WiFiEsp\src/WiFiEsp.h:28:0,
    from TAku.ino:1:
    C:\Users\Muh inwan suaidy\Documents\Arduino\libraries\WiFiEsp\src/WiFiEspClient.h:30:7: note: since type
    bang, saya sudah install library wifiesp.h dan dapat error begini, solusinya gimana ya bang?

    ‘WiFiEspClient’ has pure virtual functions
    class WiFiEspClient : public Client
    ^
    cannot declare variable ‘client’ to be of abstract type ‘WiFiEspClient’

    This report would have more information with
    “Show verbose output during compilation”
    enabled in File > Preferences.

  6. oalah iya bang.. saya kira di board esp8266

    Arduino: 1.8.2 (Windows 10), Board: “Arduino/Genuino Uno”
    TAku.ino: In function ‘void setup()’:
    TAku:28: error: ‘Serial1’ was not declared in this scope
    Serial1.begin(115200);
    ^
    exit status 1
    ‘Serial1’ was not declared in this scope

    kalo gini yang salah apanya ya mas?

  7. assalamualaikum.. bg mau tanya kalau data inputan dari hp apakah bisa tanpa pakai database..? langsung esp arduino Relay?
    jadi HP-JARINGAN INTERNET-Mengirim data dari hp -ESP menerima data dari HP-data disalurkan ke arduino lalu arduino ke relay? karna saya ingin membuat lampu otomatis menggunakan android agar dapat diakses dari jarak jauh… trimakasih sebelumnya bg..

    1. Database (baca server) diperlukan sebagai penyedia layanan pada jaringan internet
      *Kecuali HP atau ESP bisa bertindak sebagai server

      >> alternatif: bisa menggunakan server-server iot (dengan koding mengikuti cara masing2 server)

  8. Mas Mohon Bantu,

    saya sudah sudah cobakan mengunakan arduino uno dan esp8266-01
    menggunakan Xapp,

    char ssid[] = “*****”; // Isi dengan nama profil Wifi
    char pass[] = “****”; // password wifi
    char server[] = “127.0.0.1/Arduino-MySQL”; // alamat access point yang telah terinstall XAMPP local host
    //char server[] = “semesin.com”; // alamat web hosting

    dan hasil
    di serial monitoring

    Koneksi arduino dengan mySql menggunakan ESp8266 dan XAMPP
    Ketik pesan yang akan dikirim (pastikan setti⸮⸮

    dan hasil di
    http://localhost/Arduino-MySQL/

    tidak ada perubahan, walapun sudah input data
    Nama Variable :
    Nilai :

    tidak ada respon

    yang saya ubah

    Serial1.begin(115200);
    WiFi.init(&Serial1);

    menjadi

    Serial.begin(115200);
    WiFi.init(&Serial);
    karena ada error massege pada saat verivy

    exit status 1
    ‘Serial1’ was not declared in this scope

    Terimkasih Mas

  9. mas gimana kaluu kita membaca data dari mysql Server dan papar data di arduino LCD…. contohnya … jika saya masukkan password.. arduino akan paparkan saya punya data uang yang saya ada di dalam mysql

  10. Mas, kalau untuk mengecek data yang masuk ke web server tanpa harus kita reload/tekan tombol F5 di keyboard gmna solusinya ya mas ?
    karena saya setiap kali mengirim data yg di kirim ke web server harus di reload dulu.

    Di sini mengirim data barcode yg isi nya nama produk, harga sama kode nya mas kyag di kasir gitu..

    Mohon pencerahannya mas ? 🙏

  11. //char server[] = “192.168.123.1”; // alamat access point yang telah terinstall XAMPP local host

    gan ini itu alamat ip apa ya?
    ip laptop nya atau ip xampp nya?

    Terimakasih gan

  12. mohon bantuannya dong bang
    untuk mengirim data dari esp8266-E01 + Arduino mega ke web hosting gratis(000webhost.com) gimana ya bang . mohon bantuannya dong bang

  13. itu cara esp8266-e01 + mega2560 untuk mengirim ke hosting berbayar gimana ya mas ?? bisa ngga mas minta source code nya mas ??
    makasih mas .

  14. Assalamualaikum, selamat malam bang, kalo misal mau kirim data terbaru dari database ke arduino setiap 10 detik sekali tanpa ada button kirim gimana ya?
    terimakasih sebelumnyaa….

  15. mas mau tanya, ini kan untuk arduino uno + esp
    jika mikon nya arduino mega sama script dan langkahnya sama saja atau berbeda?

  16. mas saya mau tanya, saya udh pasang esp-12f sama arduino nano tetapi gabisa konek mas, munculnya spt ini:

    Koneksi arduino dengan mySql menggunakan ESp8266 dan XAMPP
    Ketik pesan yang akan dikirim (pastikan setting serial ke “both NL & CR”)
    https://www.semesin.com/project

    [WiFiEsp] Initializing ESP module
    [WiFiEsp] >>> TIMEOUT >>>
    [WiFiEsp] >>> TIMEOUT >>>
    [WiFiEsp] >>> TIMEOUT >>>
    [WiFiEsp] >>> TIMEOUT >>>
    [WiFiEsp] >>> TIMEOUT >>>
    [WiFiEsp] Cannot initialize ESP module
    [WiFiEsp] >>> TIMEOUT >>>
    [WiFiEsp] No tag found
    WiFi shield not present

    1. kesalahan ini terjado masih pada proses awal yaitu ‘menemukan modul esp’ oleh arduino atau ‘arduino tidak menemukan perangkat/modul esp’
      cek wiring
      set baudrate

  17. Salam
    Mas Asep Kurniawan

    Terimakasih atas tutorialnya sangat membantu. Saya sudah mencoba dan berhasil mas, namun ada disuatu waktu tiba-tiba diserial monitor tertulis:

    “[Wifiesp] No Socket Available”

    Setelah terdapat tulisan itu, fungsi 2 arahnya langsung hilang. Ada beberapa yang saya usahakan, antara lain:
    1. Mengganti baudrate ke 9600 sesuai firmware yang saya suntikan
    2. Memodifikasi library wifiesp pada bagian espdrv untuk memanjangkan waktu pencarian host server
    3. Memodifikasi library wifiesp pada bagian wifiespclient.cpp dimana terdapat bagian No Socket Available, saya menambahkan asm volatile “jmp 0” untuk mereset atmega328P ketika terjadi “No Socket Available”
    4. Menambahkan client.flush pada bagian
    if (!client.connect)
    5. Membuat delay yang lebih panjang
    6. Mengganti hardware dari esp01 ke esp12e
    7. Menanyakan di blog orang yang membuat library wifiesp.h yaitu di ya-ab.blogspot.com klo tidak salah. Namun tidak dijawab.

    Setelah semua itu dicoba, masih memunculkan no socket available. Apakah mas punya ide untuk masalah saya diatas. Sangat senang sekali jika mas dapat mengatasi masalah saya.

    Terimakasih mas,
    Regards.
    Najib

    1. masalah umum :
      socket yang digunakan sebelumnya belum ditutup secara sempurna oleh ‘client.stop()’

      kemungkinan lain:
      *terlalu banyak request sehingga semua socket penuh
      *jeda antar request terlalu singkat
      *server banyak menerima request hingga kepenuhan

  18. Mas mau tanya apakah untuk pengiriman 2 data ke web hosting tidak bisa bersamaan /ada delay..
    Contoh data 1 : suhu 10 derajat dan data 2 : KETERANGAN DINGIN
    kalo bisa mohon bimbingannya
    Terima kasih

  19. Mas mau tanya
    Apakah bisa pengiriman 2 data ke web hosting secara bersamaan/ atau memang memiliki delay
    Contoh
    Suhu 10 derajat dan keterangan dingin
    mohon pencerahannya
    Terimakasih

  20. Kak mau nanya misal kalo codingan diatas saya terapkan untuk arduino uno r3 aja bisakah kak? Jadi nanti tu arduinonya langsung berhubungan sama database kak tanpa ada esp nya. kira-kira bisa kah kak?

  21. gan boleh bertanya? apakah bisa arduino mengirim dan memanggil data dari database. saya buat table didatabase yaitu pengaturan waktu pake rtc, supaya ditampilin di lcd i2c dan menggerakan motor servo, saya mengguanakan arduino uno dan nodemcu esp8266. terimakasih agan

  22. Mas , Kalau saya pakai arduino uno trus esp8266 nya saya ganti pake esp32 gitu gimana mas? apakah library wifiesp yang digunakan diatas juga diganti? untuk konfigurasi koneksi esp32 ke access point menggankan soft AP ya mas?

    1. Jika skemanya Arduino – serial – esp32 (layaknya esp8266), maka esp32 mesti diprogram dulu untuk terhubung ke jaringan wifi serta mengirimkan setiap data serial yang diterima dari arduino.

  23. Mas kalau skemanya Arduino – serial – esp32 – wifi – web hosting gitu apakah bisa tetap dilakukan komunikasi 2 arah seperti postingan masnya?

  24. gan klo ini knp ya?

    Starting connection to server…
    [WiFiEsp] Connecting to 192.168.1.7
    [WiFiEsp] >>> TIMEOUT >>>

    Starting connection to server…
    [WiFiEsp] Connecting to 192.168.1.7
    [WiFiEsp] >>> TIMEOUT >>>

    Starting connection to server…
    [WiFiEsp] Connecting to 192.168.1.7
    [WiFiEsp] >>> TIMEOUT >>>

    perangkat yg d pake arduino UNO + esp8266-01
    arduino udh terhubung dengan AP..
    192.168.1.7 ip yg terinstall xampp..
    ane masih blm paham dengan pengiriman dari database ke arduinonya

  25. bang kalo ambil data dari database ke arduino, code arduinonya yang mana ya?

    aku cuma butuh ambil data dari database ke arduino lewat esp

  26. kang bisa ga kalo ambil datanya real time?

    void loop() {
    ambilDatabase(valSensor);
    }

    bool ambilDatabase(int valSensor)
    {
    Serial.println();
    Serial.println(“Starting connection to server…”);
    // if you get a connection, report back via serial
    if (client.connect(server, 80)) {
    Serial.println(“Connected to server”);
    // Make a HTTP request
    client.print(“GET /receive.php?=valSensor=”);
    client.print(valSensor);
    client.println(” HTTP/1.1″);
    client.print(“Host: “);
    client.println(server);
    client.println(“Connection: close”);
    client.println();

    return true;
    }
    return false;
    }

    ———————————————-
    <?php
    $servername = “localhost”;
    $username = “root?; // username for your database
    $password = “”;
    $dbname = “db_sensor?; // Name of database
    $now = new DateTime();
    $CRLF = "\n\r";

    $fieldToGet = $_GET['valSensor'];

    $conn = mysql_connect("localhost","username","password");

    if (!$conn)
    {
    die('Could not connect: ' . mysql_error());
    }
    $con_result = mysql_select_db("db_sensor", $conn);
    if(!$con_result)
    {
    die('Could not connect to specific database: ' . mysql_error());
    }

    /*
    * Database was created with a table called "DataTable" and has
    * a column called "field" and a column called "value" and a
    * column called "logdata"
    */
    $sql = "SELECT * FROM `tbl_sensor` WHERE `valSensor` = \"$fieldToGet\"";
    $result = mysql_query($sql);

    if (!$result) {
    die('Invalid query: ' . mysql_error());
    }
    echo "THE DATA HAS BEEN RECEIVED!!”;

    while($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
    echo “ID: ” . $row[“ID”]. ” – Value: ” . $row[“valSensor”]. ” – TimeDate: ” . $row[“data_waktu”]. “”;
    }

    mysql_close($conn);
    ?>

  27. saya coba tutorialnya dari awal kang, tp ada masalah, langkah yg saya lakuin:
    – Semua file php udh di dalam folder htdocs/arduino_mysql,
    – Buat database dengan nama arduino_mysql (tanpa buat tabel)
    – upload arduino Code, terus ubah ssid, pass, server (IP localhost)

    nah terus dapet timeout terus,

    [WifiEsp] >>> Timeout >>>

    kenapa ya kang? apa saya harus buat tabel di databasenya?

  28. mas mau tanya klau mau menampilkan data dari arduino ke web gimana ya, misalnya saya mau buat menampilkan data RPM motor ke monitor interfacenya pake WEB atau PHP.

  29. $servername = “localhost”;
    $username = “******_Arduino”;
    $password = “Arduino”;
    $database = “******_arduino_mysql”;

    Gan, ini yang diedit yang bintang (****) aja atau semua subject stringnya (“******_Arduino”)?

  30. kang, mau tanya, saya ada tugas, kondisinya script esp8266 akan running ketika localweb (laravel) mengirimkan request dari sebuah button. apa ada tutorialnya kang?

    1. belum ada artikel tentang itu di sini,
      membuatnya bisa dengan memulai dari example-esp8266 webserver dan ditambahkan aksi yang diperlukan pada bagian handle request-nya

  31. kang, kalo cuman ingin nampilin hasil sensor dari mq2 di arduino dengan esp8266 ke website tanpa save ke database syntax nya mke yang mana ya

  32. iya kang, saya sudah test satu satu, yg saya bingung gabungin nya kang

    ini sintax arduino dengan sensor mq2
    #include

    int redLed = 11;
    int blueLed = 12;
    int buzzer = 10;
    int smokeA0 = A5;
    // nilai threshold adalah ambang batas sensor smoke mendeteksi asap rokok
    int sensorThres = 200;

    void setup() {
    pinMode(redLed, OUTPUT);
    pinMode(blueLed, OUTPUT);
    pinMode(buzzer, OUTPUT);
    pinMode(smokeA0, INPUT);
    Serial.begin(9600);
    }

    void loop() {
    int analogSensor = analogRead(smokeA0);

    Serial.print(“Pin A0: “);
    Serial.println(analogSensor);
    // Cek apakah telah mencapai nilai ambang batas
    if (analogSensor > sensorThres)
    {
    digitalWrite(redLed, HIGH);
    digitalWrite(blueLed, LOW);
    tone(buzzer, 1000, 200);
    delay(50);
    }
    else
    {
    digitalWrite(redLed, LOW);
    digitalWrite(blueLed, HIGH);
    noTone(buzzer);
    }
    }

    ini sintax arduino denga esp8266, saya coba esp8266 nya sudah tampil di web
    ⸮⸮AT

    OK
    AT+CWMODE=1

    OK
    AT+CWLAP

    +CWLAP:(4,”Aiys4″,-57,”c8:0c:c8:f9:9e:8c”,4,20,0)
    +CWLAP:(3,”Aiys4″,-75,”b0:4e:26:05:d2:23″,4,0,0)
    +CWLAP:(4,”REVO EMILIU”,-89,”04:33:89:23:8c:8c”,9,8,0)

    OK
    AT+CWJAP=”Aiys4″,”Rsibyan006″

    WIFI CONNECTED
    WIFI GOT IP

    OK
    AT+CIFSR

    +CIFSR:STAIP,”192.168.100.171″
    +CIFSR:STAMAC,”5c:cf:7f:ba:59:48″

    OK
    AT+CIPMUX=1

    OK
    AT+CIPSERVER=1,80

    OK
    0,CONNECT

    +IPD,0,446:GET / HTTP/1.1
    Host: 192.168.100.171
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
    Accept-Encoding: gzip, deflate
    Accept-Language: id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7,ms;q=0.6

    1,CONNECT
    0,CLOSED

    +IPD,1,446:GET / HTTP/1.1
    Host: 192.168.100.171
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
    Accept-Encoding: gzip, deflate
    Accept-Language: id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7,ms;q=0.6

    0,CONNECT
    AT+CIPSEND=0,20

    OK
    > I

    busy s…

    Recv 20 bytes

    SEND OK
    AT+CIPCLOSE=0

    0,CLOSED

    OK
    1,CLOSED
    0,CONNECT
    1,CONNECT

    +IPD,0,446:GET / HTTP/1.1
    Host: 192.168.100.171
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
    Accept-Encoding: gzip, deflate
    Accept-Language: id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7,ms;q=0.6

    2,CONNECT
    AT+CIPSEND=0,25

    OK
    > +CIPCLOSE=0

    busy s…

    Recv 25 bytes

    SEND OK
    AT+CIPSEND=0,30

    OK
    > 1,CLOSED
    2,CLOSED
    END=0,30

    busy s…

    Recv 30 bytes

    SEND OK
    ASAP ROKOK TERDETEKSI

    ERROR
    0,CLOSED
    0,CONNECT
    1,CONNECT

    +IPD,0,446:GET / HTTP/1.1
    Host: 192.168.100.171
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
    Accept-Encoding: gzip, deflate
    Accept-Language: id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7,ms;q=0.6

    2,CONNECT
    0,CLOSED
    1,CLOSED
    2,CLOSED
    0,CONNECT
    1,CONNECT

    +IPD,0,446:GET / HTTP/1.1
    Host: 192.168.100.171
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
    Accept-Encoding: gzip, deflate
    Accept-Language: id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7,ms;q=0.6

    AT+CIPSEND=0,30

    OK
    > KOK TERDETEKSI BRO

    busy s…

    Recv 30 bytes

    SEND OK
    AT+CIPCLOSE=0

    0,CLOSED

    OK
    1,CLOSED
    0,CONNECT

    +IPD,0,382:GET /favicon.ico HTTP/1.1
    Host: 192.168.100.171
    Connection: keep-alive
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
    Accept: image/webp,image/apng,image/*,*/*;q=0.8
    Referer: http://192.168.100.171/
    Accept-Encoding: gzip, deflate
    Accept-Language: id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7,ms;q=0.6

    1,CONNECT
    AT+CIPSEND=0,30

    OK
    > CLOSE=0

    busy s…

    Recv 30 bytes

    SEND OK
    1,CLOSED
    1,CONNECT

    +IPD,1,472:GET / HTTP/1.1
    Host: 192.168.100.171
    Connection: keep-alive
    Cache-Control: max-age=0
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
    Accept-Encoding: gzip, deflate
    Accept-Language: id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7,ms;q=0.6

    AT+CIPSEND=1,30

    OK
    > LOSE=1

    busy s…

    Recv 30 bytes

    SEND OK
    AT+CIPSERVER=1,80

    no change

    OK
    1,CLOSED
    1,CONNECT

    +IPD,1,472:GET / HTTP/1.1
    Host: 192.168.100.171
    Connection: keep-alive
    Cache-Control: max-age=0
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
    Accept-Encoding: gzip, deflate
    Accept-Language: id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7,ms;q=0.6

    0,CLOSED
    AT+CIPSEND=1,30

    OK
    > ROKOK TERDETEKSI !

    busy s…

    Recv 30 bytes

    SEND OK
    AT+CIPCLOSE=1

    1,CLOSED

    OK
    0,CONNECT

    +IPD,0,425:GET /favicon.ico HTTP/1.1
    Host: 192.168.100.171
    Connection: keep-alive
    Pragma: no-cache
    Cache-Control: no-cache
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
    Accept: image/webp,image/apng,image/*,*/*;q=0.8
    Referer: http://192.168.100.171/
    Accept-Encoding: gzip, deflate
    Accept-Language: id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7,ms;q=0.6

    1,CONNECT
    AT+CIPSTATUS

    STATUS:3
    +CIPSTATUS:0,”TCP”,”192.168.100.74″,49839,80,1
    +CIPSTATUS:1,”TCP”,”192.168.100.74″,49840,80,1

    OK
    1,CLOSED
    0,CLOSED

    yang saya bingung gimana cara gabungin nya kang? terimakasih

  33. ini pake database, ethernet shield, arduino, servo dan bluetooth.
    bluetooth nyambung ke hp dijadikan barcode scanner (dibuat dari app mit invetor),, terus hasil barcode yang sudah discan akan tampil di serial monitor. dan database sudah disi manual dari web.

    apakah bisa hasil scan tadi akan di cocokan dengan data yang di database tersebut ? jika hasil scan itu ada di database maka servonya akan bergerak, begitupula sebaliknya jika hasil yang discan tidak ada didatabase servo tidak akan bergerak…

    Paham gan ??

  34. mas mau nanya..kalau board arduino mega nya saya ganti pakai wemos aja gmn?
    soal nya lib WiFiEsp.h” tsb pakai koneksi serial1 ya untuk koneksi ke esp nya

    kalau saya mau ganti board nya pakai wemos D1 R1 .. apa yang perlu tak ubah di code nya?

    tks

  35. Bang mau nanya untuk mengirimkan data inputan dari sensor di tempat A kemudian komunikasi secara wireless dan output berada di tempat B apa bisa di lakukan menggunakan esp?

  36. Mas saya sedang mencoba project Running Text menggunakan led strip ws 2812 dan menggunakan mikrocontroller esp8266 dan semua sudah berjalan dengan lancar akan tetapi saya ingin mencoba update text tersebut melalui web browser dan terupdate di running text tersebut, bagaimana ya mas caranya dan apakah ada tutorialnya ?

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.