6. Pemrograman dengan Ethernet Shield
Bab ini membahas penggunaan Arduino Ethernet Shield untuk membuat Arduino berlaku sebagai web server maupun klien. Di samping itu, bab ini juga mengupas cara untuk mengirimkan email.
6.1 Pengantar Ethernet Shield
Salah satu cara yang memungkinkan Arduino berkomunikasi dengan Internet adalah dengan menggunakan Ethernet Shield. Gambar 6.1 memperlihatkan contoh Arduino Ethernet Shield.
Di pasaran terdapat berbagai peranti serupa yang bersifat kompatibel’. Salah satu yang terkenal adalah HunRun HR911105A, seperti yang ditunjukkan pada Gambar 6.2.
Untuk membuat Ethernet Shield bekerja, Anda harus mempunyai port Ethernet yang memungkinkan komputer atau peranti lain terhubung ke Internet. Di perkantoran, biasanya setiap ruang kerja paling tidak mengandung saluran seperti itu. Contoh ditunjukkan pada Gambar 6.3.
GAMBAR 6.1
GAMBAR 6.2 HunRun Ethernet Sheild
GAMBAR 6.3
Ethernet port yang biasa
disediakan di dinding
GAMBAR 6.4
Hubungan kabel Ethernet dan
Ethernet Shield
Untuk menghubungkan port tersebut ke Ethernet Shield,kabel Ethernet atau dikenal pula dengan kabel RJ45 diperlukan.Gambar 6.4 memperlihatkan kabel Ethernet dan hubungan ke Ethernet Shield.
Sekiranya,di tempat Anda tidak tersedia port Ethernet, Anda bisa menggunakan Wi-Fi Router.Sebagai contoh, penulis menggunakan produk TP-LINK yang dinamakan WiFi Range Extender,seperti yang ditunjukkan pada Gambar 6.5.Peranti ini memungkinkan untuk menerima isyarat dari titik-akses Wi-Fi dan menyalurkan ke peranti lain secara nirkabel. Selain itu, peranti ini memiliki satu port Ethernet yang dapat digunakan untuk dihubungkan ke Ethernet Shield sehingga memungkinkan Ethernet Shield berkomunikasi dengan Internet.
Untuk mempraktikkan,silakan untuk mengunggah sketsa berikut yang menangani permintaan HTTP dari browser.
GAMBAR 6.5
WiFi Range Entender yang mendukung
Ethernet port
CATATAN
GAMBAR 6.6
Rangkaian untuk melakukan percobaan
pemantauan suhu dan kelembaban udara
melalui browser
CATATAN |
Peranti didepan perlu dihubungkan ke suatu titik-akses WIFI agar port Ethernet dapat bekerja dengan baik. |
6.2 Pengujian Ethernet Shield Sebagai Web Server
Ethernet sebagai web server? Ya, hal itu dimungkinkan. Sebagai web server, Ethernet Shield dapat dipakai untuk melayani permintaan HTTP dari suatu komputer. Aplikasinya, Anda bisa menghidupkan atau mematikan lampu melalui browser di komputer atau telepon pintar.
Langkah awal yang perlu dilakukan adalah menyusun rangkaian seperti yang ditunjukkan pada Gambar 6.6. Komponen DHT akan digunakan untuk membaca suhu dan kelembaban udara.
Gambar 6.8 menunjukkan contoh hasil pemantauan suhu dan kelembaban udara melalui browser. Hal yang perlu diperhatikan, mengingat percobaan ini menggunakan alamat IP yang bersifat dinamis, komputer tempat browser dijalankan harus
GAMBAR 6.7
Tampilan awal sketsa server yang memperlihatkan alamat IP server menggunakan Wi-Fi yang sama dengan yang digunakan oleh Ethernet Shield. Jika tidak, web server tersebut tidak dapat diakses oleh browser, seperti yang ditunjukkan pada Gambar 6.9.
GAMBAR 6.8 Hasil pemantauan suhu dan kelembaban udara melalui browser
GAMBAR 6.9 Hasil yang menunjukkan bahwa web server dengan alamat 192.168.40.85 tidak dapat diakses
Berikut adalah penjelasan kode yang terdapat dalam sketsa server.
GAMBAR 6.10
Hasil di serial Monitor berdasarkan permintaan
HTTP dari sisi browser
-
- Penyertaan pustaka dht dilakukan melalui:
# include <dht . h>
-
- Adapun baris berikut digunakan untuk kepentingan Ethernet Shield: Hasil di Serial Monitor berdasarkan permintaan
# include <Ethernet.h>
-
- Definisi yang menyatakan pin yang dihubungkan ke DHTII berupa:
const int PIN DHT = AD;
- penentuan alamat MAC (Media Access Control) milik peranti Ethernet dilakukan melalui pernyataan:
byte mact)( OxDE, OxAD, OxBE, OxEF, OxFEt OxED } ;
Jika Anda memilki alamat MAC yang tertera pada stiker di Ethernet Shield, masukkan angka tersebut untuk menggantikan angka di atas. Namun, jika Anda tidak mendapatkannya, angka di atas dapat digunakan.
- Pembuatan objek yang digunakan untuk menjadikan Ethernet Shield bertindak sebagai server dilakukan melalui:
EthernetServer server (80) ;
Angka 80 menyatakan port yang digunakan untuk mengakses server.
- Pernyataan berikut digunakan untuk membuat objek bernama DHT yang berkelas dht: dht DHT;
Melalui DHT inilah, suhu dan kelembaban udara dapat diperoleh.
- Di setup ( ) , pernyataan berikut digunakan untuk memungkinkan pengiriman informasi ke Serial Monitor:
Serial . begin (9600) ;
- Inisialisasi terhadap Ethernet Shield dilakukan dengan menggunakan pernyataan:
Ethernet . begin (mac) ;
Argumen pada begin ( ) berupa alamat MAC yang tercatat di array mac.
- Adapun proses untuk membuat Arduino sebagai server dilakukan melalui:
server.begin ( ) ;
- Sete/ah server terbentuk, alamat IP untuk server ini diperoleh melalui:
Ethernet. loca11P()
Itulah sebabnya, alamat IP ditampilkan ke Serial Monitor melalui pernyataan:
Serial . println (Ethernet. loca11P ( ) ) ;
- Untuk memantau permintaan klien, pernyataan berikut diberikan:
EthernetC1ient k lien = server.available ( ) ;
Mula-mula, klien dideklarasikan bertipe EthernetC1ient. Selanjutnya, variabel tersebut diisi dengan nilai balik server. available ( ) . Dalam hal ini, klien akan berupa true kalau terdapat permintaan dari klien (di browser).
- Jika terdapat permintaan dari klien (yang dilakukan melalui if (klien) ), bagian yang berada di antara { dan } akan dieksekusi. Dalam hal ini, tindakan yang dilakukan adalah memeriksa per. mintaan dan memberikan tanggapan yang sesuai kepada klien. Pertama-tama, perintah yang dilakukan adalah memberikan informasi di Serial Monitor mengenai keberadaan permintaan klien, yang dilakukan melalui pernyataan:
Serial . println (“Permintaan baru. . . , ;
Selanjutnya, variabel bernama barisSekarangKosong dideklarasikan bertipe boolean dan diisi dengan true. Hal ini menyatakan bahwa variabel tersebut masih kosong.
Pernyataan
while (klien . connected ( ) )
digunakan untuk memastikan bahwa klien masih terhubung dengan web server. Jika klien masih terhubung, satu karakter yang berasal dari permintaan klien akan dibaca melalui pernyataan:
char c = klien.read() ;
Hasilnya diletakkan di variabel c. Lalu, isi variabel ini ditampilkan di Serial Monitor melalui pernyataan:
Serial . write (c) ;
Lalu, jika isi variabel c berupa new/ine (\n) dan barisSekarangKosong, tanggapan kepada klien mulai dikirimkan. Perintahnya berupa:
klien.println (“HTTP/l.1 200 OK”) ; klien .println (“Content—Type: text/html”) ; klien.println (“Connection: close”) ; k lien . println (“Refresh: 5”) ; klien . println ( ) ;
Perintah pertama menyatakan bahwa protokol yang digunakan adalah HTTP/1.1. Angka 200 dan OK digunakan untuk memberikan isyarat bahwa permintaan dapat dilayani. Perintah kedua digunakan untuk menyatakan bahwa tanggapan berbentuk teks berformat HTML. Pernyataan
Perintah keempat digunakan untuk menyatakan bahwa pengulangan tanggapan akan dilakukan per 5 detik. Pernyataan kelima memberikan baris kosong. Perintah terakhir ini diperlukan karena antara judul tanggapan dan hasil tanggapan (kode HTML) pertu dipisahkan oleh baris kosong.
CATATAN | Jika Anda ingin mendalami tentang judul HTTP, silakan membaca tulisan
di: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html |
Perintah selanjutnya adalah untuk mengirimkan kode HTML yang dimulai dari
Klien.println(“!DOCTYPE HTMI>”);
hingga
klien. Println(“</html>”);
Hal terpenting yang perlu dijelaskan di sini adalah pada perintah:
DHT.read11 (PIN DHT) ;
float suhu DHT . temperature;
float kelembaban = DHT.humidity;
char strSementara(7) ;
dtostrf (suhu, 6, 2, strSementara) ;
klien . print (“Temperatur: ”) ;
klien . print (strSementara) ;
klien . print In (“° ;
dtostrf (kelernbaban, 6, 2, strSementara) ;
klien . print (“Kelembaban: “) ;
klien.print (strSementara) ;
klien. Println(“%”);
Kode inilah yang digunakan untuk membaca data dari sensor DHTII dan kemudian menyajikannya dalam halaman web. Pada perintah ini, dtostrf ( ) digunakan mengonversi bilangan real (suhu dan kelembaban) menjadi string. Argumen pertama fungsi ini berupa nilainya yang akan dikonversi ke string. Argumen kedua menyatakan lebar string dalam karakter. Argumen ketiga menyatakan jumiah digit pecahan. Argumen keempat berupa string yang menampung hasil konversi.
Simbol seperti ° menyatakan tanda derajat (0) dan % menyatakan tanda %.
- Setelah pernyataan while terdapat pernyataan:
if (c ==’\n’){
// Baris sekarang kosong
barisSekarangKosong = true;
}
else if (c ! = ’\r’) {
// Ada karakter baru
barisSekarangKosong= false;
}
Pernyataan inilah yang digunakan untuk menentukan isi variabel barisSekarangKosong. Variabel ini diisi dengan true kalau isi variabel c berupa newline. Adapun pengisian false pada variabel ini dilakukan sekiranya isi c bukan berupa newline maupun linefeed (\r).
- Pernyataan
delay (10) ;
digunakan untuk memberikan kesempatan browser menerima data.
- Pernyataan
klien. stop ( ) ;
digunakan untuk memutus hubungan dengan klien.
6.3 Pengontrolan LED Melalui Browser Menggunakan Metode Get
Contoh di Subbab 6.3 hanya bersifat pasif. Artinya, pemakai tidak bisa melakukan tindakan apa-apa selain memperoleh informasi dari web server. Sekarang akan dibahas cara untuk mengendalikan LED dari bowser. Pemakai bisa memberikan perintah untuk menghidupkan ataupun mematikan LED melalui browser.
GAMBAR 6.1 1
Rangkaian untuk menguji pengendalian
LED melalui browser
Gambar 6.11 memperlihatkan penyusunan rangkaian untuk mempraktikkan pengendalian LED melalui browser. Dalam hal ini, katode LED dihubungkan ke pin GND Arduino dan anode LED dihubungkan ke resistor 220Ω. Ujung lain resistor dihubungkan ke pin 2 Arduino.
Adapun sketsa yang diperlukan adalah seperti berikut:
// Contoh untuk mengendalikan LED
/ / melalui browser
/ / menggunakan Ethernet Shield
//———————————————
# include <Ethernet.h>
const int PIN LED = 2;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED } ;
// Inisialisasi web server
EthernetServer server (80) ;
bool keadaanLed = false;
String permintaanKlien;
void setup() (
pinMode (PIN_LED, OUTPUT) ;
digitalWritE (PIN_LED, keadaanLed) ;
Serial . begin (9600) ;
Ethernet . begin (mac) ;
server . begin ( ) ;
Serial . print (“IP Server: “);
Serial . print In (Ethernet. local IP ( ) ) ;
}
void loop ( ) {
// Periksa permintaan dari klien
EthernetC1ient klien = server. available ( ) ; if (klien)
{
Serial. print In (“Permintaan baru. . .”) ;
boolean barisSekarangKosong = true; while (klien. connected ( ) ) {
if (klien. available() ) {
char c = klien.read() ;
permintaanK1ien += c;
if (c == ‘\n’ && barisSekarangKosong) {
// Kirim tanggapan HTTP
Klien.println(“HTTP/1.1200 0K”) ;
klien . print In (“Content—Type: text/ html”) ;
klien . println (“Connection: close”) ;
klien.println ( ) ;
// Kirim halaman web
Klien.printin DOCTYPE HTML>”) ;
klien.println (<html>”);
klien.println (“<head>”);
klien.println (“<tit1e>Pengenda1ian LED</tit1e>”) ;
klien.println (“</head>”;
klien.println (“<body>”);
klien.println(“<form method=\”get\”>”) ;
prosesPermintaan ( ) ;
if(keadaanLed) {
klien. println (“<input type=\”submit\””) ;
klien. println (
“ name=\”tombol\”value=\”Matikan LED\”>”;
klien.println (“<input type=\”submit\'”‘) ;
klien.println ( name=\”tombol\”value=\”Hidupkan LED\”>”) ;
}
else {
klien . println (“</ form>”) ;
klien . println ; klien.println ;
// Tampilkan permintaanK1ien dan kemudian kosongkan
Serial.println (permintaanKIien);
permintaanK1ien =””;
break;
if (c — ) {
// Baris sekarang kosong barisSekarangKosong = true;
if (c ! = ) {
// Ada karakter baru
barisSekarangKosong = false;
}
}
}
//Beri kesempatan kepada browser
// untuk memperoleh
datadelay (10) ;
// Akhiri koneksi
klien. stop ( ) ;
Serial. println (“Klien terputus..”);
}
}
void prosesPermintaan ( )
// Tentukan keadaanLed sekarang
if(permintaanK1ien.indexOf(“GET/?tombol=Hidupkan+LED”)>-1) {
keadaanLed = true;
digitalWrite (PIN_LED, HIGH) ;
}
else
if (permintaanKlien.indexOf (“GET /?tombol=Matikan+LED”)>-1) {
keadaanLED = false;
digitalWrite(PIN_LED, LOW);
}
}
Melalui browser, Anda bisa mengetikkan alamat server. Contoh hasil yang didapatkan ditunjukkan pada Gambar 6.13. Terlihat bahwa tombol berjudul ‘Hidupkan LED’ ditampilkan.
Keadaan awal di serial monitor yang
Menampilkan alamat IP server
GAMABR 6.13
server diketikkan
Adapun Gambar 6.14 menunjukkan hasil di Serial Monitor setelah pemakai memasukkan alamat IP di browser.
Selanjutnya, Anda bisa mencoba untuk mengeklik pada tombol
GAMBAR 6.14
Tanggapan di serial monitor setelah alamat web
server diklik di browser
bahwa terdapat ? tombol=Hidupkan+LED. Dalam hal ini, tombol dikenal sebagai variabel URL (Vniform Resource Locator) dan “Hidupkan+LED” adalah isi variabel tersebut. Variabel dan nilai itulah yang memberi isyarat kepada server untuk menghidupkan LED.
GAMBAR 6.15 Hasil di Serial Monitor setelah tombol Hidupkan LED diklik
Tanggapan dari web server akan membuat browser menampilkan halaman seperti yang terlihat pada Gambar 6.16. Tampak bahwa judul tombol berubah menjadi “Matikan LED”.
GAMBAR 6.16 Hasil di browser setelah tombol Hidupkan LED diklik
Selanjutnya,jika tombol diklik Matikan LED, akan diperoleh hasil di Serial Monitor seperti yang terlihat di Gambar 6.17. Perhatikan isi Referer. Tampak bahwa terdapat ? tomboI=Mati kan+LED. Dalam hal ini, tombol dikenal sebagai variabel URL (Uniform Resource Locator) dan “Matikan+LED” adalah isi variabel tersebut. Variabel dan nilai itulah yang memberi isyarat kepada server untuk mematikan LED.
Tentu saja, halaman di browser pun berubah, yang akan menampilkan tombol berjudul “Hidupkan LED”.
GAMBAR 6.17 Hasil di Serial Monitor setelah tombol Matikan LED diklik
Sekarang, marilah untuk memahami sketsa etherLed.
-
- Baris berikut digunakan untuk kepentingan pemanfaatan pustaka untuk Ethernet Shield:
# include <Ethernet.h>
-
- Definisi yang menyatakan pin yang dihubungkan ke DHTII berupa:
const int PIN DHT – AD;
-
- Penentuan alamat MAC (Media Access Control) milik peranti Ethernet dilakukan melalui pernyataan:
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED } ;
Jika Anda memilki alamat MAC yang tertera pada stiker di Ethernet Shield, masukkan angka tersebut untuk menggantikan angka di atas. Namun, jika Anda tidak mendapatkannya, angka di atas dapat digunakan.
-
- Pembuatan objek yang digunakan untuk menjadikan Ethernet Shield bertindak sebagai server dilakukan melalui:
EthernetServer server (80) ;
Angka 80 menyatakan port yang digunakan untuk mengakses server.
-
- Di setup ( ) , pernyataan berikut digunakan untuk memungkinkan pengiriman informasi ke Serial Monitor:
Serial . begin (9600) ;
-
- Inisialisasi terhadap Ethernet Shield dilakukan dengan menggunakan pernyataan:
Ethernet . begin (mac) ;
Argumen pada begin ( ) berupa alamat MAC yang tercatat di array mac.
-
- Adapun proses untuk membuat Arduino sebagai server dilakukan melalui:
server . begin ( ) ;
-
- Setelah server terbentuk, alamat IP untuk server ini diperoleh melalui:
Ethernet. local IP ( )
ltulah sebabnya alamat IP ditampilkan ke Serial Monitor melalui pernyataan:
Serial . println (Ethernet. local IP ( ) ) ;
-
- Untuk memantau permintaan klien, pernyataan berikut diberikan:
EthernetClient klien — server. available() ;
-
- Terdapat dua deklarasi variabel global berupa:
bool keadaanLed = false;
String permintaanKlien;
Variabel keadaanLed digunakan untuk menyatakan keadaan LED. Nilai false menyatakan LED mati dan nilai true menyatakan LED hidup. Variabel permintaanKlien digunakan untuk menyimpan string yang merupakan hasil permintaan klien di browser.
-
- Pernyataan berikut digunakan untuk menyatakan bahwa pin yang digunakan untuk mengendalikan
LED (PIN_LED) bermode OUTPUT:
pinMode (PIN LED, OUTPUT) ;
Artinya, pin tersebut dapat diatur bernilai HIGH atau LOW oleh Arduino.
- Pernyataan
digitalWrite (PIN LED, keadaanLed) ;
digunakan untuk mengatur LED sesuai dengan isi variabel keadaanLed. Dalam hal ini, LED padam mengingat nilai variabel ini berupa false pada keadaan awal.
- pernyataan berikut di setup ( ) digunakan untuk menyatakan bahwa web server siap
menerima perintah dari browser:
Serial. print In (“Siap melayani permintaan! “) ;
- Untuk memantau permintaan klien, pernyataan berikut diberikan:
EthernetCIient k lien = server. available () ;
Mula-mula, klien dideklarasikan bertipe EthernetClient. Selanjutnya, variabel tersebut diisi dengan nilai balik server . available ( ) . Dalam hal ini, klien akan berupa true kalau terdapat permintaan dari klien (di browser).
- Jika terdapat permintaan dari klien (yang dilakukan melalui if (klien) ), bagian yang berada di antara { dan } akan dieksekusi. Dalam hal ini, tindakan yang dilakukan adalah memeriksa permintaan dan memberikan tanggapan yang sesuai kepada klien.
Pertama-tama, perintah yang dilakukan adalah memberikan informasi di Serial Monitor mengenai keberadaan permintaan klien, yang dilakukan melalui pernyataan:
Serial . print In (“Permintaan baru. . . “)b
Selanjutnya, variabel bernama barisSekarangKosong dideklarasikan bertipe boolean dan diisi dengan true. Hal ini menyatakan bahwa variabel tersebut masih kosong.
pernyataan:
while (k lien . connected ( ) ) digunakan untuk memastikan bahwa klien masih terhubung dengan web server. Jika klien masih terhubung, satu karakter yang berasal dari permintaan klien akan dibaca melalui pernyataan:
char c = k lien. read ( ) ;
Hasilnya diletakkan di variabel c. Lalu, isi variabel ini ditampilkan di Serial Monitor melalui pernyataan:
Serial . write (c) ;
Adapun
permintaanKlien += c;
digunakan untuk menambahkan karakter yang tersimpan di c ke akhir string yang terdapat di permintaanKlien. Perlu diketahui, variabel permintaanKlien digunakan untuk mencatat string yang merupakan permintaan klien.
Lalu, jika isi variabel c berupa newline (\n) dan barisSekarangKosong, tanggapan kepada klien mulai dikirimkan. Perintahnya berupa:
klien.println (“HTTP/I.1200OK”) ;
klien.println (“Content—Type: text/ html”) ;
klien.println (“Connection: close”) ;
klien.println ( ) ;
Perintah pertama menyatakan bahwa protokol yang digunakan adalah HTTP/I.I. Angka 200 dan OK digunakan untuk memberikan isyarat bahwa permintaan dapat dilayani. Perintah kedua digunakan untuk menyatakan bahwa tanggapan berbentuk teks berformat HTML. Pernyataan ketiga digunakan untuk menyatakan bahwa klien berharap bahwa koneksi akan diputus oleh server. Pernyataan keempat memberikan baris kosong. Perintah terakhir ini diperlukan karena antara judul tanggapan dan hasil tanggapan (kode HTML) perlu dipisahkan oleh baris kosong.
Perintah selanjutnya adalah untuk mengirimkan kode HTML yang dimulai dari
klien.println (“</HTML>”) ;
hingga
klien.Println(“</html>” ;
Adapun pernyataan
break;
digunakan untuk mengakhiri while.
- Setelah pernyataan while terdapat pernyataan:
if (c ==’\n’) {
//Baris sekarang kosong
barisSekarangKosong = true;
}
else if (c ! =’\ r’ ) {
// Ada karakter baru
barisSekarangKosong = false;
}
Pernyataan inilah yang digunakan untuk menentukan isi variabel barisSekarangKosong. Variabel ini diisi dengan true kalau isi variabel c berupa newline. Adapun pengisian false pada variabel ini dilakukan sekiranya isi c bukan berupa newline maupun linefeed (\r).
- Pernyataan
delay (10) ;
digunakan untuk memberikan kesempatan browser menerima data.
- Pernyataan
klien. stop ( ) ;
digunakan untuk memutus hubungan dengan klien.
- Adapun kodeyang menyusun fungsi prosesPermintaan ( ) dijelaskan berikut ini. Pertama, kode
if (permintaanK1ien. indexOf (“GET /?tomboI=Hidupkan+LED”) > —1) {
keadaanLed = true;
digitalWrite (PIN LED, HIGH) ;
}
digunakan untuk memperoleh posisi string “GET /?tomb01=Hidupkan+LED” pada string permintaanKlien. Perlu diketahui, indexOf ( ) akan memberikan nilai balik berupa -1 jika string yang dicari tidak ditemukan. Oleh karena itu, if tersebut menyatakan bahwa kalau string “GET /?tombol=Hidupkan+LED” ditemukan pada permintaanKlien. Jika kondisi di if tersebut terpenuhi, variabel keadaanLed diisi dengan true (yang menyatakan LED hidup), kemudian pin yang berhubungan dengan LED dibuat menjadi HIGH, untuk menghidupkan LED.
Sebaliknya,
if(permintaanKIien.indexOf(“GET/?tomb01=Matikan+LED”)>—1){
keadaanLed = false;
digitalWrite (PIN LED, LOW) ;
}
digunakan untuk membuat LED mati jika string “GET /?tombol=Matikan+LED” terdapat pada permintaanKlien.
6.4 Pengontrolan LED Melalui Browser Menggunakan Metode Post
Pada contoh di depan, pengendalian LED dilakukan dengan menggunakan metode GET. Kelemahan metode ini adalah memungkinkan siapa saja dapat melihat kode yang dilewatkan ke web server karena tertulis di baris URL di browser. Untuk mengatasi kelemahan ini, metode POST dapat digunakan. Pada metode POST, variabel dan isinya tidak akan terlihat di baris URL.
Secara prinsip, kode yang diperlukan untuk menangani metode POST tidak berbeda jauh dengan pada metode GET. Untuk mempraktikkan, Anda bisa mengunggah sketsa berikut:
//————————————— Contoh untuk mengendalikan LED
// melalui browser
// Versi: POST
//—————————————
# include <Ethernet.h>
const int PIN LED = 2;
byte mac[] { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED } ;
// Inisialisasi web server EthernetServer server (80) ;
bool keadaanLed false;
String permintaanK1ien;
String dataPost;
void setup ( ) {
pinMode (PIN LED, OUTPUT) ;
digital Write (PIN LED, keadaanLed) ;
Serial . begin (9600) ;
Ethernet . begin (mac) ;
server . begin ( ) ;
Serial. println (“IP Server:”);
Serial. println (Ethernet. local IP ( ) ) ;
}
void loop ( ) {
// Periksa permintaan dari klien
EthernetC1ient klien — server . available ( ) ;
if (klien)
{
Serial . print In (“Permintaan baru. . . ,
boolean barisSekarangKosong = true;
while (klien.connected ( ) )
if (klien. available ( ) )
char c = klien. read ( ) ;
permintaanK1ien += c;
if (C == ‘\n’&& barisSekarangKosong){
// Baca data POST dahulu
dataPost =””;
char karPost;
while (klien. available ( ) ) {
char karPost klien. read() ;
dataPost karPost;
}
Serial. println (“\nData POST:” ) ;
Serial . println (dataPost) ;
Serial. Println”—— Akhir data post”) ;
// Kirim tanggapan HTTP
Klien.println(“<HTTP/1.1 200 0K”) ;
Klien.printlntext/ html”) ;
klien.println (“Connection: close”) ; klien.println() ;
// Kirim halaman web
klien.println DOCTYPE HTML>”) ;
klien.println (“<html>”);
klien.println(“<head>”);
klien.println (“<tit1e>Pengendalian LED</title>”) ;
klien.println (“</head>”);
klien.println (“<body>”);
klien.println(“<formmethod=\”post\”>”) ;
prosesPermintaan ( ) ;
if (keadaanLed) {
klien.println (“<input type=\”submit\””);
klien.println (
name=\”tombol\” value=\”Matikan LED\”>”);
}
else{
klien.println(“<inputtype=\”submit\””;
klien.println {
“ name=\”tombol\” value=\”HidupkanLED\”>”;
}
klien.println(“</form>)”;
klien.println(“<body>”);
klien.println(“</html>”);
// Tampilkan permintaanKIien dan kemudian kosongkan
Serial.println(permintaanKIien); permintaanKIien ==””;
break;
}
if (c ==’\n’){
// Baris sekarang kosong barisSekarangKosong = true;
if (c ! = ‘\r’ {
//Ada karakter baru barisSekarangKosong = false;
}
}
}
// Beri kesempatan kepada browser
// untuk memperoleh data
delay (10) ;
// Akhiri koneksi
klien . stop() ;
Serial. print In (“Klien terputus… “) ;
}
}
void prosesPermintaan ( ) {
// Tentukan keadaanLed sekarang
if (data?ost.indexOf (“tomb01=hidupkan+LED”)>-1)
keadaanLed = true;
digitalWrite (PIN_LED, HIGH) ;
}
else
if (data Post. indexOf (“tomboI=Matikan+LED”)>—1
keadaanLed = false;
digitalWrite (PIN_LED, LOW) ;
}
}
Berikut adalah penjelasan yang menekankan pada perbedaan dengan metode GET.
- Kode
dataPost =””;
char karPost;
while (klien.available()) {
karPost = klien.read() ;
dataPost += karPost;
digunakan untuk memperoleh data POST. Data POST terletak setelah baris kosong. ltulah sebabnya, kode di atas diletakkan setelah:
if (c==’\n’ && barisSekarangKosong)
- Penentuan metode POST dilakukan pada formulir, yang dibentuk melalui pernyataan:
klien.println(“<formmethod=\”post\”’);
Penanganan klik pada tombol di halaman web dilakukan dengan menggunakan tombol submit. ltulah sebabnya, terdapat kode berikut:
if (keadaanLed) {
klien.println(“<inputtype=\”submit\””) ;
klien.println( name=\”tombol\” “Matikan LED\”>”) ;
else
{
klien.println(“<input type=\”submit\””) ;
klien.println (name=\”tombol\”value=\”Hidupkan LED\”>”) ;
- Penentuan perintah POST dilakukan terhadap variabel dataPost. Perintah yang menyeleksinya adalah:
if(dataPost.indexOf(“tomb01=Hidupkan+LED”)>—1){ keadaanLed = true;
digitalWrite (PIN_LED, HIGH) ;
else
if(dataPost.indexOf(“tombol=Matikan+LED”)>-1){
keadaanLed = false;
digitalWrite (PIN_LED, LOW) ;
}
GAMBAR 6.18
Keadaan awal di browser setelah alamat IP server dipanggil
Jika tombol
GAMBAR 6.19
Hasil pemanggilan alamat
IP di Serial Monitor
GAMBAR 6.20 Hasil di browser setelah tombol Hidupkan LED diklik
GAMBAR 6.21 Hasil di Serial Monitor ketika tombol Hidupkan LED dikik
Jika tombol Matikan LED diklik, hasil seperti terlihat pada Gambar 6.21 dimunculkan kembali. Adapun hasil di Serial Monitor ditunjukkan di Gambar 6.22. Tampak bahwa variabel data Post berisi tomb01=Mat i kan+LED. Data tersebut menyatakan pasangan antarnama variabel dan isinya.
GAMBAR 6.22 Hasil di Serial Monitor setelah tombol Matikan LED diklik
6.5 Pengontrolan LED Melalui Perangkat Android
Pengontrolan LED juga dapat dilakukan melalui perangkat Android. Untuk keperluan ini, tentu saja Anda perlu membuat program di Sisi Android. Sebagai contoh, Anda bisa menggunakan App Inventor. Namun, sebelum mewujudkan aplikasi dengan App Inventor, sketsa berikut perlu diunggah ke papan Arduino.
Sketsa ini menyerupai contoh sketsa sebelumnya. Namun, pemeriksaan permintaan dilakukan melalui variabel permintaanK1ien. Setelah menangani permintaan klien yang dilakukan melalui pemanggilan prosesPermintaan ( ) , informasi berupa “LED telah dihidupkan… atau “LED telah dimatikan…” dikirimkan ke klien. Informasi ini yang akan memberi tahu pemakai Android bahwa perintahnya telah ditanggapi.
Aplikasi Android yang perlu dibuat ditunjukkan pada Gambar 6.23. Aplikasi ini dibuat dengan menggunakan App Inventor. GAMBAR 6.23
Desain aplikasi ProyekLED
CATATAN |
Buku ini tidak mengajarkan cara membuat aplikasi dengan App Inventor. Untuk memahami App Inventor, Anda bisa membaca buku penulis yang berjudul “Buku Pintar App Inventor untuk Pemula”. |
Properti-properti yang perlu diatur diperlihatkan pada Tabel 6.1.
TABEL 6.1 daftar property pada proyekLED yang perlu diatur
GAMBAR 6.24 Blok-blok untuk ProyekLED
Blok berikut digunakan untuk menangani kejadian Click pada ButtonHidup:
Kejadian Click berlangsung ketika tombol berjudul “Hidupkan LED” diklik. Kode yang terdapat di blok tersebut adalah meletakkan alamat web yang terdapat di TextBoxAlamat dan diikuti dengan tanda / serta string “tombol=Hidupkan+LED” ke properti Url milik Webl. String inilah yang menyatakan nama variabel dan nilainya yang hendak dilewatkan ke server. Selanjutnya, blok calI PostText digunakan untuk mengirimkan permintaan dan sekaligus melewatkan data ke web server.
Blok berikut digunakan untuk menangani kejadian Click pada ButtonMati:
Secara prinsip, kode yang menyusun blok ini serupa pada ButtonHidup. Perbedaannya, data yang dilewatkan berupa “tombol=Matikan+LED”.
Adapun blok berikut menangani kejadian GoText milik Webl:
Kejadian GotText berlangsung ketika terdapat tanggapan dari web server atas permintaan yang disampaikan melalui PostText. Dalam hal ini, informasi yang diperoleh dari responseContent (teks tanggapan dari web server) dikirimkan ke LabelInfo untuk memberikan informasi kepada pemakai.
Untuk melakukan pengujian, pastikan bahwa Ethernet Shield dan perangkat Android ataupun komputer menggunakan jaringan yang sama. Gambar 6.25 memperlihatkan hasil pengujian menggunakan emulator. Gambar paling kiri memperlihatkan keadaan setelah alamat IP web server diketik. Gambar
di tengah menunjukan keadaan setelah botol
GAMBAR 6.25 Hasil pengujian melalui emulator
6.6 SD Card untuk Menyimpan Skrip HTML
Ethernet Shield mengandung pembaca SD card. Dengan meletakkan micro SD card ke pembaca SD card tersebut maka SD card dapat digunakan untuk menyimpan skrip HTML yang menangani halaman web. Bahkan, dimungkinkan untuk meletakkan kode CSS ataupun JavaScript bersama skrip HTML.
Sebagai persiapan, pastikan bahwa micro SD card telah berisi file index.htm, led-off.png, dan led—on . png (telah dibahas di bab 4). Ketiga file ini akan digunakan untuk membentuk halaman web. Rangkaian yang diperlukan adalah seperti yang terlihat pada Gambar 6.11.
Selanjutnya, unggahkan sketsa berikut pada papan Arduino:
Setelah sketsa etherSD diunggah dan di Serial Monitor muncul alamat IP web server, Anda bisa melakukan pengujian di browser dengan mengetikkan alamat IP web server. Hasilnya ditunjukkan pada Gambar 6.26.
GAMBAR 6.26
Tampilan di browser setelah alamat web server diketikan. Selanjutnya, Anda bisa mencoba untuk mengeklik pada
Hal itu menandakan bahwa gambar led-on.png yang diklik.
Berdasarkan fungsi aturled ( ) yang dijalankan ketika terdapat permintaan ke web server, kode
if (permintaanKlien. startsWith (“GET
/?led—on”) ) {digitalWrite (PIN LED, HIGH) ;
Jika Anda mencoba untuk mengeklik pada LED terkiri akan diperoleh hasil seperti yang ditunjukkan pada Gambar 6.28.
GAMBAR 6.27
Hasil setelah LED terkiri diklik
Hal yang menarik untuk diperhatikan terletak pada baris URL. Tampak keberadaan semacam berikut:
led—off . 6&1ed—off . y=22
Hal itu menandakan bahwa gambar led-off . png yang diklik.
Berdasarkan fungsi aturled ( ) yang dijalankan ketika terdapat permintaan ke web server, kode
If
(permintaanKlien.starsWhith(‘GET /?led-off”))
{
DigitalWrite(PIN_LED, LOW);
}
GAMBAR 6.28
Contoh hasil setelah LED terkanan diklik
yang terdapat pada fungsi tersebut membuat LED dinyalakan. Selanjutnya, saat tanggapanhalaman ( ) dijalankan, isi file index . html, led—on .png, dan led—off .png dikirimkan klien.
6.7 Arduino Sebagai Klien
Contoh-contoh yang telah diulas di depan menjadikan Arduino sebagai web server. Sekarang akan dijelaskan proses yang merupakan kebalikannya, yakni menjadikan Arduino sebagai klien yang meminta layanan dari suatu web server.
Untuk mempraktikkan, susunlah rangkaian seperti yang terlihat pada Gambar 6.6. Dengan menggunakan rangkaian tersebut, data yang berasal dari sensor DHT11 akan disimpan sekali ke tabel sensor. Sketsa yang diperlukan adalah seperti berikut.
Setelah sketsa ini diunggah, perhatikan hasil di Serial Monitor. Contoh diperlihatkan pada Gambar 6.29. Jika Anda menjumpai pesan ‘Data berhasil disimpan’, Anda bisa memeriksa data yang baru saja direkam melalui phpMyAdmin ataupun melalui skrip Iihatdata . php.
GAMBAR 6.29 Hasil sketsa tesEthDB di Serial Monitor
Pada sketsa tesEthDB, pernyataan
char server []— “ardugama.site88 . net”;
menentukan server yang akan digunakan untuk menjalankan skrip untuk menyimpan data. Tentu saja, Anda perlu mengubah dengan nama domain Anda sendiri.
variabel yang digunakan untuk mengakses server dideklarasikan sebagai berikut:
EthernetC1ient www;
selanjutnya, data yang dibaca dari sensor DHTII disusun menjadi seperti berikut:
data — “suhu=” + String (suhu) +
“&lembab=” + String (lembab) ;
pernyataan tersebut digunakan untuk menyusun dua pasangan variabel=nama, kemudian disimpan ke data. perhatikan, tanda digunakan untuk memisahkan antarpasangan variabel=nama.
Pernyataan:
if (www . connect (server, 80) ) {
digunakan untuk melakukan koneksi ke server menggunakan port 80. Jika koneksi berhasil dilakukan, bagian yang berada di { dan ) akan dieksekusi. Dalam hal ini, permintaan untuk menyimpan data ditangani oleh:
www . print In (“POST /savepost.php HTTP/I .1”) ;
www.print (“Host :”)
www . println (server) ;
www . println (
“Content—Type: application/x—www—form—urlencoded”) ;
www . print (“Content—Length:”);
www . printIn (data. length ( ) ) ;
www . printIn ( ) ;
www . print (data) ;
Berikut penjelasan masing-masing.
- pada pernyataan pertama, POST menyatakan bahwa metode yang digunakan untuk melewatkan data ke server adalah POST, / savepost . php menyatakan skrip yang perlu dijalankan, dan HTTP/1.1 menyatakan versi protokol yang digunakan untuk melakukan permintaan.
- Pernyataan:
- print (“Host :”);
www . print In (server) ;
digunakan untuk mengirimkan sebuah baris yang berisi string “Host: ” dan diikuti dengan nama server.
- Pernyataan:
- . print In (
“Content—Type:application/x—www—form—urlencoded”);
dipakai untuk membentuk sebuah baris yang mengindikasikan bahwa formulir mengandung pengodean data yang digunakan untuk mengirim data POST.
- Dua pernyataan berikut digunakan untuk membentuk sebuah baris yang berisi string “ContentLength: ” dan diikuti dengan jumlah karakter yang menyusun data. Data yang dimaksud di sini adalah data POST.
- Setelah itu, sebuah baris kosong perlu dibentuk. Hal ini dilakukan oleh:
- . print In ( ) ;
- Setelah baris kosong, data POST dituliskan. Hal itu dilakukan oleh:
www.print (data) ;
Sekarang, bagaimana kalau kita ingin merekam data yang berasal dari sensor secara terus-menerus?
Tentu saja, bagian yang meminta web server untuk menyimpan data perlu diletakkan di loop ( ) Perwujudannya seperti berikut.
Pada sketsa i ni, terdapat perintah untuk menampilkan tanggapan dari server melalui kode:
long awal millis () ;
while (millis() – awal < 30000) ( {
// Untuk memeriksa kiriman dari server
if (www.available() ) {
char karakter www read ( ) ;
Serial. print (karakter) ;
}
}
Kode di atas memeriksa data yang berasal dari server selama 30000 mikrodetik atau 30 detik. Jika data tersedia, satu karakter dibaca dan kemudian ditampilkan ke Serial Monitor.
GAMBAR 6.30
Hasil di serial monitor setelah tiga data dari
sensor disimpan di server
Setelah 30 detik berlalu, koneksi dihentikan melalui:
www.stop();
Gambar 6.30 memperlihatkan hasil di Serial monitor setelah perekaman dua data dilakukan. Anda bisa memonitor hasilnya dengan menjalankan skrip lihatdata . php.
6.8 Pengiriman Email
Untuk memungkinkan Arduino melakukan pengiriman email ke suatu alamat email, server yang dinamakan Simple Mai/ Transfer Protocol (SMTP) server diperlukan. Server dari pihak ketiga inilah yang bertindak sebagai penangan email.
Untuk dapat memanfaatkan layanan SMP2GO, Anda perlu melakukan registrasi di www . smptp2go . com. Setelah itu, Anda perlu mengetahui alamat IP milik SMTP server. Untuk keperluan ini, masuklah ke Command
Prompt milik Windows, sebagaimana yang diperlihatkan pada Gambar 6.31. Untuk keperluan ini, klik pada tombol Start milik Windows. Lalu, ketikkan Command dan klik pada Command Prompt
Selanjutnya, ketikkan pada Command Prompt:
ping mail.smtp2go.com
Hasil yang diperoleh adalah semacam berikut:
Pinging mail.smtp2go.com [43.228.184 . 5] with Reply from 43.228.184.5: bytes=32 time=251ms
Reply from 43.228.184.5: bytes=32 time=249ms Reply from 43.228.184.5: bytes=32 time=248ms Reply from 43.228.184.5: bytes=32 time=249ms |
32 bytes of data:
TTL=56 TTL=56 TTL=56 TTL=56 |
Ping statistics for 43.228.184.5:
Packets: Sent — 4, Received 4, Lost = 0 loss) , Approximate round trip times in mill i —seconds :
Minimum = 248ms, Maximum = 251ms, Average 2 4 9ms
C: \Users\asus>
Berdasarkan hasil tersebut, alamat IP yang diperlukan adalah 45.33.53.153.
Untuk kepentingan autentikasi, SMPT2GO memerlukan pengodean terhadap nama pemakai dan password untuk mengirimkan email. Pengodean kedua hal tersebut dilakukan dengan menggunakan string berbasis 64. Untuk keperluan ini, Anda bisa melakukannya dengan memanggil berikut di browser:
http : / /www . motobit . corn/utiI/base64 -decoder-encoder.asp
Sebagai contoh, Anda bisa melakukan eksperimen untuk melakukan pengodean terhadap string “abakad4br4”. Akan diperoleh hasil seperti berikut:
aG0xa25vdw==
Lakukan pengodean terhadap nama pemakai dan password yang Anda gunakan untuk mengakses SMTP2GO dan catatlah karena diperlukan di sketsa yang akan Anda buat.
Untuk mempraktikkan pengiriman email, silakan unggahkan sketsa berikut:
Penjelasan untuk sketsa ini adalah seperti berikut.
-
- Konstanta INTERVAL mendefinisikan waktu tunda dalam satuan milidetik yang digunakan pada sejumlah perintah untuk mengirimkan email.
- Konstanta SMTP_PORT menentukan port yang digunakan untuk melakukan hubungan ke SMTOP server. Mengingat server yang digunakan adalah SMTP2GO, port yang digunakan adalah 2525.
- Konstanta NAMA_LOGIN menentukan string berbasis 64 untuk nama pemakai Anda di smtp2go.
- Konstanta PASSWORD_LOGIN menentukan string berbasis 64 untuk password yang digunakan mengakses smtp2go.
- pernyataan:
IPAddress server (45, 33, 53, 153) ;
menentukan alamat IP untuk SMTP server. Anda perlu memastikan alamat yang sesungguhnya melalui perintah ping yang telah dibahas di depan.
- pernyataan berikut menentukan alamat MAC untuk Ethernet Shield:
byte mac[]= {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
- Objek yang digunakan untuk menangani SMTP server dideklarasikan melalui pernyataan:
EthernetC1ient smtpServer;
- Deklarasi berikut digunakan untuk mendeklarasikan variabel objek untuk mengakses sensor DHTII:
dht DHT;
- Dua baris berikut digunakan untuk mendeklarasikan variabel global yang akan digunakan untuk menyimpan data suhu dan kelembaban:
float suhu 0;
float lembab 0;
- Seperti biasa, pada setup ( ) terdapat perintah untuk melakukan inisialisasi terhadap Ethernet Shield yang dilakukan melalui:
Ethernet . begin (mac) ;
Di setup ( ) ini pulalah terdapat perintah untuk memberitahukan tentang cara mengirimkan email.
- Fungsi loop ( ) menangani pengiriman email. Pertama-tama,
static int nomor = 1 ;
digunakan untuk mendeklarasikan variabel statis bernama nomor yang bertipe int dan pada keadaan awal diisi dengan 0. Variabel statis adalah variabel yang dideklarasikan sekali saja dan nilainya tetap dipertahankan walaupun fungsi berakhir dieksekusi.
Selanjutnya, pesan juga dideklarasikan sebagai variabel statis yang ditujukan untuk menyimpan string dengan panjang maksimum sebanyak 39 karakter.
Jika terdapat karakter S yang diberikan oleh pemakai, pesan akan berisi string “Pesan #’’ dan diikuti dengan bilangan yang tersimpan di variabel nomor. Lalu, variabel nomor dinaikkan sebesar 1 untuk kepentingan pengiriman email berikutnya. Adapun pengiriman email dilakukan melalui:
email (“Email dari Arduino”, pesan,
“alamatEmai1Pengirim” ,
“alamatEmaiIPenerirna”) ;
Alamat email pengirim dan penerima mempunyai format seperti a@b.com.
Fungsi email ( ) memiliki 4 argumen. Untuk melakukan koneksi ke SMTP server, perintah yang diperlukan berupa:
client. connect (server, SMTP PORT)
Apabila client.connect() memberikan nilai balik berupa true, koneksi ke SMTP server berhasil dilakukan. Dengan demikian, kita dapat mengirimkan perintah untuk mengirim email.
Pada setiap perintah, diperlukan untuk melalukan penundaan eksekusi selama INTERVAL
milidetik. Pertama-tama, diperlukan untuk mengirimkan string “EHLO arduino” ke server untuk memulai komunikasi antara Arduino dan SMTP server. Perintahnya berupa:
klien.println (“EHLO arduino”);
Selanjutnya, string “AUTH LOGIN” perlu dikirim untuk memberitahukan server bahwa string yang telah dikodekan dengan basis 64 untuk nama pemakai dan password dikirim sesudahnya.
Perintah selanjutnya digunakan untuk mengirimkan alamat email pengirim dan penerima. Perintahnya berupa:
klien.print (“MALL FROM:<”);
klien.print (pengirim) ;
klien.println (“ >” ) ;
delay(INTERVAL) ;
klien.print(“RCPT TO:<”);
klien.print(penerima);
klien.println ( ) ;
delay (INTERVAL) ;
Perintah berikutnya adalah untuk memulai pengiriman data:
klien. println (“DATA”) ;
delay (INTERVAL) ;
Data berisi informasi yang diterima oleh penerima, termasuk pengirim, penerima, subjek, dan pesan itu sendiri. Pertama-tama, pengirim dan penerima dikirim dengan menggunakan format berikut:
klien.print (“from: ) ;
klien . printin (pengirim) ;
delay (INTERVAL) ;
klien.print (“to:”);
klien.println (penerima);
delay (INTERVAL) ;
Lalu, subjek email dikirim dengan format sebagai berikut:
klien . print (“SUBJECT:”);
klien. println (subjek) ;
Sebelum mengirimkan suatu pesan, satu baris kosong perlu dikirim. Hal ini dilakukan oleh:
klien . println (“”);
Selanjutnya, pesan dikirim melalui:
klien. println (pesan) ;
Jika pesan lebih dari satu, setiap pesan yang dikirim dengan client . print In ( ) perlu diikuti dengan:
delay (INTERVAL) ;
Terakhir, untuk mengakhiri email, dua baris berikut perlu dikirimkan:
.
QUIT
klien. print In ( “.”); delay (INTERVAL) ;
klien.println (“QUIT”);
delay (INTERVAL) ;
Perintah QUIT itulah yang digunakan untuk memutus hubungan dengan server.
Gambar 6.32 memperlihatkan keluaran di Serial Monitor setelah Arduino siap menerima perintah dari Serial Monitor. Gambar 6.33
menunjukkan hasil di Serial Monitor
GAMBAR 6.32
Keadaan yang menyatakan bahwa Arduino siap menerima
perintah untuk mengirim email
setelah huruf S dimasukkan di Monitor dan tombol Send diklik. Adapun Gambar 6.34 memberikan contoh hasil di penerima.
GAMBAR 6.33 Keadaan setelah email dikirim
GAMBAR 6.34 Contoh email yang didapatkan di Sisi penerima
6.9 Pengaksesan Server Secara Global
Sejauh ini, seluruh contoh yang membuat Arduino sebagai web server hanya ditujukan untuk pengaksesan yang berada dalam jaringan yang sama. Jika dikehendaki untuk memungkinkan pengaksesan Arduino sebagai web server dari mana saja, perlu penggunaan alamat IP statis. Selain itu, alamat IP statis ini harus dapat diakses secara global. Untuk mendapatkan alamat statis seperti ini kita perlu membayar ke penyedia layanan Internet.
Untuk menentukan alamat IP statis, diperlukan perintah semacam berikut:
IPAddress ip ( a, b, c, d) ;
Dalam hal ini, a.b.c.d adalah alamat IP statis. Selanjutnya, Anda perlu mengubah pemanggilan Ethernet.begin () seperti berikut:
Ethernet.begin (mac,ip) ;