Assalamualaikum
Wr.wb
Dihalaman ini
saya akan memberikan sedikit tentang pengertian dan
fungsi dari bahasa program Arduino, mudah-mudahan dapat memberikan pengetahuan
yang berarti bagi kita semua khususnya anggota Mechatronic and Robotic Jurusan
Teknik Elektro Universitas Malikussaleh.
Tujuan
Pembelajaran Umum:
1. Mahasiswa
trampil memprogram arduino
Tujuan
Pembelajaran Khusus:
1. Mahasiswa
memahami dasar-dasar arduino
2. Mahasiswa trampil
memprogram arduino
Arduino Uno adalah papan sirkuit berbasis mikrokontroler ATmega328.
IC (integrated circuit) ini memiliki 14 input/output digital (6 output untuk
PWM), 6 analog input, resonator kristal keramik 16 MHz, Koneksi USB, soket
adaptor, pin header ICSP, dan tombol reset. Hal inilah yang dibutuhkan untuk
mensupport mikrokontrol secara mudah terhubung dengan kabel power USB atau
kabel power supply adaptor AC ke DC atau juga battery.
Setiap program Arduino
(biasa disebut sketch) mempunyai dua buah fungsi yang harus ada.
void setup( ) {
}
Semua kode didalam
kurung kurawal akan dijalankan hanya satu kali ketika program Arduino
dijalankan untuk pertama kalinya.
void loop( ) { }
Fungsi ini akan
dijalankan setelah setup (fungsi void setup) selesai. Setelah dijalankan
satu kali fungsi ini akan dijalankan lagi, dan lagi secara terus menerus sampai
catu daya (power) dilepaskan.
Syntax
Berikut ini adalah
elemen bahasa C yang dibutuhkan untuk format penulisan.
//(komentar satu baris)
Kadang diperlukan untuk
memberi catatan pada diri sendiri apa arti dari kode-kode yang dituliskan. Cukup
menuliskan dua buah garis miring dan apapun yang kita ketikkan dibelakangnya
akan diabaikan oleh program.
/* */(komentar
banyak baris)
Jika anda punya banyak
catatan, maka hal itu dapat dituliskan pada beberapa baris sebagai komentar.
Semua hal yang terletak di antara dua simbol tersebut akan diabaikan oleh
program.
{ }(kurung
kurawal)
Digunakan untuk
mendefinisikan kapan blok program mulai dan berakhir (digunakan juga pada
fungsi dan pengulangan).
;(titk koma)
Setiap baris kode harus
diakhiri dengan tanda titik koma (jika ada titik koma yang hilang maka program
tidak akan bisa dijalankan).
Variabel
Sebuah program secara
garis besar dapat didefinisikan sebagai instruksi untuk memindahkan angka
dengan cara yang cerdas. Variabel inilah yang digunakan untuk memindahkannya.
int (integer)
Digunakan untuk
menyimpan angka dalam 2 byte (16 bit). Tidak mempunyai angka desimal dan
menyimpan nilai dari -32,768 dan 32,767.
long (long)
Digunakan ketika
integer tidak mencukupi lagi. Memakai 4 byte (32 bit) dari memori (RAM) dan
mempunyai rentang dari -2,147,483,648 dan 2,147,483,647.
boolean (boolean)
Variabel sederhana yang
digunakan untuk menyimpan nilai TRUE (benar) atauFALSE (salah).
Sangat berguna karena hanya menggunakan 1 bit dari RAM.
float (float)
Digunakan untuk angka
desimal (floating point). Memakai 4 byte (32 bit) dari RAM dan mempunyai
rentang dari -3.4028235E+38 dan 3.4028235E+38.
char (character)
Menyimpan 1 karakter
menggunakan kode ASCII (misalnya ‘A’ = 65). Hanya memakai 1 byte (8 bit) dari
RAM.
Operator Matematika
Operator yang digunakan
untuk memanipulasi angka (bekerja seperti matematika yang sederhana).
=
Membuat sesuatu menjadi
sama dengan nilai yang lain (misalnya: x = 10 * 2, x sekarang sama dengan 20).
%
Menghasilkan sisa dari
hasil pembagian suatu angka dengan angka yang lain (misalnya: 12 % 10, ini akan
menghasilkan angka 2).
+
Penjumlahan
–
Pengurangan
*
Perkalian
/
Pembagian
Operator Pembanding
Digunakan untuk
membandingkan nilai logika.
==
Sama dengan (misalnya:
12 == 10 adalah FALSE (salah) atau 12 == 12 adalah TRUE (benar))
!=
Tidak sama dengan
(misalnya: 12 != 10 adalah TRUE (benar) atau 12 != 12 adalah FALSE (salah))
<
Lebih kecil dari
(misalnya: 12 < 10 adalah FALSE (salah) atau 12 < 12 adalah FALSE (salah)
atau 12 < 14 adalah TRUE (benar))
>
Lebih besar dari
(misalnya: 12 > 10 adalah TRUE (benar) atau 12 > 12 adalah FALSE (salah)
atau 12 > 14 adalah FALSE (salah))
Struktur Pengaturan
Program sangat
tergantung pada pengaturan apa yang akan dijalankan berikutnya, berikut ini
adalah elemen dasar pengaturan (banyak lagi yang lain dan bisa dicari di
internet).
1. if..else, dengan
format seperti berikut ini:
if (kondisi) { }
else if (kondisi) { }
else { }
Dengan struktur seperti
diatas program akan menjalankan kode yang ada di dalam kurung kurawal jika
kondisinya TRUE, dan jika tidak (FALSE) maka akan diperiksa apakah kondisi
pada else if dan jika kondisinya FALSE maka kode
pada else yang akan dijalankan.
2. for, dengan format
seperti berikut ini:
for (int i = 0; i <
#pengulangan; i++) { }
Digunakan bila anda
ingin melakukan pengulangan kode di dalam kurung kurawal beberapa kali, ganti
#pengulangan dengan jumlah pengulangan yang diinginkan. Melakukan penghitungan
ke atas dengan i++ atau ke bawah dengan i–.
Digital
1. pinMode(pin, mode)
Digunakan untuk
menetapkan mode dari suatu pin, pin adalah nomor pin yang akan
digunakan dari 0-19 (pin analog 0-5 adalah 14-19). Mode yang bisa digunakan
adalahINPUT atau OUTPUT.
2. digitalWrite(pin,
value)
Ketika sebuah pin
ditetapkan sebagai OUTPUT, pin tersebut dapat dijadikan HIGH(ditarik
menjadi 5 volts) atau LOW (diturunkan menjadi ground).
3. digitalRead(pin)
Ketika sebuah pin
ditetapkan sebagai INPUT maka anda dapat menggunakan kode ini untuk mendapatkan
nilai pin tersebut apakah HIGH (ditarik menjadi 5 volts)
atau LOW(diturunkan menjadi ground).
Analog
Arduino adalah mesin
digital tetapi mempunyai kemampuan untuk beroperasi di dalam alam analog
(menggunakan trik). Berikut ini cara untuk menghadapi hal yang bukan digital.
1. analogWrite(pin,
value)
Beberapa pin pada
Arduino mendukung PWM (pulse width modulation) yaitu pin 3, 5, 6, 9, 10, 11.
Ini dapat merubah pin hidup (on)atau mati (off) dengan sangat cepat sehingga
membuatnya dapat berfungsi layaknya keluaran analog. Value (nilai)
pada format kode tersebut adalah angka antara 0 ( 0% duty cycle ~ 0V) dan 255
(100% duty cycle ~ 5V).
2. analogRead(pin)
Ketika pin analog
ditetapkan sebagai INPUT anda dapat membaca keluaran voltase-nya. Keluarannya
berupa angka antara 0 (untuk 0 volts) dan 1024 (untuk 5 volts).
(pinMode(ledPin, OUTPUT);)
pinMode fungsi yang berguna untuk memberitahu arduino bahwa pin pada board akan digunakan sebagai input atau output
pinMode fungsi yang berguna untuk memberitahu arduino bahwa pin pada board akan digunakan sebagai input atau output
Fungsi loop() function
adalah program utama yang dipanggil secara continue selama arduino menyala
(dialiri power). Setiap perintah dalam fungsi loop() akan dipanggil satu
persatu sampai perintah terakhir dalam blok loop dicapai, lalu Arduino akan
kembali ke awal perintah di blok fungsi loop(), sampai Arduino dimatikan atau
tombol reset ditekan.
Fungsi setup() dijalankan pertama kali setiap
board arduino dihidupkan sedangkan fungsi loop() dijalankan terus
menerus selama board arduino hidup. Pada program standar C ANSI
fungsi yg pertama dijalankan adalah fungsi main() pada C arduino
adalah fungsi setup().
Fungsi fungsi yg tersedia untuk komunikasi serial
Arduino
·
if
(Serial) : Untuk mengecek apakah Port sudah siap
·
Serial.available()
: Untuk mengecek apakah data sudah ada di buffer penerima
·
Serial.begin()
: untuk mengeset kecepatan transmisi data
·
serial.end()
: Untuk menon-aktifkan pin rx dan tx sbg fungsi serial dan kembali sbg pin
I/O
·
Serial.find()
: mencari string dlm buffer data
·
Serial.findUntil():
mencari buffer data sampai data dgn panjang/terminator nya yg diberikan
ditemukan
·
Serial.flush():
menunggu data terkirim semua
·
Serial.parseFloat():
mengambil data float pertama dari data di buffer serial.
·
serial.parseInt(): mengambil
data integer pertama dari data di buffer serial.
·
Serial.peek():
mengambil data berikutnya di bufer penerima
·
Serial.print()
: mengirim data ASCII
·
Serial.println()
: mengirimdata ASCII + CR,LF (kode enter)
·
Serial.read():
membaca data yg diterima
·
Serial.readBytes():
membaca data byte yg diterima
·
Serial.readBytesUntil()
·
Serial.setTimeout():
mengeset batas maksimum waktu tunggu(timeout) transmisi data.
·
Serial.write()
: mengirim data byte (numerik)
·
Serial.serialEvent():
fungsi ini akan dipanggil jika data datang/diterima.berlaku spt interupsi
serial.
|
Sebelum kita memulai latihan pemrograman serial
arduino kita perlu tahu ttg menu serial Monitor yg tersedia spt tampak pada
gambar dibawah ini:
Gambar 1. Menu Serial Monitor
Serial Monitor digunakan untuk mentransfer
data dari PC ke Arduino board dan menerima data dari arduino board.
Selain dengan tool serial monitor yg terdapat pada
IDE arduino anda juga bisa menggunakan tool serial lainya seperti hyperterminal,
putty dll untuk mengirim dan menerima data pada PC Anda.
Langkah membuat program sketch komunikasi serial
1. set baud rate misal 9600 dgn fungsi serial.begin(9600)
dlm fungsi void setup(). Speed yg tersedia antara lain
300, 1200, 2400, 4800, 9600, 14400, 19200, 28800,38400, 57600, 115200
(liat dokumentasi tiap jenis arduino).
2. untuk menerima data cek apakah ada data di Rx
Buffer dgn fungsi serial.avalable()
jika data tersedia return value = true jika data kosong return value = false.
jika data tersedia return value = true jika data kosong return value = false.
if( serial.available() > 0)
3. mengambil data dari buffer penerima :
serial.read() , return valuenya adalah 1 byte data pertama
yg ada di RX Buffer .
misal byte pertama RX buffer berisi char 2
maka char data =
serial.read(); //data = ‘2’ –> karakter
byte data = serial.read(); // data = 50
–> numerik
4. Untuk mengirim data bisa menggunakan
serial.print(dataygdikirim) : mengirim
data ascii
serial.println(dataygdikirim) , ditambahkan kode enter
(CR dan LF)
serial.write(dataygdikirim) : mengirim data byte
Contoh serial.print(‘A’) akan mengirim
huruf A
serial.print(65) akan mengirim 2 byte berisi code
Ascii ‘6’ dan ‘5’ (aktual yg dikirim 54 dan 53)
serial.write(65) akan mengirim 1 byte 65
(aktual yg dikirim numerik 65)
serial.write(data) adalah pengganti
syntax Serial.print(data, BYTE) versi sebelumnya. Parameter data pada
serial.write adalah angka 1 byte ( 0-255)
contoh program sketch sederhana menerima data kemudian
data dikirim kembali
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
void
setup() { Serial.begin(9600); } void
loop() { if
( Serial.available()) { char
datachar = Serial.read(); } delay(1000) serial.print(datachar)// data yg
diterima dikirim kembali. } |
Beberapa Contoh yg akan kita buat antara lain:
-Mengirim data string/text “apa kabar”
-Mengirim data bilangan/angka : 123
-Mengirim data bilangan/angka : 123
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
int
angkaint = 123; float
angkafloat 123.5; char
datachar = 123; void
setup() { Serial.begin(9600); // set
baudrate = 9600 } void
loop() { Serial.print("apa
kabar"); // kirim string/text Serial.println(angkaint); //
kirim angka type integer 123 Serial.println(angkafloat); //
kirim angka type float 123.5 Serial.println(datachar);
// kirim code ascii 123 yaitu tanda kurung buka { Serial.println(angkaint,HEX); //
kirim angka dlm bentuk heksa , akan dikirim 7BH Serial.println(angkaint,BIN); //
kirim angka dlm bentuk biner , 0111 1011 } |
-Menerima data bilangan ASCII misal data yg datang
misal “435”
* Cara Pertama
karakter ditampung di array dan dirubah menjadi string dgn menambahkan null 0 diakhir array( karena string adalah sebuah array type char yg diakhiri dgn null). kemudian array tsb /data string di konversi ke int dgn fungsi atoi.
karakter ditampung di array dan dirubah menjadi string dgn menambahkan null 0 diakhir array( karena string adalah sebuah array type char yg diakhiri dgn null). kemudian array tsb /data string di konversi ke int dgn fungsi atoi.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
char
arraychar[4]; int
i=1; void
setup() { Serial.begin(9600); } void
loop() { if
( Serial.available()) { char
datachar = Serial.read(); if(i>4 &&
isdigit(datachar)) //jika datachar adalah ASCII 0-9 {
arraychar[i++]=datachar; } else
arraychar[i]=0; //
akhir dari sebauh string adalah null (0) int
angka = atoi(arraychar); } } |
* Cara kedua
mengggunakan loop sbb :
numerik = numerik * 10 + datachar;
karena datachar adalah kode ascii maka kita rubah ke int dgn cara
datachar-48 atau sama juga dgn datachar-'0'
jadi rumusnya
numerik = numerik * 10 + (datachar-'0');
Contoh Proses loop saat penerimaan data
“435” , spt tabel dibawah , jika data berupa ‘/n maka
loop selesai:
Kode sketch nya sbb:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
void
setup() { Serial.begin(9600); } void
loop() { int
numerik = 0; if
(Serial.available()) { char
datachar = Serial.read(); while
(datachar != '\n') { if(isdigit(datachar)) { numerik = numerik * 10 +
(datachar - '0'); } datachar = Serial.read(); } int
angkaditerima = numerik; } |
-Mengirim data berurutan ” A,123,B,456″
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
int
bil1 = 123; int
bil2 = 456; void
setup() { Serial.begin(9600); // set
baudrate = 9600 } void
loop() { Serial.print("A"); Serial.print(","); Serial.print(123,DEC); Serial.print(","); Serial.println(345,DEC); delay(1000);
//delay looping 1 detik} |
-Menerima data berurutan : “123,456,789 /n”
Pada contoh ini kita akan menggunakan serial.parseint()
untuk mengambil data berurutan yg dibatasi koma dan diakhiri ‘/n’
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
void
setup() { Serial.begin(9600); } void
loop() { while
(Serial.available() > 0) { int
data1 = Serial.parseInt();
// ambil data ke-1 int
data2 = Serial.parseInt();
// ambil data ke-2: int
data3 =
Serial.parseInt(); // ambil data
ke-3: if
(Serial.read() == '\n') { int
jumlah = data1 +data2 + data3; } } } |
Menambahkan port serial pada pin I/O
Jika arduino yg kita miliki hanya punya 1 port serial
kita bisa merubah pin I/O yg manapun menjadi Port serial tambahan .dengan
bantuan class SoftwareSerial . Tambahkan file header
SoftwareSerial.h pada sketch anda dan buat 1 buah objek
SoftwareSerial untuk penambahan 1 port, pada contoh dibawah ini kita buat 1
objek sofwareSerial dgn nama serialkedua.
Langsung saja kita lihat contohnya sbb:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include
<SoftwareSerial.h> SoftwareSerial Serialkedua(10,
11); // pin 10 untuk RX, pin 11 untuk TX void
setup() { Serial.begin(96600); Serialkedua.begin(9600); } void
loop() { if
(Serial.available()) serial.println("test
dari port1"); if
(Serialkedua.available()) Serialkedua.println("test
dari port2"); } |
Contoh kedua menggunakan 3 buah port : Serial, port1 dan
port2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#include <SoftwareSerial.h> SoftwareSerial port1(10,11); //
software serial port1: TX = pin 10, RX = pin 11 SoftwareSerial port2(8,9); //
software serial port2: TX = pin 8, RX = pin 9 void
setup() { Serial.begin(9600); port1.begin(9600); port2.begin(9600); } void
loop() { port1.listen(); while
(port1.available() > 0) { char
inByte = port1.read(); //baca
port1 dan kirim ke serial Serial.write(inByte); } port2.listen(); while
(port2.available() > 0) { char
inByte = port2.read(); //baca
data port2 dan kirimke serial Serial.write(inByte); } } |
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 bisa baca di sini. 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 sbg 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)
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
– 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);
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 ().
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.
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
Content-Type: text/html
Refresh: 5
<!DOCTYPE
HTML>”);
<html>
<body>
<html>
<body>
hello
ini dari web server arduino
<body>
</html>
Program sketch agar arduino menjadi web server dan mengirim balasan HTML diatas adalah sbb
</html>
Program sketch agar arduino menjadi web server dan mengirim balasan HTML diatas adalah sbb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#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>
#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;
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];
SOCKET pingSocket = 0;
int pingTimeout = 4;
byte destinationIp[] = { alamat ip };
char buffer [256];
void
setup(void){
Ethernet.begin(mac, ip, dnsserver, gateway, subnet);
}
Ethernet.begin(mac, ip, dnsserver, gateway, subnet);
}
void
loop(void) {
ICMPPing ping(pingSocket);
ping( pingTimeout , destinationIp , buffer );
dataAnalog = analogRead(A1);
ICMPPing ping(pingSocket);
ping( pingTimeout , destinationIp , buffer );
dataAnalog = analogRead(A1);
if
(client.connect(“namaDomain.com”, 80)) {
client.print( “GET /forminput.php?datadikirim=dataAnalog HTTP/1.1”);
client.print( “Host: namaDomain.com.com”);
client.println( “Connection: close”);
client.println();
client.println();
client.stop();
}
else {
client.print( “GET /forminput.php?datadikirim=dataAnalog HTTP/1.1”);
client.print( “Host: namaDomain.com.com”);
client.println( “Connection: close”);
client.println();
client.println();
client.stop();
}
else {
}
delay(5000);
}
delay(5000);
}
Contoh
3
TCP
Chat Client server
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#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() > 0) { char
thisChar =
client.read(); //baca byte dari client: server.write(thisChar);
//kirim kembali ke client: } } } |
Contoh
3 . Client TCP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#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 .
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
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); } |
Referensi
:
Semoga Bermanfaat...
IF
IF