9. Pemrograman dengan ESP8266
Bab ini membahas penggunaan ESP8266 ESP-01 untuk membuat Arduino berlaku sebagai web server maupun klien. Di .samping itu bab lni juga mengupas cara untuk mengirimkan email
9.1 Pengantar ESP8266
keluarga modul Wi-Fi yang dopat digunakan sebagai ketiga shie/d yang telah dibahas sebelum ini. mengenai seluruh versi ESP8266 dapat dilihat di:
http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family
ESP-01 memiliki 8 pin. Kegunaan masing-masing dicantumkan pada Tabel 9.1. Adapun susunan pin diperlihatkan pada Gambar 9.2.
GAMBAR 9.2 Pin-pin di ESP-01
TABEL 9.1 Daftar pin pada ESP-01
Sebelum ESP-01 dapat digunakan, beberapa komponen diperlukan. Tabel 9.2 mencantumkan hal-hal yang Anda perlukan.
TABEI 9.2 Daftar komponen yang dipedukan untuk mengoperasikan ESP-01
Komponen | Keterangan |
Adaptor digunakan sebagai pemasok tegangan modul daya. Țegangan 6V dari peranti ini perlu dihubungkan ke modul daya. |
|
Breadboard digunakan untuk menaruh komponen atau menancapkan kabel | |
Modul daya atau breadboard power module (bagian kanan) adalah pernasok tegangan 3,3V yang diperlukan oleh ESP-01. Selain itu, tegangan 5 volt dipertukan untuk komponen Level converter. Jumper perlu dipasangkan ke bagian 3,3V supaya keluaran pada bagian tepi berupa 3,3V
|
|
Level converter digunakan untuk melakukan konversi tegangan SV ke 3,3V atau sebaliknya. Contoh ini memiliki 4 kanal. Bagian kiri perlu dihubungkan ke peranti yang memerlukan tegangan 3,3V, sedangkan b agian kanan dihubungkan ke peranti yang memerlukan tegangan SV. Pin 3V perlu dihubungkan ke sumber tegangan 3,3V dan pin +5V perlu dihubungkan ke sumber tegangan SV. Dalam hal ini, sumber tegangan diambil dari modul daya |
9.2 Pengujian Awal ESP8266
Arduino. Lalu, hidupkan pemasok tegangan ke ESP8266 dan hubungkan Arduino ke PC.
Gambar 9.6 menunjukkan keadaan setelah rangkaian disusun dan catu dava untuk Arduino maupun level converter dan ESP-01 telah diberikan. Berdasarkan rangkaian inilah percobaan pertama bisa dilaksanakan.
ESP-01F yang diproduksi setelah tahun 2015 mempunyai laju bit sebesar 115200 bps. Oleh karena itu, laju bit di Serial Monitor perlu diatur sebesar itu. Langkah yang perlu dilakukan adalah seperti berikut.
GAMBAR 9.6
Hasil penyusunan modul ESP8266
dengan Arduino
- Bukalah Serial Monitor
- Pilih laju bit di Serial Monitor sebesar 115200.
- Pilih Both NL & CR di sebelah kiri laju bit.
Gambar 9.7 memperlihatkan keadaan Serial Monitor setelah langkah ini.
GAMBAR 9.7 Tampilan awal di Serial Monitor sketsa BareMinimum
Untuk menguji ESP-01, Anda bisa memberikan perintah AT. Perintah AT adalah perintah yang biasa digunakan pada MODEM. Perintah pertama yang akan diperkenalkan adalah AT. Caranya, ketikkan AT pada kotak di sebelah kiri tombol seperti berikut:
Lalu, klik pada tombol . Hasilnya, ESP8266 akan menampilkan tanggapan berupa OK, seperti yang ditunjukkan pada Gambar 9.8.
GAMBAR 9.8 Țampilan awal di Serial Monitor setelah perintah AȚ diberikan
Untuk mengetahui versi modul, perintah AT+GMR bisa diberikan. Hasilnya ditunjukkan pada Gambar 9.9.
9.3 Pengubahan Laju Bit di ESP8266
Pengubahan laju bit pada ESP8266 perlu dilakukan jika Arduino Uno digunakan. Hal ini tidak diperlukan kalau Arduino Mega digunakan. Penyebabnya, pustaka SoftwareSerial yang akan digunakan di Arduino Uno tidak mampu mendukung kecepatan 115200 bps. Oleh karena itu, dengan menggunakan rangkaian pada Gambar 9.5 dan menggunakan sketsa BareMinimum, Anda perlu memberikan perintah:
AT+CIOBAUD=9600
Hasilnya dapat dilihat pada Gambar 9.10.
Selanjutnya, cobalah untuk menurunkan laju bit di Serial Monitor menjadi 9600 baud. Hasilnya diperlihatkan pada Gambar 9.11.
GAMBAR 9.11 Keadaan Serial Monitor setelah laju bit diatur sebesar 9600 baud
Berikutnya, ujilah dengan memberikan perintah AT saja. Hasilnya ditunjukkan pada Gambar 9.12.
GAMBAR 9.12 Hasil yang menyatakan ESP8266 dapat berkomunikasi dengan laju bit sebesar 9600 bps
Setelah ESP8266 diatur dengan laju bit sebesar 9600 bps, ubahlah rangkaian menjadi seperti yang diperlihatkan pada Gambar 9.13. Perbedaan dengan rangkaian pada Gambar 9.5 terletak pada penggunaan pin 8 dan 9 sebagai pengganti pin 0 dan pin 1.
GAMBAR 9.13 Rangkaian untuk mencoba komunikasi dengan ESP8266 melalui Softwareserial
9.4 Penggunaan Pustaka WiFiEsp
Untuk memudahkan dalam memprogram ESP8266, pustaka WiFiEsp akan digunakan. Pustaka ini dapat diunduh di:
https://github.com/bportaIuri/WiFiEsp
File yang didapat berupa WiFiEsp—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 WiFiEsp—master.zip. Klik pada tombol OPEN.
Pemilihan pustaka ini dilakukan setelah melakukan serangkaian percobaan pada berbagai pustaka sejenis. Alasan yang mendasarinya adalah karena pustaka WiFiEsp memiliki kesamaan dengan pustaka WiFi yang dibahas pada Bab 7. Sedikit perubahan saja yang diperlukan untuk mengubah sketsa yang menggunakan Arduino WiFi Shield agar berjalan untuk ESP8266.
9.5 Pengujian ESP-01 Sebagai Web Server
ESP-OI 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 9.14.
GAMBAR 9.14 Penambahan DHTII untuk melakukan percobaan pemantauan suhu dan kelembaban udara melalui browser
Untuk mempraktikkan, silakan mengunggah sketsa berikut yang menangani permintaan HTTp dari browser.
Gambar 9.16 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 ESP8266. Jika tidak, web server tersebut tidak dapat diakses oleh browser, seperti yang ditunjukkan pada Gambar 9.17.
GAMBAR 9.16 GAMBAR 9.17
Hasil pemantauan suhu dan kelmbaban udara Hasil yang menunjukan bahwa web
Melalui browser Server dengan alamat 192.168.1.152 tidak dapat di akses
Apa yang terjadi di Serial Monitor saat ada permintaan HTTP ke web server? Gambar 9.18 menunjukkan contohnya. Proses terpenting yang perlu diperhatikan adalah dari saat muncul tulisan “Permintaan baru…” hingga “Klien terputus…”.
GAMBAR 9.18 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 mengakses ESP8266:
#include “WiFiEsp.h”
#include “SoftwareSerial.h”
- Definisi yang menyatakan pin dihubungkan ke DHTII berupa:
const int PIN DHT – A2;
- perintah berikut digunakan untuk membuat objek yang digunakan untuk mengakses ESP8266:
SoftwareSeria1 esp8266 (8, 9) ;// RX, TX
Pin 8 menyatakan pin RX untuk Arduino dan pin 9 menyatakan pin TX untuk Arduino.
- Titik-akses Wi-Fi yang digunakan beserta password-nya didefinisikan melalui:
char NETWORK_SSID[I “Andromax-M2S-E7C8” ;
char NETWORK_PASSWORD [ ] = “07156488” ;
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 ESP8266 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 ESP8266 bertindak sebagai server dilakukan melalui:
WiFiEspServer 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 untuk port yang digunakan oleh ESP dilakukan melalui:
esp8266 .begin (9600) ;
Artinya, laju bit yang digunakan berupa 9600 bps.
Pernyataan:
WiFi.init (&esp8266) ;
digunakan untuk mengaitkan objek WiFi dengan objek esp8266.
- Koneksi ke titik-akses Wi-Fi 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 CONNECTED) status, (diperiksa dengan menggunakan if, seperti berikut.
if (status WL_CONNETED ) {
Serial . println (“Gagal melakukan koneksi WiFi”) ;
while(true) ; // Ulang terus
}
Kode ini menyatakan bahwa kalau titik-akses tidak terhubung, pesan “Gagal melakukan koneksi WiFi” dikirim 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 . local IP ( ) ;
- Nilai ip inilah yang ditampilkan ke Serial Monitor melalui pernyataan:
Serial . println (ip) ;
- Untuk memantau permintaan klien, pernyataan berikut diberikan:
WiFiEspC1ient klien = server.available ( ) ;
Mula-mula, k lien dideklarasikan bertipe WiFiEspClient. 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 bari s SekarangKosong dideklarasikan bertipe Boolean
dan diisi dengan t rue. 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 new/ine (\n) dan barisSekarangKosong, tanggapan kepada klien mulai dikirimkan. Perintahnya berupa:
klien.println (“HTTP/I.1 200 OK”) ;
klien . println (“Content-Type: text/ html”) ;
klien . print ln (“Connection: close”) ;
klien . print In (“Refresh: 5”) ;
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 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 . w 3 org/Protocols/rfc2616/rfc2616-sec14 . html |
Perintah selanjutnya adalah untuk mengirimkan kode HTML yang dimulai dari
klien.println(“<!DOCTYPE HTML>”) ;
hingga
klien . printIn(“</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 . printIn (“° ;
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 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 (0) dan % menyatakan tanda %.
- Setelah pernyataan while terdapat pernyataan:
if (c == ‘\n’) {
// Baris sekarang kosong
barisSekarangKosong = true;
}
else if (c hr’ )
// 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.
CATATAN | Di depan telah disinggung bahwa pustaka WiFiEsp mempunyai kemiripan dengan pustaka WiFi. Pertama,
# include “WiFi . h” perlu diganti dengan # include “WiFiEsp.h” #include “SoftwareSeria1.h” Kedua, WiFiServer server (80) ; perlu diganti dengan WiFiEspServerserver (80); Ketiga, WiFiC1ientklien server . available ( ) ; perlu diganti dengan WiFiEspC1ient klien = server . available ( ) ; Selain itu, tambahan yang perlu dilakukan di ESP8266:
|
9.6 Pengontrolan LED Melalui
Contoh pada Subbab 9.5 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 9.19
Rangkaianuntuk menguji pengendalian
LED melalui browser
Gambar 9.19 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 2200. Ujung lain resistor dihubungkan ke pin 2 Arduino.
Adapun sketsa yang diperlukan adalah seperti berikut:
mengakses server.
GAMBAR 9.20 Keadaan awal web server
GAMBAR 9.21 Keadaan awal di browser
setelah alamat IP web server diketikkan
Adapun Gambar 9.22 menunjukkan hasil di Serial Monitor setelah pemakai memasukkan alamat IP di browser.
Selanjutnya, Anda bisa mencoba untuk mengeklik pada tombol . Tanggapan di Serial Monitor akan menjadi seperti yang diperlihatkan pada Gambar 9.23. 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.
GAMBAR 9.22 GAMBAR 9.23
Tanggapan di serial monitor setelah alamat web Hasil di serial monitor setelah tombol server diklik di browser hidupkan LED diklik
Sekarang, marilah untuk memahami sketsa EspLed.
- Dua baris berikut digunakan untuk kepentingan pemanfaatan pustaka untuk ESP8266:
#include “WiFiEsp.h”
# include
“SoftwareSerial.h”
- Definisi yang menyatakan pin yang Hasil di Serial Monitor setelah tombol Matikan LED diklik dihubungkan ke DHTII berupa:
const int PIN DHT = A2;
- Perintah berikut digunakan untuk membuat objek yang digunakan untuk mengakses ESP8266:
SoftwareSeria1 esp8266 (8, 9) ; // RX, TX
Pin 8 menyatakan pin RX untuk Arduino dan pin 9 menyatakan pin TX untuk Arduino.
- Titik-akses Wi-Fi yang digunakan beserta password-nya didefinisikan melalui:
char NETWORK SSID[] = “Andromax—M2S—E7C8”;
char NETWORK PASSWORD [] = “07156488”;
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 ESP8266 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 ESP8266 bertindak sebagai server dilakukan melalui:
WiFiEspServer 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 untuk port yang digunakan oleh ESP dilakukan melalui:
esp8266. begin (9600) ;
Artinya, laju bit yang digunakan berupa 9600 bps.
- Pernyataan
WiFi.init (&esp8266) ;
digunakan untuk mengaitkan objek WiFi dengan objek esp8266.
- Koneksi ke titik-akses Wi-Fi 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 WL CONNECTED) {
Serial. Println(“Gaga1 melakukan koneksi WiFi !”);
while (true) ; // Ulang 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) ;
- Terdapat dua deklarasi variabel global berupa:
bool keadaanLed == false;
String permintaanKIien;
Variabel keadaanLed digunakan untuk menyatakan keadaan LED. Nilai false menyatakan LED mati dan nilai true menyatakan LED hidup. Variabel permintaanKIien 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 serversiap menerima perintah dari browser:
Serial . println (“Siap melayani permintaan!”);
- Untuk memantau permintaan klien, pernyataan berikut diberikan:
WiFiEspClient klien = server. available ( ) ;
Mula-mula, klien dideklarasikan bertipe WiFiEspC1ient. 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 . println ( “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. 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
permintaanKIien += c;
digunakan untuk menambahkan karakter yang tersimpan di c ke akhir string yang terdapat di permintaanKIien. Perlu diketahui, variabel permintaanKIien digunakan untuk mencatat string yang merupakan permintaan klien.
Lalu, jika isi variabel c berupa new/ine (\n) dan barisSekarangKosong, tanggapan kepada klien mulai dikirimkan. Perintahnya berupa:
klien.println ( “HTTP/ 1.1 200 OK”) ;
klien.println(“Content—Type: text/htrnl”) ;
klien . println ( ‘*Connection: cI 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 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 DOCTYPE HTML>”) ;
hingga
klien. printIn (“<\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 kode yang menyusun fungsi prosespermintaan ( ) dijelaskan berikut ini. Pertama, kode
if (permintaanKIien . indexOf (“GET /?tomboI=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 permintaanKIien. 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/?tombol=Matikan+LED”)>—1) {
keadaanLed = false;
digitalWrite (PIN_LED, LOW) ;
}
digunakan untuk membuat LED mati jika string “GET /?tombol=Matikan+LED” terdapat pada permintaanKIien
9.7 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 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 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 SUbmit. ltulah sebabnya, terdapat kode berikut:
if (keadaanLed) {
klien.println (“<input type=\”submit\””) ;
klien.printIn(name=\”tombol\”value=\”Matikan LED\”>”) ;
klien.printIn (“<input type=\”submit\””) ;
klien.printIn(name=\”tombol\”value=\”HidupkanLED\”>”);
- penentuan perintah POST dilakukan terhadap variabel dataPost. Perintah yang menyeleksinya adalah:
if (dataPost. indexOf (“tombol=Hidupkan+LED”) >-1) {
keadaanLed = true;
digitalWrite (PIN_LED, HIGH) ;
}
else
if (data Post . indexOf (“tomboI=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 9.29 Hasil di Serial Monitor ketika tombol Hidupkan LED diklik
GAMBAR 9.30
Hasil di serial monitor setelah tombol mematikan LED diklik
9.8 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 seperti yang dibahas pada Subbab 6.5.
9.9 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 9.14. Dengan menggunakan rangkaian tersebut, data yang berasal dari sensor DHTII akan disimpan sekali ke tabel sensor. Sketsa yang diperlukan adalah seperti berikut.
Pada sketsa tesEspDB, pernyataan
char server [ ] “ardugama . site88 . net”;
menentukan server yang akan digunakan untuk GAMBAR 9.31 menjalankan skrip untuk menyimpan data. Tentu saja, Hasil sketsa tesWiFiDB di Serial Monitor
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 (klien. 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:
klien.println (“POST /savepost.php HTTP/I . 1”) ;
klien.print ( “Host : “);
klien.println(server) ;
klien.printIn(Content—Type:application/x—www—form-urlencoded”) ;
klien . print (“Content—Length :”);
klien . printIn (data. length ( ) ) ;
klien. print In ( ) ;
klien . 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/I . 1 menyatakan versi protokol yang digunakan untuk melakukan permintaan.
- Pernyataan
klien.print (“Host: “) ;
klien.println (server) ;
digunakan untuk mengirimkan sebuah baris yang berisi string “Host: ” dan diikuti dengan nama
- pernyataan
klien . 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:
klien . print In ( ) ;
- Setelah baris kosong, data POST dituliskan. Hal itu dilakukan oleh:
klien. 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 9.32 memperlihatkan hasil di Serial monitor setelah perekaman tiga data dilakukan. Anda bisa memonitor hasilnya dengan menjalankan skrip Iihatdata . php.
memungkinkan Arduino melakukan pengiriman email ke suatu alamat email, server dinamakan Simple Mail Transfer Protocol (SMTP) server. Server dari pihak ketiga inilah yang bertindak sebagai penangan email.
Salah satu SMTP server yang bisa digunakan untuk percobaan adalah SMPTP2GO. Silakan baca tulisan pada awal Subbab 6.8 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:
WiFiEspC1ient smtpServer;
- Seperti biasa, pada setup ( ) terdapat perintah untuk melakukan koneksi ke titik-akses Wi-Fi 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
Jika terdapat karakter S, pesan akan berisi String “Pesan ti” dan diikuti dengan bilangan yang tersimpan di variabel nomor. Lalu, variabel nornor dinaikkan sebesar 1 untuk kepentingan pengiriman email berikutnya. Adapun pengiriman email dilakukan melalui:
email (“Email dari Arduino” pesant
“alamatEmailPengirim” ,
“alamatEMai1Penerima”) ;
Alamat email pengirim dan penerima mempunyai format seperti a@b.com.
Untuk penjelasan fungsi email ( ) , silakan merujuk pada bahasan fungsi ini pada Subbab 6.8.
Gambar 9.33 memperlihatkan keluaran di Serial Monitor setelah Arduino siap menerima perintah dari Serial Monitor. Gambar 9.34 menunjukkan hasil di Serial Monitor setelah huruf S dimasukkan di Serial Monitor dan tombol Send diklik. Adapun Gambar 9.35 memberikan contoh hasil di penerima.
GAMBAR 9.33 Keadaan yang menyatakan bahwa Arduino
siap menerima perintah untuk mengirim email
GAMBAR 9.34 Keadaan setelah email dikirim
GAMBAR 9.35
Contoh email yang didapatkan di sisi penerima setelah dua kali permintaan S diberikan