/* Web Server Arduino Arduino sederhana sederhana yang menampilkan nilai pin input input analog */
Tujuan Arduino berfungsi sebagai sebagai web server (menyediakan halaman web). Sebagai contoh, dengan aplikasi web browser bisa dilihat nilai-nilai nilai sensor yang dihubungkan ke pin analog Arduino.
#include
Penjelasan Sketch menggunakan Ethernet library (Ethernet.h) Ethernet.h) dan menggunakan MAC address dan IP address dari Ethernet shield. IP address yang ditetapkan pada sketch ini merupakan alamat web server-nya. Pengetikan 192.168.1.10 pada address bar web browser akan menampilkan sebuah halaman web yang memperlihatkan nilai pin analog input 0 sampai 5. Alamat 192.168.1.10 merupakan alamat lokal yang hanya bisa diakses pada jaringan lokal. Jika diinginkan agar web server bisa diakses
%$ 3hile 4client.connected455 % i7 4client.available455 % char c $ client.read45// :ika sampai di akhir baris 4ne3 line5 // dan barisnya blank) http re8uest sudah berakhir) // sehingga reply bisa dikirim i7 4c $$ ;n; == current9line9is9blank5 % // kirim header http response standar client.println4>?@@P/. 0&& B>5client.println4>6ontentC@ypeD te't/html>5client.println45// output nilai tiap pin input analog 7or 4int i $ &- i < 1- iEE5 % client.print4>analog input >5client.print4i5client.print4> $ >5client.print4analogFead4i55client.println4> 5, break, i7 4c $$ ;n;5 % // mulai baris baru current9line9is9blank $ true, else i7 4c G$ ;r;5 % // didapat suatu karakter pada baris sekarang current9line9is9blank $ 7alse, , , // beri 3aktu kepada 3eb bro3ser untuk menerima data delay45client.stop45-
melalui Internet, perangkat router harus dikonfigurasi agar bisa meneruskan (forward) pesan yang datang ke Arduino ( port forwarding). Koneksi Ethernet shield yang terbuka di Internet bisa menyebabkannya bisa diakses siapapun lewat IP address, sehingga harus berhati-hati karena Ethernet library tidak menyediakan mekanisme koneksi yang aman (secure). Dua baris perintah pada fungsi setup () berfungsi untuk menginisialisasi Ethernet library dan mengkonfigurasi web server dengan IP address yang digunakan. Loop terus menunggu lalu mengolah tiap permintaan yang diterima web server: Client client = server.available(); Class client di sini ad alah web server yang mengolah pesan untuk IP address yang d iberikan ke server. if (client) memeriksa apakah client sudah berhasil memulai. while (client.connected()) memeriksa apakah web server yang terhubung ke client membuat request.
client.available() dan client.read() memeriksa apakah data sudah tersedia, dan membaca byte-nya. Hal ini mirip seperti Serial.available(), hanya saja data datang dari jaringan, bukan port serial. Kode membaca data terus sampai menemukan baris pertama yang tanpa data. Header HTTP dikirim dengan perintah client.println dan diikuti dengan menampilkan nilai-nilai di port analog. Hasil : http://192.168.1.10 Tampilan web :
/* Web Server Parsing Fespon terhadap permintaan 4re8uest5 di HF untuk mengubah port digital dan analog output) menampilkan nomor port yang berubah dan nilai pin input analog */ #include
Tujuan Pin digital dan analog Arduino bisa dipantau dan dikendalikan melalui web browser. Penjelasan Sketch akan membaca request yang dikirim dari browser dan mengubah nilai-nilai port output digital dan analog dari Arduino. URL (browser request) berisi satu atau lebih field yang diawali dengan kata pin diikuti huruf D untuk pin digital atau A untuk pin analog.
%$ 3hile 4client.connected455 % i7 4client.available455 % // counter untuk nomor re8uest perubahan pin int digitalFe8uests $ &int analogFe8uests $ &i74 client.7ind4>J!@ />5 5 % // cari ;J!@; // cari token dia3ali KpinL dan diakhiri baris //blank pertama 3hile4client.7indHntil4>pin>) >nr>55% // cari //KpinL di akhir baris
Tampilan web :
char type $ client.read45- // ( atau A int pin $ client.parseInt45- // nilai integer //AS6II berikutnya //dalam stream adalah pin int val $ client.parseInt45- // integer //berikutnya C nilai i74 type $$ ;(;5 % Serial.print4>Pin digital >5 pinMode4pin) H@PH@5digitalWrite4pin) val5digitalFe8uestsEE, else i74 type $$ ;A;5% Serial.print4>Pin analog >5analogWrite4pin) val5analogFe8uestsEE, else % Serial.print4>Invalid G >5Serial.print4type5,
Serial.print4pin5Serial.print4>$>5Serial.println4val5, , Serial.println45// 7indHntil telah mendeteksi baris blank 4l7 //diikuti cr5 // sehingga http re8uest telah berakhir dan kirim //reply // kirim header http response standard client.println4>?@@P/. 0&& B>5client.println4>6ontentC@ypeD te't/html>5client.println45// output nomor pin yang ditangani oleh re8uest client.print4digitalFe8uests5client.print4> pin digital yang diubah>5client.println4> 5client.print4analogFe8uests5client.print4> pin analog yang diubah>5client.println4> 5client.println4> 5// tampilkan nilai tiap pin analog 7or 4int i $ &- i < 1- iEE5 % client.print4>nilai pin input analog >5client.print4i5client.print4> C >5client.print4analogFead4i55client.println4> 5, break-
/* Web Server Multi Page Fespon atas re8uest di HF untuk melihat port output digital dan analog * httpD//0.12..&/analog/ display data di pin analog * httpD//0.12..&/digital/ display data di pin digital */ #include
char bu77er"MAN9PAJ!9OAM!9!OE-
// karakter maks di nama // halaman // nama halaman
E
Penjelasan Sketch mencari request halaman dengan nama “analog” atau “digital” dan menampilkan nilainilai pin-nya. http://192.168.1.10/analog/ atau http://192.168.1.10/digital/
Tujuan Nilai pin analog dan digital ditampilkan pada 2 halaman web yang berbeda.
Sketch mencari karakter “/” untuk menentukan ujung nama halaman. Web server akan melaporkan halaman tidak dikenal jika karakter “/” tidak mengakhiri nama halaman.
// u77er harus cukup besar untuk menampung nama halaman dan // terminating null const int MAN9PAJ!9OAM!9!O $ 2E- // karakter maks di // dalam satu halaman name E null char bu77er"MAN9PAJ!9OAM!9!O-
Struktur loop menentukan sel data t abel dengan tag
/* Web Server Post on/o77 pin 2 dengan menggunakan ?@M 7orm */
Tujuan Tampilan halaman web memungkinkan user memilih perintah yang akan dilakukan Arduino.
#include
Penjelasan Sketch membuat halaman web yang memiliki form dengan buton.
byte mac" $ % &'(!) &'A() &'!) &'!+) &'+!) &'!( , byte ip" $ % 0)12))& ,const int MAN9PAJ!OAM!9!O $ 2- // char maks pd nama hlm. char bu77er"MAN9PAJ!OAM!9!OE- // karakter tambahan // untuk
Melalui web browser, user akan melihat button dan web server Arduino akan merespon setiap klik button. Sketch akan meng-on/off pin tergantung button yang ditekan (klik).
terminating null
!thernetServer server42&5void setup45 % !thernet.begin4mac) ip5server.begin45delay40&&&5, void loop45 % !thernet6lient client $ server.available45i7 4client5 % int type $ &-
Halaman web dengan form user interface berisi tag-tag HTML untuk p engontrolan (button, checkbox, label, dan lain-lain). Sketch menyediakan button sebagai user interface. Baris-baris berikut ini membuat form dengan nama button pinD8 yang dilabeli “OFF”, yang akan mengirim balik nilai 0 jika di-klik : client.print(""); i74client.readytesHntil4;/;) bu77er)sieo74bu77er555% Ketika server menerima request dari browser, i74strcmp4bu77er)>PS@ >5 $$ &5% akan dicari string "POST " untuk mengenali awal client.7ind4>nr>5- // skip body form POST : // cari string yang dia3ali dengan >pin>) // baris blank yang pertama if(strcmp(buffer,"POST ") == 0) // mencari // parameter PS@ dalam 7ormat pin('$ // dimana ' nomor pin dan adalah & untuk W awal form POST finder.find("\n\r"); // skip body // dan untuk ?IJ? // cari parameter yang diawali "pin" dan stop 3hile4client.7indHntil4>pin(>) >nr>55% pada awal baris blank int pin $ client.parseInt45- // nomor pin // parameter POST dalam format pinDx=Y int val $ client.parseInt45- // & atau // dimana x nomor pin dan Y = 0 untuk LOW pinMode4pin) H@PH@5digitalWrite4pin) val5dan 1 untuk HIGH , , Jika button OFF ditekan, halaman yang diterima send?eader4client)>Post e'ample>5akan berisi string pinD8=0, atau pinD8=1 untuk //buat button ?@M untuk mengontrol pin 2 button ON. client.println4>5Sketch terus mencari nama button (pinD): client.print4 while(finder.findUntil("pinD", "\n\r")) ><7orm action$;/; method$;PS@;
5Metode findUntil pada kode berikutnya akan client.println4> value$;&;5baris ( \n\r adalah carriage return untuk baris //create ?@M button to turn on pin 2 baru yang dikirim oleh web browser pada akhir client.print4 form). ><7orm action$;/; method$;PS@;
5 Angka yang mengikuti nama pinD adalah nomor client.print4> value$;;
Page 1, )" * 9 J)& Seet P4 : Antar'uka Eternet S!e
%$ value$;n;/7orm>5client.println4>5client.stop45, , , // beri 3aktu 3eb bro3ser untuk menerima data delay45client.stop45, , void send?eader4!thernet6lient client) char *title5 % // send a standard http response header client.println4>?@@P/. 0&& B>5client.println4>6ontentC@ypeD te't/html>5client.println45client.print4>5client.print4title5client.println4>5,
pin : int pin = finder.getValue(); Nilai yang mengikuti nomor pin akan 0 jika button OFF ditekan atau 1 jika button ON ditekan : int val = finder.getValue(); Nilai yang diterima akan ditulis ke pin setelah mode pin diset sebagai output : pinMode(pin, OUTPUT); digitalWrite(pin, val); Lebih banyak button dapat ditambahkan dengan menyisipkan tag untuk kontrol tambahan. Baris berikut ini untuk menambahkan button yang lain untuk meng-on-kan pin digital 8 : //membuat button HTML untuk meng-on-kan pin 9 client.print("
%$ D;R%u!n) Eternet S!e$% 3Su(()rt Mega an% M!r) SD6 The Arduino Ethernet Shield allows an Arduino board to connect to the internet. It is based on the Wiznet W5100 ethernet chip. The Wiznet W5100 provides a network (IP) stack capable of both TCP and UDP. It supports up to four simultaneous socket connections. Use the Ethernet library to write sketches which connect to the internet using the shield. This new version supports Mega both 1280 and 2560. And it supports Micro SD card read/write as well. The ethernet shield is fully functional now. The V2 E thernet Shield is fully compatible with Ardunio Ethernet Shield. With the offical ethernet library, you can d o exactly the same thing as the original one. The ethernet shield connects to an Arduino board using long wire- wrap headers which extend through the shield. This keeps the pin layout intact and allows another shield to be stacked on top. Arduino uses digital pins 10, 11, 12, and 13 (SPI) to communicate with the W5100 on the ethernet shield. These pins cannot be used for general i/o. The shield provides a standard RJ45 ethernet jack. The reset button on the shield resets both the W5100 and the Arduino board. The shield contains a number of informational LEDs: * PWR: indicates that the board and shield are powered * LINK: indicates the presence of a network link and flashes when the shield transmits or receives data * FULLD: indicates that the network connection is full duplex * 100M: indicates the presence of a 100 Mb/s network connection (as opposed to 10 Mb/s) * RX: flashes when the shield receives data * TX: flashes when the shield sends data * COLL: flashes when network collisions are d etected