Senin, 18 April 2016

Tutorial Singkat Bahasa Pemograman Arduino


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
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.
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


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.
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

Posted by pccontrol
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)
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
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>
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  HTTP/1.1”);
client.print( “Host: namaDomain.com.com”);
client.println( “Connection: close”);
client.println();
client.println();
client.stop();
}
else {
}
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() &gt; 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

Tidak ada komentar:

Posting Komentar

PERANCANGAN ALAT PENDETEKSI ASAP ROKOK BERBASIS ARDUINO UNO DENGAN OUTPUT SUARA DAN MATI LAMPU SECARA OTOMATIS

BAB I PENDAHULUAN 1.1 Latar Belakang          Dalam perkembangan dunia teknologi semakin maju maka diperlukan kesadaran kita untuk...