Upload teks via web server ke LCD dengan Arduino Ethernet - Berbage Ilmu | Tutorial Arduino Android SEO Networking Software

Upload teks via web server ke LCD dengan Arduino Ethernet

Saat ini saya akan memberikan tutorial tentang bagaimana mengirim teks dari halaman web kemudian akan tampil di LCD dengan Arduino , Ethernet Shield ( web server ) dan SD card untuk file HTML nya. Dalam Tutorial saat ini kita membutuhkan bahan percobaan sebagai berikut :
  • Arduino Uno / Mega
  • Ethernet Shield
  • SD Card ( Saya rekomendasikan gunakan size yang kecil saja "2GB")
  • Potensiometer 10K
  • LCD 16 x 2
  • Kabel LAN
Berikut ini merupakan video hasil percobaan :




Berikut ini merupakan skema rangkaian percobaan :



Berikut ini adalah sketch program di Arduino IDE :

//////////////////////www.berbageilmu.blogspot.co.id//////////////////
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include <LiquidCrystal.h>
// ukuran buffer untuk menerima  permintaan HTTP
#define REQ_BUF_SZ   90
//Ukuran buffer yang menyimpan baris teks untuk terminator LCD + null
#define LCD_BUF_SZ   17
//Setup Ethernet shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac address
IPAddress ip(192, 168, 1, 10);   // IP Address yang digunakan
EthernetServer server(80);       // Port yang digunakan
File webFile;                    // File halaman web pada SD Card
char HTTP_req[REQ_BUF_SZ] = {0}; // Permintaan HTTP buffer disimpan sebagai string null
char req_index = 0;              // index into HTTP_req buffer
char lcd_buf_1[LCD_BUF_SZ] = {0};// Indeks ke buffer HTTP_req
char lcd_buf_2[LCD_BUF_SZ] = {0};// Buffer untuk menyimpan teks 2 baris ke lcd
LiquidCrystal lcd(3, 2, 8, 7, 6, 5);
void setup()
{
    // Nonaktifkan chip Ethernet
    pinMode(10, OUTPUT);
    digitalWrite(10, HIGH);
 
    Serial.begin(115200);       // untuk debug
    lcd.begin(16, 2);
    // menampilkan teks di LCD
    lcd.print(F("Initializing"));
 
    // inisialisasi SD card
    Serial.println("Periksa SD Card...");
    if (!SD.begin(4)) {
        Serial.println("Gagal Koneksi SD card");
        lcd.print(F("SD Card Gagal!!"));
        return;    // gagal inisialisasi
    }
    Serial.println("Sukses Inisialisai SD card");
    // cek file index.htm
    if (!SD.exists("index.htm")) {
        Serial.println("ERROR - Can't find index.htm file!");
        return;  // tidak menemukan file index.htm
    }
    Serial.println("File index.htm Ditemukan");
    Ethernet.begin(mac, ip);  // inisialisasi ethernet
    server.begin();        
    // selesai print IP adrress
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(F("IP Address WEB :"));
    lcd.setCursor(0, 1);
    lcd.print(ip);
}
void loop()
{
    EthernetClient client = server.available();  // mencoba mendapatkan Client
    if (client) {  // Kondisi Client
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {   // data client tersedia
                char c = client.read(); // Baca 1 byte (karakter) dari client
                if (req_index < (REQ_BUF_SZ - 1)) {
                    HTTP_req[req_index] = c;          // menyimpan HTTP request karakter
                    req_index++;
                }
                // baris terakhir permintaan klien kosong dan diakhiri dengan \ n
                //Menanggapi klien hanya setelah baris terakhir diterima
                if (c == '\n' && currentLineIsBlank) {
                    // kirim header tanggapan http standar
                    client.println("HTTP/1.1 200 OK");
               
                    if (StrContains(HTTP_req, "ajax_inputs")) {
                        // Kirim sisa header HTTP
                        client.println("Content-Type: text/xml");
                        client.println("Connection: keep-alive");
                        client.println();
                        // cetak teks yang diterima ke LCD jika ditemukan
                        if (GetLcdText(lcd_buf_1, lcd_buf_2, LCD_BUF_SZ)) {
                          /*lcd_buf_1 dan lcd_buf_2 sekarang berisi teks dari Halaman web dan
                          tampilkan teks yang diterima ke LCD*/
                          lcd.clear();
                          lcd.setCursor(0, 0);
                          lcd.print(lcd_buf_1);
                          lcd.setCursor(0, 1);
                          lcd.print(lcd_buf_2);
                        }
                    }
                    else {  //permintaan halaman web
                        // Kirim sisa header HTTP
                        client.println("Content-Type: text/html");
                        client.println("Connection: keep-alive");
                        client.println();
                        // Kirim halaman web
                        webFile = SD.open("index.htm");        // open web page file
                        if (webFile) {
                            while(webFile.available()) {
                                client.write(webFile.read()); // send web page to client
                            }
                            webFile.close();
                        }
                    }
                   // reset buffer index dan semua elemen penyangga menjadi 0
                    req_index = 0;
                    StrClear(HTTP_req, REQ_BUF_SZ);
                    break;
                }
             
                // setiap baris teks yang diterima dari klien berakhir dengan \ r \ n
                if (c == '\n') {          
                // karakter terakhir sesuai teks yang diterima
                // mulai baris baru dengan karakter berikutnya baca
                    currentLineIsBlank = true;
                }
                else if (c != '\r') {
                    // karakter teks diterima dari klien
                    currentLineIsBlank = false;
                }
            } // akhir if (client.available())
        } // akhir while (client.connected())
        delay(1);      // memberi waktu browser web untuk menerima data
        client.stop(); // mematikan Konkesi
    } // akhir if (client)
}
//Mendapatkan dua String untuk LCD dari permintaan HTTP GET yang masuk
boolean GetLcdText(char *line1, char *line2, int len)
{
  boolean got_text = false;
  char *str_begin;          
  char *str_end;            
  int str_len = 0;
  int txt_index = 0;
  char *current_line;
  current_line = line1;

  str_begin = strstr(HTTP_req, "&L1=");
  for (int j = 0; j < 2; j++) {
    if (str_begin != NULL) {
      str_begin = strstr(str_begin, "=");
      str_begin += 1;                    
      str_end = strstr(str_begin, "&");
      if (str_end != NULL) {
        str_end[0] = 0;  // Mengakhiri string
        str_len = strlen(str_begin);
        // salin string ke buffer dan ganti% 20 dengan spasi ''
        for (int i = 0; i < str_len; i++) {
          if (str_begin[i] != '%') {
            if (str_begin[i] == 0) {
              // akhir dari String
              break;
            }
            else {
              current_line[txt_index++] = str_begin[i];
              if (txt_index >= (len - 1)) {
                // Simpan string output dalam batas
                break;
              }
            }
          }
          else {
            // ganti% 20 dengan spasi
            if ((str_begin[i + 1] == '2') && (str_begin[i + 2] == '0')) {
              current_line[txt_index++] = ' ';
              i += 2;
              if (txt_index >= (len - 1)) {
                // simpan string output dalam batas
                break;
              }
            }
          }
        } // akhir untuk pengulangan i
        // Mengakhiri string
        current_line[txt_index] = 0;
        if (j == 0) {
       
        // dapatkan baris kedua
          str_begin = strstr(&str_end[1], "L2=");
          current_line = line2;
          txt_index = 0;
        }
        got_text = true;
      }
    }
  } // akhir untuk pengulangan j
  return got_text;
}
// set setiap elemen str ke 0 (hapus array)
void StrClear(char *str, char length)
{
    for (int i = 0; i < length; i++) {
        str[i] = 0;
    }
}
// mencari string sfind di string str
// kembali 1 jika string ditemukan
// kembali 0 jika string tidak ditemukan
char StrContains(char *str, char *sfind)
{
    char found = 0;
    char index = 0;
    char len;
    len = strlen(str);
 
    if (strlen(sfind) > len) {
        return 0;
    }
    while (index < len) {
        if (str[index] == sfind[found]) {
            found++;
            if (strlen(sfind) == found) {
                return 1;
            }
        }
        else {
            found = 0;
        }
        index++;
    }
    return 0; 
}

Setelah itu anda copy script HTML dibawah ini dan paste di notepad kemudian save di SD card anda tanpa folder ( Cukup di luar SD card saja ) dan save dengan nama file index.htm

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Berbage Ilmu</title>
        <script>
        strLine1 = "";
        strLine2 = "";
     
        function SendText()
        {
            nocache = "&nocache=" + Math.random() * 1000000;
            var request = new XMLHttpRequest();
         
            strLine1 = "&L1=" + document.getElementById("txt_form").line1LCD.value;
            strLine2 = "&L2=" + document.getElementById("txt_form").line2LCD.value;
         
            request.open("GET", "ajax_inputs" + strLine1 + strLine2 + nocache, true);
            request.send(null);
        }
        </script>
    </head>
<center>
    <body onload="GetArduinoIO()" style="padding:120px; background-color:powderblue;">
<font face="verdana" color="White" size="2">
        <H1><b> Kirim Teks Via WEB SERVER ke LCD </b></h1>
<div style="width:200px; height:200px; background:#48a0e8; padding:10px; color:#ffffff; border: 10px solid white;">
        <div style="padding: 10px;">
<form id="txt_form" name="frmText">
   <label>Line Atas <input type="text" name="line1LCD" size="16" maxlength="16" /></label><br /><br />
            <label>Line Bawah <input type="text" name="line2LCD" size="16" maxlength="16" /></label>
        </form>
</div>
        <br />
        <input type="submit" value="Kirim Teks" onclick="SendText()" />
<br>
<br>
<strong style>Berbage Ilmu</strong>
    </body>
</div>
</center>
</html>

Testing :
  1. Hubungkan Ethernet shield anda dengan port Ethernet PC / Laptop anda menggunakan kabel LAN.
  2. Setting IP Address Ethernet PC anda menjadi :
    IP Address : 192.168.1.5
    Netmask : 255.255.255.0
    Gateway : 192.168.1.10 ( IP Ethernet Shield yang sudah di setting di Arduino IDE )
  3. Hubungkan Power Supply dengan Arduino anda 
  4. Jika berhasil inisialisasi maka LCD akan menampilkan IP Address Ethernet Shield anda
  5. Buka Browser, kemdian pada kotak URL browser masukan IP Address Ethernet Shield anda
    Contoh : 192.168.1.10 jika berhasil maka akan muncul tampilan file index.htm seperti berikut :





Sampai disini Tutorial saya, saya harapkan anda lebih kembangkan dengan kreatifitas anda sendiri. Semoga bermanfaat 😃😃.

4 komentar

This comment has been removed by the author.
This comment has been removed by the author.

kalau mengganti password yang bisa di akses oleh keypad tapi digantinya di web server, itu gimana ya?

gmn caranya ditambahkan dengan css file yang link dengan html file?, makasih