7 . Pemrograman dengan Arduino WiFi Shield
Bab ini membahas penggunaan Arduino WiFi Shield untuk membuat Arduino berlaku sebagai web server maupun klien. Disamping itu, bab ini juga mengupas cara untuk mengirimkan email.
7.1 Pengantar Arduino WiFi Shield
Salah satu cara yang memungkinkan Arduino berkomunikasi dengan Internet adalah dengan menggunakan WiFi Shield. Gambar 7.1 memperlihatkan contoh Arduino WiFi Shield.
Untuk membuat Arduino WiFi Shield bekerja, Anda harus mempunyai titik-akses Wi-Fi yang memungkinkan komputer atau peranti lain terhubung ke Internet. Tentu saja, password diperlukan untuk mengakses titik-akses Wi-Fi tersebut.
GAMBAR 7.1 Arduino Wifi Shield
7.2 Pengujian Arduino WiFi Shield Sebagai Web Server
Arduino WiFi Shield dapat digunakan sebagai web server. Dengan demikian, Arduino 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 7.2.
GAMBAR 7.2 Rangkaian untuk melakukan percobaan
pemantauan suhu dan kelembaban udara melalui browser
Untuk mempraktikkan, silakan untuk mengunggah sketsa berikut yang menangani permintaan HTTP dari browser.
Gambar 7.3 memperlihatkan hasil di Serial Monitor. Pada contoh tersebut, alamat IP untuk server adalah 192.168.43.219. Alamat ini yang perlu dipanggil di browser untuk memperoleh informasi mengenai suhu dan kelembaban udara.
GAMBAR 7.3 Tampilan awal sketsa server yang mempetlihatkan alamat IP server
GAMBAR 7.4
Hasil pemantauan suhu dan kelembaban udara melalui browser server tersebut tidak dapat di akses oleh browser,
seperti yang ditunjukan pada Gambar 7.5
Apa yang terjadi di Serial Monitor saat ada permintaan HTTP ke web server? Gambar 7.6 menunjukkan contohnya. Proses terpenting yang perlu diperhatikan adalah dari saat muncul tulisan “Permintaan baru…” hingga “Klien terputus…”
GAMBAR 7.5
Hasil yang menunjukkan bahwa web server
dengan alamat 192.168.43.219 tidak dapat diakses
GAMBAR 7.6 Hasil di Serial Monitor berdasarkan permintaan HTTP dari Sisi browser
Berikut adalah penjelasan kode yang terdapat dalam sketsa server.
-
- Penyertaan pustaka dht dilakukan melalui:
# include<dht.h>
-
- Baris berikut digunakan untuk kepentingan menangani Arduino WiFi Shield:
# include <WiFi.h>
-
- Definisi yang menyatakan pin yang dihubungkan ke DHTII berupa:
const int PIN_DHT = A0;
- Titik-akses Wi-Fi yang digunakan beserta password-nya didefinisikan melalui:
char NETWORK SSID[] = “aka”;
char NETWORK_PASSWORD[] = “2345678901”;
Tentu saja, Anda harus menyesuaikan sendiri dengan titik-akses Wi-Fi yang dapat Anda akses.
- Deklarasi variabel bernama status dilakukan melalui pernyataan:
int status= WL_IDLE_STATUS;
Variabel ini digunakan untuk menyatakan status setelah Arduino WiFi Shield diinisialisasi. Pada keadaan awal, variabel ini diisi dengan konstanta WL_IDLE_STATUS, yang menyatakan bahwa server dalam keadaan belum siap.
- pembuatan objek yang digunakan untuk menjadikan Arduino WiFi Shield bertindak sebagai server dilakukan melalui:
WiFiServer 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 Arduino WiFi Shield dilakukan dengan menggunakan pernyataan:
status = WiFi . begin (NETWORK SSID, NETWORK PASSWORD) ;
Dalam hal ini, nama titik-akses Wi-Fi dan password yang diperlukan untuk mengaksesnya diberikan ke begin ( ) . Nilai balik yang dihasilkan disimpan di variabel status.
- Nilai yang terekam di variabel status, diperiksa dengan menggunakan if, seperti berikut:
if (status ! = WELCONNECTED) {
Serial. print Ini”Gaga] melakukan koneksi WiFi!”);
while (true);// UIang terus
}
Kode ini menyatakan bahwa kalau titik-akses tidak terhubung, pesan “Gagal melakukan koneksi WiFi” dikirimkan ke Serial Monitor. Kemudian perulangan yang tidak pernah berhenti dibentuk. Tujuannya agar perintah lain tidak dieksekusi.
- Adapun proses untuk membuat Arduino sebagai server dilakukan melalui:
server . begin ( ) ;
- Setelah server terbentuk, alamat IP untuk server ini diperoleh melalui:
IPAddress ip wiFi.10ca11P() ;
- Nilai ip inilah yang ditampilkan ke serial Monitor melalui pernyataan:
Serial. println (ip) ;
- Untuk memantau permintaan klien, pernyataan berikut diberikan:
WifiClien = server. available() ;
Mula-mula, klien dideklarasikan bertipe WiFiClient. 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 init 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 . println (“Permintaan baru …”);
Selanjutnya, variabel bernama bari s Se karangKosong 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, sebuah 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 newline (\n) dan barisSekarangKosong, tanggapan kepada klien mulai dikirimkan. Perintahnya berupa:
klien.println (“HTTP/I.1 200 OK”) ;
klien . print In (“Content—Type: text/ html”) ;
klien.println (“Connection: close”) ;
klien . print In (“Refresh: 5”) ;
klien . print In ( ) ;
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 ketiga digunakan untuk menyatakan bahwa klien mengharapkan koneksi akan diputus oleh server. 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) perlu dipisahkan oleh baris kosong.
CATATAN | Jika Anda ingin mendalami tentang judul HTTP, silakan membaca tulisan di: |
perintah selanjutnya adalah untuk mengirimkan kode HTML yang dimulai dari
klien.println DOCTYPE HTML>”) ;
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.println (“° C<br>”) ;
dtostrf (kelembaban, 6, 2, strSementara) ;
klien.print(“Kelembaban:”);
klien.print (strSementara) ;
klien. printIn(“%”);
Kode inilah yang digunakan untuk membaca data dari sensor DHTII, 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 jumlah 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.
7.3 Pengontrolan LED Melalui Browser Menggunakan Metode Get
GAMBAR 7.7
Rangkaian untuk menguji pengendalian LED melalui browser
Gambar 7.7 memperlihatkan penyusunan rangkaian untuk mempraktikkan pengendalian LED. Dalam hal ini, katode LED dihubungkan ke melalui browser pin GND Arduino dan anode LED dihubungkan ke resistor 2200. Ujung lain resistor dihubungkan ke pin 2 Arduino.
Adapun sketsa yang diperlukan adalah seperti berikut:
Melalui browser, Anda bisa mengetikkan alamat server. Contoh hasil yang didapatkan ditunjukkan pada Gambar 7.9. Terlihat bahwa tombol berjudul ‘Hidupkan LED’ ditampilkan.
GAMBAR 7.8 Keadaan awal web server
Adapun Gambar 7.10 menunjukkan hasil di Serial Monitor setelah pemakai memasukkan alamat IP di browser.
GAMBAR 7.9 Keadaan awal di browser setelah alamat IP web server diketikan
GAMBAR 7.10 Tanggapan di Serial Monitor setelah alamat web server diketik di browser
Selanjutnya, Anda bisa mencoba untuk mengeklik pada tombol Hidupkan LED. Tanggapan di Serial Monitor akan menjadi seperti yang diperlihatkan pada Gambar 7.11. Perhatikan isi Referer. Tampak bahwa terdapat ? tomboI=Hidupkan+LED. Dalam hal ini, tombol dikenal sebagai variabel URL (Uniform Resource Locator) dan ‘Hidupkan+LED’ adalah isi variabel tersebut. Variabel dan nilai itulah yang memberi isyarat kepada server untuk menghidupkan LED.
GAMBAR 7.11
Hasil di serial monitor setelah
tombol hidupkan LED diklik
Tanggapan dari web server akan membuat browser menampi!kan halaman seperti yang terlihat pada LED diklik Gambar 7.12. Tampak bahwa judul tombol berubah menjadi ‘Matikan LED’.
GAMBAR 7.12 Hasil di browser setelah tombol Hidupkan LED diklik
Selanjutnya, jika tombol Matikan LED diklik, akan diperoleh hasil di Serial Monitor seperti yang terlihat pada Gambar 7.13. Perhatikan isi Referer. Tampak bahwa terdapat ?tombol=Matikan+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 7.13 Hasil di Serial Monitor setelah tombol Matikan LED diklik
Sekarang, marilah untuk memahami sketsa WiFiLed.
-
- Baris berikut digunakan untuk kepentingan pemanfaatan pustaka untuk Arduino WiFi Shield:
# include <WiFi .h>
-
- Definisi yang menyatakan pin yang dihubungkan ke DHTII berupa:
const int PIN DHT AO;
-
- Titik-akses Wi-Fi yang digunakan beserta password-nya didefinisikan melalui:
char NETWORK SSID [J “aka ” ;
char NETWORK PASSWORD[] – “2345678901”;
Tentu saja, Anda harus menyesuaikan sendiri dengan titik-akses Wi-Fi yang dapat Anda akses.
-
- Deklarasi variabel bernama status dilakukan melalui pernyataan:
int status WL IDLE STATUS;
Variabel ini digunakan untuk menyatakan status setelah Arduino WiFi Shield diinisialisasi. Pada keadaan awal, variabel ini diisi dengan konstanta WL_IDLE_STATUS, yang menyatakan bahwa server dalam keadaan belum siap.
-
- Pembuatan objek yang digunakan untuk menjadikan Ardujno WiFi Shield bertindak sebagai server dilakukan melalui:
WiFiServer 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 Arduino WiFi Shield dilakukan dengan menggunakan pernyataan:
status = WiFi.begin (NETWORK SSTD, NETWORK PASSWORD) ;
Dalam hal ini, nama titik-akses Wi-Fi dan password yang diperlukan untuk mengaksesnya diberikan ke begin ( ) . Nilai balik yang dihasilkan disimpan di variabel status.
-
- Nilai yang terekam di variabel status, diperiksa dengan menggunakan if, seperti berikut:
if (status WL CONNECTED) (
Serial . print In (“Gaga 1 melakukan koneksl WiFi ! “) ; while (true) ; // U lang terus
Kode ini menyatakan bahwa kalau titik-akses tidak terhubung, pesan “Gagal melakukan koneksi WiFi” dikirimkan ke Serial Monitor dan kemudian perulangan yang tidak pernah berhenti dibentuk. Tujuannya agar perintah lain tidak dieksekusi.
-
- Adapun proses untuk membuat Arduino sebagai server dilakukan melalui:
server . begin ( ) ;
-
- Setelah server terbentuk, alamat IP untuk server ini diperoleh melalui:
IPAddress ip = WiFi . 10ca11P () ;
-
- Nilai ip inilah yang ditampilkan ke Serial Monitor melalui pernyataan:
Serial . print In (i p) ;
-
- Terdapat dua deklarasi variabel global berupa:
bool keadaanLed = false; String permintaanK1ien;
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
digital Write (PIN LED, keadaanLed) ;
digunakan untuk mengatur LED sesuai dengan isi variabel keadaanLed. Dalam hal ini, LED akan 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:
WiFiClient klien — server. available () ;
Mula-mula klien dideklarasikan bertipe WiFiClient. 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 (klien. connect.ed() )
digunakan untuk memastikan bahwa klien masih terhubung dengan web server, Jika klien masih terhubung, sebuah 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) ;
Adapun permintaanKlien c;
digunakan untuk menambahkan karakter yang tersimpan di c ke akhir string yang terdapat di permintaanKlien. Perlu diketahui, variabel permĺntaanKlien 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/1.1200 OK”) ;
klien.println(“Content—Type: text/html”) ;
klien.println (“Connection: cl ose”) ;
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 ketiga digunakan untuk menyatakan bahwa klien berharap 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(“<!DOCTYPE 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;
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 fir).
- Pernyataan
delay (10) ;
digunakan untuk memberikan kesempatan browser menerima data.
- Pernyataan
klien. stop() ;
digunakan untuk memutus hubungan dengan klien.
- Adapun kode yang menyusun fungsi prosesPermintaan ( ) dijelaskan berikut ini. Pertama, kode
if (permintaanKlien. indexOf (“GET /?tombol=Hidupkan+LED”) > —1) {
keadaanLed = true;
digitalWrite(PIN_LED, HIGH) ;
}
digunakan untuk memperoleh posisi string “GET /?tombol=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 (permintaanKlien. indexOf (“GET /?tomboI=Matikan+LED”) > —1) {
keadaanLed = false;
digitalWrite (PIN LED, LOW) ;
digunakan untuk membuat LED mati jika string “GET /?tombol=Matikan+LED” terdapat pada permintaanKlien.
7.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:
Berikut adalah penjelasan yang menekankan pada perbedaan dengan metode GET.
- Kode
data Post = ‘’’’;
char karPost;
while (klien . available ( ) ) karPost — klien. read ( ) ;
data Post += karPost;
digunakan untuk memperoleh data POST. Data POST terletak setelah baris kosong. ltulah sebabnya kode di depan diletakkan setelah:
if (C == && barisSekarangKosong)
- Penentuan metode POST dilakukan pada formulir yang dibentuk melalui pernyataan:
klien.println(“<form method=\’post\”>”);
Penanganan klik pada tombol di halaman web dilakukan dengan menggunakan tombol submit ltulah sebabnya, terdapat kode berikut:
if (keadaanLed) {
klien.println(“<input type=\”submi\””);
klien.println(
“ name=\”tombol\” “value=\”Matikan LED \ “>” ) ;
}
else {
klien.println(“<inputtype=\”submit\””);
klien.println (
“ name=\”tombol\”value=\”Hidupkan LED\”>”) ;
- Penentuan perintah POST dilakukan terhadap variabel data Post. Perintah yang menyeleksinya adalah:
if(dataPost. indexOf (“tombol=Hidupkan+LED”) > —1) {
keadaanLed = true;
digitalWrite(PIN_LED, HIGH) ;
}
else
if(dataPost.indexOf(“tombol=Matikan+LED”) > -1
keadaanLed false;
digitalWrite(PIN_LED, LOW) ;
}
CATATAN | Jika Anda ingin mendalami perbedaan GET dan POST, silakan baca artikel di:
www.w3schooIs . com/tags/ref httpmethods . asp |
Gambar 7.14 memperlihatkan keadaan awal ketika alamat IP web server diberikan. Adapun Gambar 7.15 menunjukkan hasil di Serial Monitor ketika alamat IP web server diberikan di browser.
GAMBAR 7.14 Keadaan awal di browser setelah alamat IP server dipanggil
GAMBAR 7.15 Hasil pemanggilan alamat IP di Serial Monitor
tombol Hidupkan LED diklik, baris URL di browser tidak berubah (Gambar 7.16). Namun, tombol vang ditampilkan berubah. Gambar 7.17 memperlihatkan isi variabel data Post di Serial Monitor. Țampak bahwa variabel ini berisi tombol=Hidupkan+LED. Data tersebut menyatakan pasangan antarnama variabel dan isinya.
GAMBAR 7.16 Hasil di browser setelah tombol Hidupkan LED diklik
GAMBAR 7.17 Hasil di Serial Monitor ketika tombol Hidupkan LED diklik
Jika tombol Matikan LED diklik, hasil seperti terlihat pada Gambar 7.14 dimunculkan kembali. Adapun hasil di Serial Monitor ditunjukkan pada Gambar 7.18. Tampak bahwa variabel datapost berisi tombol=Matikan+LED. Data tersebut menyatakan pasangan antarnama variabel dan isinya.
GAMBAR 7.18 Hasil di Serial Monitor setelah tombol Matikan LED diklik
7.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 melaluj variabel permintaan Klien. Setelah menangani permintaan 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 sama seperti pada yang dibahas di Subbab 6.5. Oleh karena itu, silakan baca bagian yang membahas pembuatan aplikasi pada subbab tersebut.
7.6 SD Card untuk Menyimpan Skrip HTML
Arduino WiFi 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.
Untuk mempraktikkan hal ini, susunlah rangkaian seperti yang terlihat pada Gambar 7.7. Adapun sketsa yang diperlukan adalah seperti berikut:
GAMABAR 7.19
Tampilan di browser setelah alamat
web server diketikkan
Selanjutnya, Anda bisa mencoba untuk mengeklik pada LED terkiri. Hasil akhirnya ditunjukkan pada Gambar 7.20. Hal yang GAMBAR 7. 1 9
menarik untuk diperhatikan terletak pada Tampilan di browser setelah alamat web server diketikkan baris URL. Tampak keberadaan semacam berikut:
Led-on.x=48&led-0n.y=22
Hal itu menandakan bahwa gambar led-on.png yang diklik.
if (permintaanK1ien.
startsWith (“GET / ? led-on”) ) digitalWrite (PIN_LED, HIGH) ;
yang terdapat pada fungsi tersebut membuat LED dinyalakan. Selanjutnya,
saat tanggapanHalaman() dijalankan, isi file index . html, ledon .png, dan led-off . png dikirimkan klien. GAMBAR 7.20
Hasil setelah LED terkiri di klik
Jika anda mencoba untuk mengeklik pada LED terkiri akan diperoleh hasil seperti yang ditunjukkan pada Gambar 7.21. Hal yang menarik untuk diperhatikan terletak pada baris URL. Tampak keberadaan semacam berikut:
led-off . x52&led-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. startsWith (“GET / ? led—off”) ) {
digitalWrite (PIN_LED, LOW) ;
yangterdapat pada fungsi tersebut membuat LED dinyalakan. Selanjutnya, saat tanggapanHalaman ( ) dijalankan, isi file index.html,led—on.png, dan led—off .png dikirimkan klien.
GAMBAR 7.21 Contoh hasil setelah LED terkanan diklik
7.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 7.2. Dengan menggunakan rangkaian tersebut, data yang berasal dari sensor DHTII 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 7.22. Jika Anda menjumpai pesan “Data berhasil disimpan”, Anda bisa memeriksa data yang baru saja direkam melalui phpMyAdmin ataupun melalui skrip lihatdata php.
GAMBAR 7.22 Hasil sketsa tesWiFiDB di Serial Monitor
Pada sketsa tesWiFiDB, 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. Selanjutnya, data yang dibaca dari sensor DHT11 disusun menjadi seperti berikut:
data = “suhu=” + String (suhu) +
“&lembab=” + String (lembab) ;
Pernyataan tersebut digunakan untuk menyusun dua pasangan variabel=nama yang kemudian disimpan ke data. Perhatikan, tanda & digunakan untuk memisahkan antarpasangan variabel=nama.
Pernyataan
if (vww.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 menyirnpan data ditangani oleh:
www . printIn (“POST / savepogt . php HTTP/I1. 1”);
www int (“Host : “);
www . printIn (server) ;
www . println (
“Content-Type:application/x-www-form-urlencoded”) ;
www . print ( www.println (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:
- . 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.
Gambar 7.23 memperlihatkan hasil di Serial monitor setelah perekaman tiga data dilakukan. Anda bisa memonitor hasilnya dengan menjalankan skrip 1 i ha tda ta . php.
GAMBAR 7.23 Hasil di Serial Monitor setelah tiga data dari sensor disimpan di server
7.8 Pengiriman Email
Untuk memungkinkan Arduino melakukan pengiriman email ke suatu alamat email, server yang dinamakan Simple Mail Transfer Protocol (SMTP) server diperlukan. Server dari pihak ketiga inilah yang bertindak sebagai penangan email.
Salah satu SMTP server yang bisa digunakan untuk percobaan adalah SMPTP2GO. Silakan baca tulisan di awal Subbab 6.9 mengingat layanan ini digunakan pada contoh yang akan dibahas.
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.
- Array ssid berupa string yang menyatakan nama titik-akses Wi-Fi yang digunakan untuk melakukan koneksi ke Internet.
- Array pass berupa string yang menyatakan password untuk titik-akses Wi-Fi yang digunakan untuk melakukan koneksi ke Internet.
- 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.
- Objek yang digunakan untuk menangani klien dideklarasikan melalui pernyataan: WiFiC1ient klien;
- Deklarasi berikut digunakan untuk mendeklarasikan variabel objek untuk mengakses sensor DHT11:
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 Arduino WiFi Shield yang dilakukan melalui:
status = WiFi.begin (ssid, pass) ;
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 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” ,
“alamatEMai1Penerima”) ;
Alamat email pengirim dan penerima mempunyai
Untuk penjelasan fungsi email ( ) , silakan merujuk pada bahasan fungsi ini di Subbab 6.8.
Gambar 7.24 memperlihatkan keluaran di Serial Monitor setelah Arduino siap menerima perintah dari Serial Monitor. Gambar 7.25 menunjukkan hasil di Serial Monitor setelah huruf S dimasukkan di Serial Monitor dan tombol Send diklik. Adapun Gambar
7.26 memberikan contoh hasil di penerima.
GAMBAR 7.24
Keadaan yang menyatakan bahwa Arduino siap
menerima perintah untuk mengirjm email
7.9 Pengaksesan Web Server Secara Global
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, sebelum pemanggilan WiFi .begin () perlu diberikan perintah seperti berikut:
WiFi . config (ip) ;
Informasi lebih lanjut mengenai config ( ) dapat dibaca di:
https://www.arduino.cc/en/Reference/WiFiConfig