You are on page 1of 15

Pengetahuan Dasar pemrograman Jaringan

(Network) dan Ethernet Library


pada Arduino

Sebelum ada arduino untuk pemrograman jaringan

pada microcontroller

dirasa cukup sulit

tapi dengan adanya arduino dgn kelengkapan ethernet librarynya pemrograman jaringan
menjadi lebih mudah. Bahkan orang yg awam microcontroller pun bisa mempelajarinya dgn
lebih cepat. Untuk pembahasan tema artikel ini anda sebaiknya mengetahui dasar dasar jaringan
komputer dan dasar pengetahuan pemrograman jaringan. Untuk dasar pemrograman jaringan
anda. Sedangkan untuk dasar dasar jaringan komputer sudah cukup banyak yg mengulasnya di
internet.
Library Ethernet arduino menyediakan berbagai fungsi/method

dan beberapa protokol

(HTTP,TCP,UDP ) yang memungkinkan program sketch menjadikan arduino sebagaig client atau
server.
Beberapa cara komunikasi Arduino pada jaringan ethernet
* arduino dijadikan sebagai web server
* arduino dijadikan sebagai client web server ( berfungsi spt google crome ,IE atau mozilla)
* Client server dgn protokol TCP , arduino bisa diset sebagai client atau servernya
* Client server dgn protokol UDP , arduino bisa diset sebagai client atau servernya

Yang dimaksud Client atau server adalah aplikasi/software adapun bentuk fisiknya bisa
bermacam macam bisa PC, mainframe, laptop, microcontroller, dll.

Server bersifat pasif/melayani , ia menunggu permintaan dari client. Misalnya Pada web server,
ia akan menunggu request/permintaan dari web client. Ketika kita ketik www.example.com
pada web client(browser) sebenarnya yg terjadi adalah permintaan web client kepada web server
dg domain example.com untuk mengirim halaman index.html, lalu oleh web client ditampilkan
dlm bentuk halaman visual yg bisa kita lihat bukan kode htmlnya.
Perlu diketahuai setiap kita mengetik namadomain.com pada web client sebenarnya yg dikirim
ke server adalah namadomain.com/index.html . Permintaan untuk menampilkan halaman utama
karena halaman utama biasanya adalah index.html , index.htm, index.php atau index.asp.
Kalau ga percaya coba anda ketik fimadani.com dan fimadani.com/index.php hasilnya akan
sama.
Berikut ini HTTP transaction yaitu proses

request sebuah web client dan respon sebuah web

server, web Client meminta halaman index.html dari web server www.example.com

Gambar 1. HTTP transaction

Untuk pengontrolan atau pengambilan data melalui jaringan ethernet yg paling mudah adalah
Arduino kita jadikan sebagai web server dan kita bisa meminta atau mengeset data lewat web
client .
Arduino ethernet (atau Arduino dgn ethernet shield ) sebagai Web Server
Pada percoban ini Pc akan menghubungi alamat web server arduino yg telah di set menggunakan
web client spt google crome , mozilla atau IE.Header Respon dari web server dari arduino yg
akan kita buat seperlunya saja yaitu HTTP/1.1 200 OK Content-type:text/html; diikuti oleh
kode Html yg akan dikirim ke client.
Struktur kode HTML

Gambar 2. Arduino sebagai web server


Arduino Sebagai Web Client (berfungsi spt Mozilla , IE atau google crome)

Pada mencoba komunikasi ini kita perlu web server yg telah terinstall di PC , anda bisa
menginstall apache web server yg bisa didapat diinternet secara gratis.

Gambar 3. Arduino sebagai web client

Arduino sebagai Client server TCP dan UDP menggunakan Socket Programming

Gambar 4. a) client-server

arduino dgn PC

b) client-server arduino dgn arduino

Arduino Ethernet Library


Berikut ini daftar Class class yang tersedia pada Ethernet Library beserta fungsi/methodnya
yang akan kita gunakan dalam pemrograman jaringan arduino :

Class Ethernet

class

Ethernet

digunakan untuk inisialisasi

ethernet library dan

setting

network .

fungsi/method class ini antara lain

Ethernet.begin() digunakan untuk inisialisasi ethernet dan setting jaringan . method ini
mempunyai beberapa method overloading antara lain:

Ethernet.begin(mac) , untuk fungsi yg ini alamat ip nya ditentukan otomatis (oleh DHCP).
Ethernet.begin(mac,ip)
Ethernet.begin(mac, ip, dns)
Ethernet.begin(mac, ip, dns, gateway)
Ethernet.begin(mac, ip, dns, gateway, subnet)

Parameter
mac: MAC (Media access control) adalah alamat untuk tiap perangkat ethernet , mac terdiri
dari 6 bytes. ini adalah alamat hardware Ethernet . Pada Arduino Ethernet Shields yg terbaru
no MAC tertulis di stiker . Untuk perangkat arduino ethernet yg model lama,kita memilih
sendiri alamat MAC nya.
ip: alamat IP perangkat (4 byte)
dns: alamat IP server DNS (4 byte).
Gateway: alamat IP gateway jaringan ( 4 byte).
subnet: subnet mask dari jaringan ( 4 byte). opsional: default 255.255.255.0
Return value
Jika kita menggunakan DHCP untuk menentukan alamat IP maka fungsi yg digunakan adalah
Ethernet.begin (mac), yg mempunyai return value int: 1 pada saat koneksi DHCP berhasil dan
0 pada jika gagal. fungsi/method selain Ethernet.begin (mac) tidak punya retun value .
Contoh
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 0, 0, 177 };
Ethernet.begin(mac, ip);
baik mac atau ip adress ditulis dgn koma karena disimpan kedalam array

Ethernet.localIP : fungsi ini untuk mendapatkan alamat IP dari Ethernet . Berguna bila alamat ip
otomatis ditetapkan melalui DHCP

Class IPAddress

Class IPAddress digunakan oleh IP adress lokal dan IP address remote host.

IPAddress() : mendefinisikan alamat IP local host maupun remote host

Class EthernetServer

Class ini digunakan untuk membuat arduino sebagai

server yg menunggu permintaan dari

client. Class Server adalah base class untuk class Ethernetserver . Base class tidak dipanggil
langsung, tetapi dipanggil setiap kali Anda menggunakan fungsi dari class turunannya yaitu
EthernetServer() class ini digunakan untuk membuat sebuah objek server yang menunggu
koneksi masuk pada port tertentu. Fungsi/method class ini antara lain:

begin() : Memberitahu server untuk mulai mendengarkan koneksi masuk.

available() : Untuk mengecek apakah ada client yang terhubung ke server dan memiliki data
yang tersedia untuk dibaca. return value fungsi ini adalah sebuah objek client.

write() : mengirim data byte ke client yg terhubung ke server.

print() : mengirim dataASCII ke client yg terhubung ke server.

println() : mengirim data ASCII ke client yg terhubung dan menambahkan code CR ,LF
dibelakangnya.

Class EthernetClient

class Client ini digunakan untuk membuat arduino sebagai client yg dpt menghubungi server .
Class Client tdk digunakan secara langsung tetapi sebagai base class dari class EthernetClient ,
class ini yg akan kita gunakan fungsi/method nya antara lain:

if (EthernetClient) : Mengindikasikan jika client Ethernet yang ditentukan sudah siap.

connected() : Untuk mengecek apakah client terhubung atau tidak. Perhatikan bahwa client dianggap
terhubung jika sambungan telah ditutup namun masih ada data yang belum dibaca.

connect() : Menghubungkan ke alamat IP tertentu dan port. return value menunjukkan keberhasilan
atau kegagalan koneksi. fungsi ini mendukung DNS lookups bila menggunakan nama domain.

write() : mengirim data ke server dari client yg terkoneksi. Data ini dikirim sebagai byte atau
serangkaian byte.

print() : mengirim data ke server dari client yg terkoneksi. Data ini dikirim sebagai code ASCII.

println() :mengirim data ke server dari client yg terkoneksi. Data ini dikirim sebagai code ASCII + CR
LF (kode enter)

available() :Return value nya adalah jumlah byte yang tersedia untuk dibaca (yaitu jumlah data yang
telah diterima client dari server yang terhubung). available() turunan dari class utilitas Stream.

read() : Baca byte berikutnya yang diterima client yg terkoneksi ke server

flush() : Buang setiap byte yang telah ditulis untuk client tetapi belum dibaca.

stop() : putuskan koneksi ke server.


Class EthernetUDP

class ini digunakan untuk membuat pengiriman pesan pd client-server dengan protokol UDP.
fungsi/method class ini :

begin() : untuk inisialisasi libarary ethernet UDP dan penyetingan jaringan

read() : Membaca

data

UDP

dari

buffer

yg

telh

ditentukan.

Jika tidak ada argumen yang diberikan, return valuenya adalah karakter berikutnya dalam buffer.
Fungsi ini hanya dapat berhasil setelah pemanggilan fungsi UDP.parsePacket ().

write() : Mengirim data UDP ke koneksi remote. data harus diawali beginPacket () dan diakhiri oleh
endPacket (). beginPacket () menginisialisasi paket data, data tidak dikirim sampai endPacket ()
dipanggil

beginPacket() : Mulai koneksi untuk mengirim data UDP ke koneksi remote

endPacket() : fungsi ini dipanggil setelah mengirim data UDP ke koneksi remote.

parsePacket() : Cek keberadaan paket UDP, dan return value nya panjang data UDP yg diterima.
parsePacket () harus dipanggil sebelum membaca buffer.

available() : untuk mendapatkan jumlah byte (karakter) yg tersedia dibuffer untuk dibaca.
Fungsi ini hanya dapat berhasil setelah fungsi UDP.parsePacket() dipanggil.

stop() : memutuskan koneksi ke server. Lepaskan semua sumber daya yang digunakan selama sesi
UDP.

remoteIP() : Mendapatkan alamat IP dari koneksi remote . Fungsi ini harus dipanggil setelah
UDP.parsePacket ().

remotePort() : Mendapatkan port koneksi UDP remote host. Fungsi ini harus dipanggil setelah
UDP.parsePacket ().

Contoh-1

Program sketch arduino sebagai web server


Pada percobaan ini kita akan menampilkan hello ini web arduino di web client ketika web
browser mengarah ke web server arduino .
Kode HTML yg akan dikirm oleh arduino sebagai respon dari web client adalah sbb:
HTTP/1.1 200 OK
Content-Type: text/html
Refresh: 5
<!DOCTYPE HTML>);
<html>
<body>
hello ini dari web server arduino
<body>
</html>

Program sketch agar arduino menjadi web server dan mengirim balasan HTML diatas adalah sbb

#include <SPI.h>
#include <Ethernet.h>
byte alamat_mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress alamat_ip_webserver(192,168,1,177);
EthernetServer webservercoba(80);
void setup() {
Ethernet.begin(alamat_mac, alamat_ip_webserver);
webservercoba.begin();
}
void loop() {

// listen for incoming clients


EthernetClient client = webservercoba.available();
if (client) {
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && currentLineIsBlank) {
// send a standard http response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after
completion of the response
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<body>");
client.println("hello ini dari web server arduino");
client.println("</body>");
client.println("</html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
}
}

setelah anda compile dan diupload ke arduino board lalu hubungkan arduino ke PC dengan
kable UTP. buka web browser anda misal google crome ketik alamat ip dari web server
arduino maka akan muncul sbb

Membaca dan menampilkan data ADC (analog) dari arduino


ganti code diantara <body> dan </body> diatas
client.println("<body>");
client.println("hello ini dari web server arduino");
client.println("</body>");

menjadi
client.println("<body>");
int dataanalog = analogRead(1);
client.print("nilai analog input chanel 1 = ")
client.print(dataanalog);
client.println("</body>");

Contoh 2. Arduino Sebagai web client


#include <Ethernet.h>
#include <SPI.h>
#include <ICMPPing.h>
byte mac[] = { alamat mac };
byte ip[] = { ip ethernet shield };
byte dnsserver[] = { alamat ip DNS Server };
byte gateway[] = { alamat ip gateway };
byte subnet[] = { 255,255,255,0 };
int dataAnalog;
EthernetClient client;
SOCKET pingSocket = 0;
int pingTimeout = 4;
byte destinationIp[] = { alamat ip };
char buffer [256];

void setup(void){
Ethernet.begin(mac, ip, dnsserver, gateway, subnet);
}
void loop(void) {
ICMPPing ping(pingSocket);
ping( pingTimeout , destinationIp , buffer );
dataAnalog = analogRead(A1);
if (client.connect(namaDomain.com, 80)) {
client.print( GET /forminput.php?datadikirim=dataAnalog
client.print( Host: namaDomain.com.com);
client.println( Connection: close);
client.println();
client.println();
client.stop();
}
else {
}
delay(5000);
}

HTTP/1.1);

Contoh 3
TCP Chat Client server

#include <SPI.h>;
#include <Ethernet.h>;
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 177);
//server menggunakan port 5000 (client juga harus menggunakan port yg sama)
EthernetServer server(5000);

boolean alreadyConnected = false; // apakah sudah terkoneksi sebelumnya


void setup()
{
// inisialisasi ethernet device
Ethernet.begin(mac, ip);
// listen untuk client yg datang
server.begin();
}
void loop()
{
// tunggu client datang
EthernetClient client = server.available();
if (client) // jika ada client menghubungi
{
if (!alreadyConnected)
{
// kosongkan input buffer:
client.flush();
client.println("Hello client, sy server"); //kirim ke client
alreadyConnected = true;
}
if (client.available() &gt; 0)
{
char thisChar = client.read();
server.write(thisChar);
}

//baca byte dari client:


//kirim kembali ke client:

Contoh 3 . Client TCP


#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,150);
// IP address server
IPAddress server(192,168,1,177);
// inisialisasi Ethernet client
EthernetClient client;
void setup()
{
// start the Ethernet connection:

Ethernet.begin(mac, ip);
if(client.connect(server, 5000));
{
//do nothing:
}
}
void loop()
{
// if there are incoming bytes available
if (client.available())
{
char c = client.read();
}
// as long as there are bytes in the serial queue,
// read them and send them out the socket if it's open:
if (client.connected())
{
client.print("tes");
}

// if the server's disconnected, stop the client:


if (!client.connected())
{
client.stop();
// do nothing:
while(true);
}

Contoh 4. clien server dgn protokol UDP .

UDP
Pada komunikasi dgn protokol UDP antara client dan server tak perlu ada koneksi pendahuluan
spt TCP , client bisa langsung kirim data ke server atau sebaliknya . tetapi kelemahannya data
tidak dijamin sampai atau data bisa error atau double. Sehingga UDP tdk cocok untuk
pengontrolan tapi mungkin cocok untuk sebuah server yg mengirim data yg sifatnya sebagai
informasi saja ke banyak client.
include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);
unsigned int localPort = 8888;

// local port to listen on

// buffers for receiving and sending data


char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
char ReplyBuffer[] = "ack";
// a string to send back
// An EthernetUDP instance to let us send and receive packets over UDP
EthernetUDP Udp;
void setup() {
// start the Ethernet and UDP:
Ethernet.begin(mac,ip);
Udp.begin(localPort);
}
void loop() {
// if there's data available, read a packet
int packetSize = Udp.parsePacket();
if(packetSize)
{
IPAddress remote = Udp.remoteIP();
// read the packet into packetBufffer
Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);
// send a reply, to the IP address and port that sent us the packet we
received
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(ReplyBuffer);
Udp.endPacket();
}
delay(10);
}

You might also like