Bab ini membahas penggunaan CC3000 WiFi Shield untuk membuat Arduino berlaku sebagai web server maupun klien. Di samping itu, bab ini juga mengupas cara untuk mengirimkan email.
8.1 Pengantar CC3000 WiFi Shield
CC3000 WiFi Shield adalah peranti alternatif untuk Arduino WiFi Shield. Harganya relatif lebih murah daripada Arduino WiFi Shield. Gambar 8.1 memperlihatkan contohnya.
Untuk membuat 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.
Untuk memudahkan dalam menggunakan shield ini, pustaka bernama Ada fruit CC 3000 perlu diinstal. Pustaka ini bisa diunduh di:
https : //github.com/adafruit/Adafruit CC 3000 Library
File yang diperoleh berupa Ada fruit CC 3000 Library— master . zip.
Langkah-langkah yang diperlukan untuk menginstal pustaka ini adalah seperti berikut.
Klik pada menu Sketch pada Arduino IDE.
Pilih Include Library….
Klik pada Add .ZIP library….
Pilih Adafruit CC3000 Library—master. zip.
Klik pada tombol
Pada penggunaan CC3000 WiFi Shield yang pertama kali, Anda perlu mengujinya dengan menggunakan contoh sketsa yang disediakan
GAMBAR 8.1 CC300 WiFi Shield berada
di atas Arduino
di Adafruit CC3000. Sketsa yang perlu dibuka adalah buildtest. Cara memperoleh skets adalah seperti berikut.
Klik menu File pada Arduino IDE.
Pilihlah Examples.
Pilihlah Adafruit_CC3000_Library
Klik pada buildtest.
Sebelum sketsa ini diunggahkan ke papan Arduino, terdapat dua atau tiga bagian yang perlu diubah. Perhatikan baris 46, 47, dan 49. Isi ketiga baris tersebut adalah seperti berikut:
#define WLAN_SSID “myNetwork” // cannot be longer than 32 characters!
#define WLAN_PASS “myPassword”
#define WLAN SECURITY WLAN_SEC_WPA2
Perubahan yang perlu dilakukan adalah seperti berikut.
Gantilah “myNetwork” dengan nama titik-akses Wi-Fi yang digunakan untuk mengakses Internet. misalnya berupa:
“cross28”
Gantilah “myPassword” dengan password yang digunakan untuk mengakses titik-akses tersebut.
Gantilah WLAN SEC WPA2jika metode sekuritas yang digunakan bukan WPA2. lain yang dapat digunakan berupa:
WLAN SEC_UNSEC (yang menyatakan tidak ada metode
WLAN_SEC WEP (berarti metode WEP)
WLAN_SEC_WPA (berarti metode WAP)
Setelah perubahan terhadap hal-hal tersebut dilaksanakan, sketsa diunggahkan ke papan Arduino. Untuk memantau hasil di Serial Monitor, laju bit perlu diatur sebesar 115200 bps. Hasilnya diperlihatkan pada Gambar 8.2.
Seandainya di Serial Monitor muncul pesan seperti berikut, Anda perlu melakukan peremajaan terhadap CC3000 WiFi Shield:
Wrong firmware version!
Untuk keperluan ini yang yang perlu bernama dilakukan adalah mengunggah contoh sketsa yang berada di Aafruit_CC3000_library yang Bernama driverpatch 1 14. Jika contoh terdapat sketsa kesalahan yang berada sewaktu memverifikasi, lakukan perubahan seperti berikut.
Tambahkan const di depan unsigned pada baris 6 sehingga menjadi const unsigned.
Tambahkan const di depan unsigned pada baris 59 sehingga menjadi const unsigned.
setelah itu, sketsa dapat diunggahkan. Perhatikan proses peremajaan yang dilakukan di CC3000 WiFi shield Lalu, uji kembali dengan sketsa buildtest.
8.2 Pengujian CC3000 WiFi Shield Sebagai Web
Server
CC3000 WiFi Shield dapat digunakan sebagai webserver. 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 Rangkaian untuk melakukan percobaan pemantauan suhu menyusun rangkaian seperti yang ditunjukkan dan kelembaban udara melalui browser pada Gambar 8.3.
Untuk mempraktikkan, silakan untuk mengunggah sketsa berikut yang menangani permintaan HTTP dari browser.
GAMBAR 8.3
Rangkaian untuk melakukan percobaan pemantauan suhu dan kelembaban udara melalui browser
Gambar 8.4 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 informas mengenai suhu dan kelembaban udara.
GAMBAR 8.4 Tampilan awal sketsa server yang memperlihatkan alamat IP server
GAMBAR 8.5 Hasil pemantauan suhu dan kelembaban udara melalui browser
Gambar 8.5 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 menggunakan Wi-Fi yang sama dengan yang digunakan oleh CC300 WiFi Shield. Jika tidak, web server tersebut tidak dapat diakses oleh browser, seperti yang ditunjukkan pada Gambar 8.6.
GAMBAR 8.6 Hasil yang menunjukkan bahwa web server dengan alamat 192.168.43.108 tidak dapat diakses
Apa yang terjadi di Serial Monitor saat ada permintaan HTTP ke web server? Gambar 8.7 menunjukkan contohnya. Proses terpenting yang perlu diperhatikan adalah dari saat muncul tulisan “Permintaan baru…” hingga “Klien terputus…”
GAMBAR 8.7 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>
Dua baris berikut digunakan untuk kepentingan memprogram CC3000 WiFi Shield:
#include <Adafruit CC 3000.h>
#include <ccspi.h>
Definisi yang menyatakan pin yang dihubungkan ke DHT11 berupa:
const int PIN DHT = A2;
A2 menyatakan pin analog A2.
Definisi berikut digunakan untuk menyatakan pin-pin yang digunakan oleh WiFi Shield:
#define ADAFRUIT CC3000 IRQ 3
#define ADAFRUTT CC3000¯VBAT 5
#define ADAFRUIT CC3000¯cs 10
Objek yang digunakan untuk mengakses CC3000 WiFi Shield dideklarasikan melalui:
Data untuk pengaksesan titik-akses Wi-Fi didefinisikan melalui:
#define WLAN SSID “cross 28”
#define WLAN PASS “2345678901”
#define WLAN SECURITY WLAN SEC WPA2
Tentu saja, Anda harus menyesuaikan sendiri dengan titik-akses Wi-Fi yang dapat Anda akses.
Pembuatan objek yang digunakan untuk menjadikan 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) ;
Proses awal terhadap WiFi Shield dilakukan dengan memanggil fungsi buatan:
init CC3000 () ;
Di dalam fungsi ini, begin ( ) digunakan untuk melakukan inisialiasi terhadap WiFi Shield. Setelah itu, koneksi ke titik-akses Wi-Fi dilakukan melalui connectToAP().
CATATAN
Penggunaan fungsi F ( ) pada fungsi init CC 3000 ( ) dan juga fungsi perolehIP ( ) dimaksudkan untuk meletakkan konstanta string ke memori Flash. Tujuannya adalah untuk mengurangi penggunaan memori utama (RAM).
Penghematan ini perlu dilakukan mengingat pustaka yang digunakan untuk menangani shield ini memakan memori yang cukup besar.
Untuk mendapatkan alamat IP server, fungsi buatan berikut dipanggil:
per01ehIP() ;
Alamat IP yang digunakan bersifat dinamis. Mula-mula, checkDHCP ( ) dipanggil. Setelah itu, alamat IP diperoleh melalui getIPAddress ( ) .
Adapun proses untuk membuat Arduino sebagai server dilakukan melalui:
server . begin ( ) ;
Untuk memantau permintaan klien, pernyataan berikut diberikan:
Adafruit CC3000 ClientRef k lien = server. available ( ) ;
Mula-mula, klien dideklarasikan bertipe Ada fruit CC3000 Client Ref. Selanjutnya, variabel tersebut diisi dengan nilai balik server . available ( ) . Dalam hal ini, k lien akan berupa true kalau terdapat permintaan dari klien (di browser).
Jika terdapat permintaan dari klien (yang dilakukan melalui if (k lien) ), 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. . . ,
Selanjutnya, variabel bernama barisSekarangKosong dideklarasikan bertipe boo lean 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, sebuah 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) ;
Lalu, jika isi variabel c erupa newine n) dan barisSekarangKosong, tanggapan kepada klien mulai dikirimkan. Perintahnya berupa:
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 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:
https : //www.w3.org/Protocols/rfc2 616/ rfc2616—sec14. html
perintah selanjutnya adalah untuk mengirimkan kode HTML yang dimulai dari
klien.fastrprintln ( ! DOCTYPE HTML>”) ;
hingga
klien. fastrprintln (“</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 . fastrprint ( “Temperatur:”);
klien. fastrprint (strSementara);
klien . fastrprintln (“°C<br>”);
dtostrf (kelembaban, 6, 2, strSementara) ;
klien . fastrprint ( “Kelembaban :”);
klien. fastrprint (strSementara) ;
klien. fastrprintln (“%”);
Kode inilah yang digunakan untuk membaca data dari sensor DHTII, kemudian menyajikannya dalam halaman web. Pada perintah ini, dtostrf ( ) digunakan untuk 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 (°) 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.
8.3 Pengontrolan LED Melalui Browser Menggunakan Metode Get
Contoh di Subbab 8.3 hanya bersifat pasif. Artinya, pemakai tidak bisa melakukan tindakan apa-apa selain memperoleh informasi mengenai alamat IP dari web server. Sekarang akan dibahas cara untuk mengendalikan LED dari bowser. Pemakai bisa memberikan perintah untuk menghidupkan ataupun mematikan LED melalui browser.
GAMBAR 8.8 Rangkaian untuk menguji pengendalian LED melalui browser
Gambar 8.8 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 220Q. Ujung lain resistor dihubungkan ke pin 2 Arduino.
Gambar 8.9 memperlihatkan contoh awal hasil di Serial Monitor. Informasi terpenting yang dihasilkan sejauh ini adalah alamat IP server. Alamat ini tentu saja sangat penting untuk mengakses server. Melalui browser, Anda bisa mengetikkan alamat server. Contoh hasil yang didapatkan ditunjukkan pada Gambar 8.10. terlihat bahwa tombol berjudul ‘Hidupkan LED’ ditampilkan.
Adapun Gambar 8.11 menunjukkan hasil di Serial Monitor setelah pemakai memasukkan alamat di browser.
Selanjutnya, Anda bisa mencoba untuk mengeklik pada tombol Tanggapan di Serial Monitor akan menjadi seperti yang diperlihatkan pada Gambar 8.12. Perhatikan isi Referer. Tampak bahwa terdapat ?tombol=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.
Tanggapan dari web server akan membuat browser menampilkan halaman seperti yang terlihat pada Gambar 8.13. tampak bahwa judul tombol berubah menjadi “Mematikan LED”
Selanjutnya, jika tombol LED diklik, akan diperoleh hasil di Serial Monitor seperti yang terlihat pada Gambar 8.14. 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 dan nilai itulah yang memberi isyarat kepada server untuk mematikan LED. variabel tersebulaman di browser pun berubah, yang akan menampilkan tombol berjudul “Hidupkan LED”.
sekarang, marilah untuk memahami sketsa CC30 0 OLed.
Dua baris berikut digunakan untuk kepentingan pemanfaatan pustaka untuk CC3000 WiFi Shield:
#include <Adafruit CC3000 .h>
#include <ccspi . h>
Definisi yang menyatakan pin yang dihubungkan ke LED berupa:
const int PIN LED 2;
Definisi berikut digunakan untuk menyatakan pin-pin yang digunakan oleh WiFi Shield:
{define ADAFRUIT CC3000 IRQ 3
#define ADAFRUIT CC3000 VBAT 5
#define ADAFRUIT CC3000 CS 10
Objek yang digunakan untuk mengakses CC3000 WiFi Shield dideklarasikan melalui:
Data untuk pengaksesan titik-akses Wi-Fi didefinisikan melalui:
#define WLAN SSID “cross28”
#define WLAN PASS “2345678901”
#define WLAN SECURITY WLAN SEC WPA2
Tentu saja, Anda harus menyesuaikan sendiri dengan titik-akses Wi-Fi yang dapat Anda akses.
Pembuatan objek yang digunakan untuk menjadikan WiFi Shield bertindak sebagai server dilakukan melalui:
WiFiServer server (80) ;
Angka 80 menyatakan port yang digunakan untuk mengakses server.
Terdapat dua deklarasi variabel global berupa:
bool keadaanled =false;
string permintaanKlien;
Variabel keadaanLed digunakan untuk menyatakan keadaan LED. Nilai false menyataka mati dan nilai true menyatakan LED hidup. Variabel permintaanK1ien digunaka n IEO menyimpan string yang merupakan hasil permintaan klien di browser. untuk
Di setup ( ) , 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 aka padam mengingat nilai variabel ini berupa false pada keadaan awal.
Pernyataan berikut digunakan untuk memungkinkan pengiriman informasi ke Serial Monitor:
Serial . begin (9600) ;
Proses awal terhadap WiFi Shield dilakukan dengan memanggil fungsi buatan:
init CC3000() ;
Di dalam fungsi ini, begin ( ) digunakan untuk melakukan inisialiasi terhadap WiFi Shield. Setelah itu, koneksi ke titik-akses Wi-Fi dilakukan melalui connectToAP ( ) .
Untuk mendapatkan alamat IP server, fungsi buatan berikut dipanggil:
per01ehIP ( ) ;
Alamat IP yang digunakan bersifat dinamis. Mula-mula, checkDHCP ( ) dipanggil. Setelah itu alamat IP diperoleh melalui getIPAddress ( ) .
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 (ip) ;
Pernyataan berikut di setup ( ) digunakan untuk menyatakan bahwa web serversiap menerima perintah dari browser:
Serial. print In (F (“Siap melayani permintaan! ) ;
Fungsi F ( ) menyatakan bahwa konstanta string yang menjadi argumennya diletakkan di memori
Flash, bukan di RAM.
Untuk memantau permintaan klien, pernyataan berikut diberikan:
Ada fruit CC3000 ClientRef k lien = server. available ( ) ;
Mula-mula, klien dideklarasikan bertipe Ada fruit CC 3000 Client Ref. Selanjutnya, variabel tersebut diisi dengan nilai balik server . available ( ) . Dalam hal ini, k lien akan berupa true kalau terdapat permintaan dari klien (di browser).
Jika terdapat permintaan dari klien (yang dilakukan melalui if (k lien) ), 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 keadaan permintaan klien yang dilakukan melalui pernyataan:
serial.println (F(“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, 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
if (permintaanKlien . length() <= 80)
permintaanKlien c;
digunakan untuk menambahkan karakter yang tersimpan di c ke akhir string yang terdapat di permintaanKlien hanya kalau jumlah karakter di variabel string ini kurang dari sama dengan 80. Tujuannya adalah untuk menghemat penggunaan memori. Hal ini disebabkan hanya bagian awal dari string yang digunakan untuk pemeriksaan di belakang. Perlu diketahui, variabel permintaanK1ien digunakan untuk mencatat string yang merupakan permintaan klien.
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. fastrprintln (! DOCTYPE HTML>”) ;
hingga
klien . fastrprintln (“<\html>”)’;
Adapun pernyataan
break;
digunakan untuk mengakhiri while.
Setelah pernyataan while terdapat pernyataan:
If (c == ‘\n’) {
//Baris sekarang kogong
barisSekarangKosong = true;
}
else if (C != ‘\r’) {
// Ada karakter baru
barisSekarangKosong false;
Pernyataan inilah yang digunakan untuk menentukan isi
variabel barisSekarangKosonq
Variabel ini diisi dengan true kalau isi variabel c berupa newline. Adapun pengisian 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 kode yang menyusun fungsi prosespermintaan ( ) dijelaskan berikut ini. pertama kode
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 permintaanK1ien. Jika kondisi di i f tersebut terpenuhi, variabel keadaanLed diisi dengan true (yang menyatakan LED hidup), kemudian pin yang berhubungan dengan LED dibuat menjadi HIGH untuk menghidupkan LED.
digunakan untuk membuat LED mati jika string “GET /?tombol=Matikan+LED” terdapat pada permintaanKlien.
8.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
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(“<form method=\”post\”>”);
Penanganan klik pada tombol di halaman web dilakukan dengan menggunakan tombol sebmit ltulah sebabnya, terdapat kode berikut:
if (keadaanLed) {
klien.println(“<input type=\”submit\””);
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 da ta Pos t. Perintah yang menyeleksinya adalah:
if(dataPostindexOf(“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.w3schools . com/tags/ref httpmethods . asp
Gambar 8.15 memperlihatkan keadaan awal ketika alamat IP web server diberikan. Adapun Gambar
8.16 menunjukkan hasil di Serial Monitor ketika alamat IP web server diberikan di browser.
GAMBAR 8.15 GAMBAR 8.16
Keadaan awal di browser setelah alamat IP Hasil pemanggilan alamat IP di Seria
server dipanggil Monitor
Jika tombol Hidupkan LED diklik, baris URL di browser tidak berubah (Gambar 8.17). Namun, tombol vang ditampilkan berubah. Gambar 8,18 memperlihatkan isi variabel da ta Post di Serial Monitor. Tampak bahwa variabel ini berisi tombol—Hidupkan+LED. Data tersebut menyatakan pasangan antarnama variabel dan isinya.
Jika tombol diklik, hasil seperti terlihat pada Gambar 8.15 dimunculkan kembali. Adapun hasil di Serial Monitor ditunjukkan pada Gambar 8.19. Tampak bahwa variabel dataPost berisi tombol=Matikan+LED. Data tersebut menyatakan pasangan antarnama variabel dan isinya.
GAMBAR 8.19
Hasil dari serial monitor setalh tombol matikan LED diklik
8.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 sedikit berbeda dengan contoh sketsa sebelumnya. 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 sudah dibahas pada Subbab 6.6. Oleh karena itu, silakan baca bagian yang membahas pembuatan aplikasi pada subbab tersebut.
8.6 SD Card untuk Menyimpan Skrip HTML
CC3000 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.
Dalam praktik, kombinasi pustaka sdFat dan Adafruit CC3000 akan membuat memori untuk variabel global tersita di atas 80%. Hal ini menimbulkan ketidakstabilan pada Arduino Uno mengingat memori untuk variabel lokal menjadi sangat terbatas. Itulah sebabnya, penggunaan SD card di CC3000 pada Arduino Uno untuk menyimpan skrip HTML tidak dianjurkan. Namun, jika Anda menggunakan Arduino Mega, hal ini dimungkinkan.
8.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 8.3. 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 8.20. Jika Anda menjumpai pesan “Data berhasil disimpan”, Anda bisa memeriksa data yang baru saja direkam melalui phpMyAdmin ataupun melalui skrip lihatdata.php.
GAMBAR 8.20 Hasil sketsa tesCC3000DB di serial Monitor
pada sketsa tesCC3000DB, pernyataan
#define 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.
Terdapat variabel global bernama ip yang dideklarasikan sebagai berikut:
uint32_t ip = 0 ;
Variabel ini digunakan untuk memperoleh alamat IP server. Perintah yang digunakan untuk mendapatkan alamat IP ini dilakukan di setup ( ) melalui kode berikut:
while (ip == 0) {
if ( ! cc 3000 . getHostByName (server, &ip) )
delay (500) ;
}
Perintah di atas akan memanggil getHostByName ( ) sampai alamat IP untuk server diperoleh. Selanjutnya, alamat IP ditarnpilkan dengan memanggil:
cc3000 . printIPdotsRev (ip) ;
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 yang kemudian disimpan ke data. Perhatikan, tanda “&” digunakan untuk memisahkan antarpasangan variabel=nama.
Pernyataan berikut digunakan untuk melalukan koneksi ke server menggunakan port 80:
www — cc3000 .connectTCP (ip, 80) ;
if (www. .connected() {
…
}
digunakan untuk melakukan tindakan sekiranya koneksi ke server dapat dilakukan. Jika koneksi b erhasil dilakukan, bagian yang berada di { dan ) akan dieksekusi. Dalam hal ini, permintaan untuk data ditangani oleh:
Pada pernyataan pertama, POST menyatakan bahwa metode yang digunakan untuk melewatka data ke server adalah POST, /savepost . php menyatakan skrip yang perlu
HTTP/1 . 1 menyatakan versi protokol yang digunakan untuk melakukan permintaan.
Pernyataan
fastrprint (“Host :”);
www . fastrprintln (server) ;
digunakan untuk mengirimkan sebuah baris yang berisi string “Host: ” dan diikuti dengan nama
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 “Content. Length: ” dan diikuti dengan jumlah karakter yang menyusun data. Data yang dimaksud di sini adalah data POST. Ungkapan
String (data. length ( ) )
digunakan untuk mengonversi angka ke tipe String, sedangkan c str ( ) digunakan untuk mengonversi string berkelas String ke string yang berakhiran karakter NULL (atau disebutC string). Hal ini diperlukan mengingat fastrprint ( ) memerlukan argumen berupa stringyang berakhiran karakter NULL.
Setelah itu, sebuah baris kosong perlu dibentuk. Hal ini dilakukan oleh:
www. fastrprintln ( “”);
Setelah baris kosong, data POST dituliskan. Hal itu dilakukan oleh:
www. fastrprint (data. c str ( ) ) ;
Mengingat data adalah string berkelas String maka perlu dikonversi ke C string melaluic
str()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 8.21 memperlihatkan hasil di Serial monitor setelah perekaman dua data dilakukan. Anda bisa memonitor hasilnya dengan menjalankan skrip lihatdata . php.
GAMBAR 8.21 Hasil di Serial Monitor yang menunjukkan perekaman dua data
8.8 Pengiriman Email
Untuk memungkinkan Arduino melakukan pengiriman email ke suatu alamat email, server yang dinar-nakan 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.8 mengingat layanan ini digunakan pada contoh yang akan dibahas.
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 digunaka mengakses smtp2go.
konstanta WLAN_SSID berupa string yang menyatakan nama titik-akses Wi-Fi Yan untuk melakukan koneksi ke Internet. digunakan
Konstanta WLAN_PASS berupa string yang menyatakan password untuk titik-akses digunakan untuk melakukan koneksi ke Internet. yang
Pendefinisian nama SMTP server dilakukan melalui kode:
*define server “mail . smtp2go.com”
Adapun pembuatan variabel yang digunakan untuk mengakses SMTP server dilakuk pemyataan:
Adafruit CC3000 Client smtpServer;
Untuk keperluan menyimpan alamat IP SMTP server, variabel global bernama ip dideklarasikan seperti berikut:
uint32 t ip = 0;
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 = o; float lembab = 0;
Seperti biasa, pada setup ( ) terdapat perintah untuk melakukan proses awal terhadap WiFi Shield yang dilakukan melalui:
init CC3000 () ;
Alamat IP untuk SMTP server diperoleh dengan menggunakan:
while (ip == 0) {
if ( !cc3000.getHostByName (server, & ip) )
delay (500) ;
Selarüutnya, alamat IP ini ditampilkan dengan menggunakan:
cc3000. printIPdotsRev (i p) ;
Informasi perintah untuk mengirimkan email dilakukan oleh:
Serial.println (F(“Ketik S dan k lik tombol Send”) ) ;
Serial . print In (F (“untuk mengirim email”) ) ;
Fungsi F ( ) digunakan untuk menyimpan konstanta string argumen ke memori Flash untuk menghemat penggunaan RAM.
Fungsi loop ( ) menangani pengiriman email. Mula-mula, pesan dideklarasikan sebagai variabel statis yang ditujukan untuk menyimpan string dengan panjang maksimum sebanyak 39 karakter• Variabel statis adalah variabel yang dideklarasikan sekali saja dan nilainya tetap dipertahankan walaupun fungsi berakhir dieksekusi. Selanjutnya, 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” ,
“alamatEMai1 Penerima”) ;
Alamat email pengirim dan penerima mempunyai format seperti a@b.com.
GAMBAR 8.22
Keadaan yang menyatakan bahwa Arduino siap menerima Perintah untuk mengirim email
Fungsi email ( ) mempunyai kode yang sedikit berbeda dengan contoh pada Bab 6 dan 7 walau sebenarnya mepunyai fungsionalitas yang sama. Hal yang membedakan terutama pada keharusan untuk membaca tanggapan dari server untuk beberapa perintah permintaan yang ditujukan ke SMTP server. Sebagai contoh, terdapat beberapa pemanggilan: bacaTanggapan ( ) ;
Gambar 8.22 memperlihatkan keluaran di Serial Monitor setelah Arduino siap menerima perintah dari Serial Monitor. Gambar 8.23 menunjukkan hasil di Serial Monitor setelah huruf S dimasukkan di Serial Monitor dan tombol Send diklik. Adapun Gambar 8.24 memberikan contoh hasil di penerima.
GAMBAR 8.23
Keadaan setelah email dikirim
GAMBAR 8.24 Contoh email yang didapatkan di Sisi penerima
8.9 Pengaksesan Web 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: