• Tidak ada hasil yang ditemukan

Pengenalan Internet of Things dengan Wemos

N/A
N/A
Muhamad Wahyudi

Academic year: 2024

Membagikan "Pengenalan Internet of Things dengan Wemos"

Copied!
126
0
0

Teks penuh

(1)

2021

ARDUCAMP

Oleh Tim arducamp

INTERNET OF THINGS

2021

(2)

2

Daftar Isi

PENDAHULUAN ... 4

IOT ? ... 4

DEVELOPMENT BOARD YANG DIGUNAKAN ... 5

Wemos D1 MINI PRO (KELUARGA ESP8266) ... 5

WEMOS LOLIN32 (KELUARGA ESP32) ... 6

MATERI 1 : INSTALASI WEMOS D1 MINI ... 8

MATERI 2 : INPUT & OUTPUT ... 11

MATERI 2.1 : INPUT ... 11

Materi 2.1.1 : Push Button ... 11

Materi 2.1.2 : DHT11 ... 14

Materi 2.1.3 : LDR ... 16

MATERI 2.2 : OUTPUT ... 18

Materi 2.2.1 : LED ... 18

MATERI 3 : DASAR KONEKSI WIFI ... 21

MATERI 3.1 : WEMOS SEBAGAI STA ... 21

Materi 3.1.1 : Memindai WiFi sekitar ... 22

Materi 3.1.2 : Koneksi WEMOS dengan jaringan WiFi ... 25

Materi 3.1.3 : Koneksi Wemos ke website ... 28

MATERI 3.2 : WEMOS SEBAGAI ACCESS POINT ... 33

MATERI 4 : KOMUNIKASI ANTARA PERANGKAT WEMOS ... 38

MATERI 4.1 : KOMUNIKASI TCP ... 39

MATERI 4.2 : KOMUNIKASI UDP ... 45

MATERI 5 : WEBSERVER ... 51

MATERI 5.1 : DASAR-DASAR WEBSERVER PADA ESP8266 ... 52

MATERI 5.3 : HTTP REQUEST ... 56

MATERI 5.4 : AUTO REFRESH SCRIPT... Error! Bookmark not defined. MATERI 6 : ADAFRUIT & IFTTT ... 62

MATERI 6.1 : ADAFRUIT DASHBOARD WEBSITE ... 64

MATERI 6.2 : ADAFRUIT MQTT DASHBOARD pada ANDROID SMARTPHONE ... 80

MATERI 6.2 : ADAFRUIT X IFTTT ... 87

MATERI 7 : WEBHOOK IFTTT ... 98

MATERI 7.1 : TRIGGER SMS DAN EMAIL ... 98

MATERI 8 : WEB HOSTING (FINAL PROJECT) ... 116

MATERI 8.1 : IOT WEATHER STATION WEBSITE ... 116

(3)

3

(4)

4

PENDAHULUAN

IOT ?

Internet of Things (IoT) telah menjadi topik yang hangat untuk dibicarakan akhir-akhir ini. IoT tidak hanya menjadi suatu konsep yang mempengaruhi hidup manusia tetapi bagaimana IoT bisa membantu memudahkan kehidupan manusia. Namun sebenarnya, apa sih yang dimaksud IoT itu? dan apa saja dampaknya? Mari kita mulai dengan memahami beberapa hal. Fakta menyatakan ketersediaan broadband Intenet semakin meningkat, biaya koneksi semakin murah, begitu juga harga alat pengembangan teknologi.

Fakta ini menjadikan IoT sebagai sesuatu yang sempurna untuk digunakan.

Sederhananya, Internet of Things adalah konsep dasar yang menghubungkan perangkat apapun satu sama lain. Termasuk kulkas, TV, mesin cuci, lampu, smartphone, mobil dan masih banyak lagi. Selain peralatan sehari-hari, IoT juga bisa menghubungkan berbagai komponen mesin seperti mesin jet pesawat terbang, bor pertambangan minyak dan lain-lain. Pada dasarnya, jika kita memiliki peralatan yang mempunyai saklar on dan off, peralatan tersebut mempunyai kesempatan yang besar untuk digunakan dalam ranah IoT.

IoT akan mempunyai dampak yang menyebabkan aturan baru dimana aturan masa depan akan menjadi, 'apapun yang dapat dihubungkan, akan terhubung'. Namun, pertanyaannya kenapa kita memerlukan banyak perangkat yang saling terhubung satu sama lain? Misal, jika anda sedang di jalan untuk meeting, dan mobil anda bisa mengakses rute terbaik yang diambil, namun lalu lintas berat menyebabkan mobil mengirimkan pesan teks ke rekan meeting bahwa anda akan terlambat? Contoh lain, bagaimana jika anda telat bangun, dan jam alarm yang sudah diatur jam 6 berdering dan memberitahukan mesin pembuat kopi untuk menyeduh kopi anda?

Untuk skala yang lebih luas, IoT dapat diterapkan untuk jaringan transportasi untuk kepetingan Smart City yang dapat membantu kita mengurangi limbah dan meningkatkan penggunaan energi seefisien mungkin. Hal ini akan membantu kita dalam memahami dan meningkatkan kesejahteraan hidup.

Topik IoT selama beberapa tahun menjadikan kita berusaha untuk memahami bagaimana IoT mempengaruhi kehidupan. Kita juga harus berusaha untuk memahami peluang dan tantangan apa saja yang bisa kita ambil dan selesaikan. Karena semakin banyak perangkat mulai bergabung dengan IoT. Untuk saat ini hal terbaik yang bisa kita lakukan adalah mendidik diri sendiri tentang apa yang dimaksud IoT dan mencari tahu dampak potensial yang dapat dilihat agar pekerjaan dan hidup kita semakin nyaman.

(5)

5

DEVELOPMENT BOARD YANG DIGUNAKAN

Wemos D1 MINI PRO (KELUARGA ESP8266)

WeMos D1 mini merupakan module development board yang berbasis WiFi dari keluarga ESP8266.

WeMos D1 dapat diprogram menggunakan software IDE Arduino seperti halnya dengan NodeMCU. Salah satu kelebihan dari WeMos D1 mini dibandingkan dengan module development board berbasis ESP8266 lainnya yaitu adanya module shield untuk pendukung hardware plug and play. Module shield development yang dimaksud antaralain Modul Display, Sensor, dan Aktuator. Ada beberapa turunan dari keluarga WeMos D1 di tahun 2018, antaralain D1, D1 Mini, D1 mini Lite, dan D1 mini Pro. Pada pembahasan kali ini, kita akan berfokus pada WeMos D1 Mini yang paling populer di Indonesia.

Spesifikasi dari Wemos D1 Mini:

1. Beroperasi pada tegangan operasional 3,3 V

2. Memiliki 11 pin digital I/O termasuk pin I2C, one-wire, PWM, SPI, dan interrupt 3. Memiliki 1 pin analog input (ADC)

4. Berbasis micro USB untuk fungsi pemrogramannya 5. Memory flash: 4Mbyte

6. Dimensi module: 34,2 mm x 25,6 mm 7. Clock speed: 80MHz

8. Menggunakan IC CH340G untuk komunikasinya

Pin Map GPIO WeMos D1 Mini:

Gambar 1 Pemetaan pin Wemos D1 Mini 2.

(6)

6

Tabel berikut memberikan informasi, mana saja pin GPIO yang dapat dijadikan refrensi dalam pembuatan proyek IOT, untuk mengurangi tingkat kegagalan.

Tabel 1 Detail Pin Wemos D1 Mini.

Ada pin tertentu yang menghasilkan sinyal 3.3V saat ESP8266 proses booting. Ada kemungkinan permasalahan yang timbul jika menghubungkan device lain seperti relay ke GPIO tersebut. GPIO6 ke GPIO11 biasanya terhubung ke chip flash di papan ESP8266. Jadi, pin ini tidak disarankan untuk digunakan. Berikut ini GPIO menghasilkan sinyal HIGH saat boot: GPIO16, GPIO3, GPIO1, GPIO10, GPIO9.

GPIO4 dan GPIO5 merupakan GPIO yang paling aman digunakan jika ingin koneksikan dengan device relay.

WEMOS LOLIN32 (KELUARGA ESP32)

ESP32 merupakan salah satu varian development kit selain ESP8266 yang dikembangkan oleh Espressif System. ESP32 adalah sebuah sistem mikrokontroler IOT yang berbiaya rendah, berdaya rendah pada seri chip dengan kemampuan WiFi dan bluetooth dalam dua mode. Adapun keluarga ESP32 adalah chip ESP32-D0WDQ6, ESP32-D2WD, ESP32-S0WD, dan sistem dalam paket ESPRE-PICO-D4. Pada intinya, jenis mikroprosesor Tensilica Xtensa LX6 dengan inti dual core atau single core mempunyai kecepatan hingga 240Mhz. ESP32 sudah terpasang antena, RF balun, power amplifier, low-noise receive amplifier, filter, dan power management module. Perangkat ini didesain untuk semua jenis perangkat dari seluler, embedded system, dll.

Adapun pemetaan pinout dari ESP32 dapat dilihat pada Gambar 2. Yang kita gunakan dalam praktikum ini. Perbedaan antara ESP32 versi biasa dengan ESP32 versi wemos adalah versi wemos dapat

(7)

7

mengeluarkan tegangan 5V dan versi wemos juga dapat menerima langsung masukkan daya dari baterai lipo.

Gambar 2 ESP32 Pinout.

Gambar 3 Wemos Lolin32 Pinout.

(8)

8

MATERI 1 : INSTALASI WEMOS D1 MINI

Tujuan :

1. Peserta memahami instalasi perangkat wemos D1 Mini

2. Peserta dapat menjalankan coding led blink pertama di wemos D1 Mini

Bahan yang diperlukan:

1. WeMos D1 Mini 2. Kabel Micro USB 3. Laptop

4. Arduino IDE

Langkah-Langkah Persiapan Integrasi Library ESP8266 NodeMCU:

1. Download dan install software Arduino IDE (sesuai dengan Operation System), kemudian buka software tersebut.

2. Pilih dan klik menu file → preferences

3. Pada bagian “Additional Boards Manager URLs” masukan link dibawah berikut ini:

http://arduino.esp8266.com/stable/package_esp8266com_index.json klik OK

(9)

9

Gambar 4 Windows Preferences

4. Setelah itu, pilih menu tools -> board -> boards manager

5. Ketikan pada “filter your search” -> esp8266 by ESP8266 community 6. Kemudian klik install, dan tunggu beberapa detik sampai proses selesai

(10)

10

Gambar 5 Boards Manager.

Langkah-Langkah Persiapan Pemrograman:

1. Pada software Arduino IDE klik menu tools -> boards -> Wemos D1 Mini 2. Masuk ke menu Port dan pilih port mana yang digunakan (COMxx) 3. Setelah itu ke menu File -> Examples ->Basic -> Blink

4. klik tombol “upload“. Tunggu beberapa detik, program akan mulai diunggah ke module dengan ditandai adanya “blinking” pada LED

(11)

11

MATERI 2 : INPUT & OUTPUT

Di bab ini, kita akan mempelajari mengenai masukan dan keluaran yang ada pada wemos D1 mini, adapun masukan yang akan kita gunakan ada tiga macam, yaitu push button, DHT11 (sensor kelembapan udara dan suhu), dan LDR. Sedangkan untuk keluaran wemos, kita menggunakan lampu LED dua buah.

MATERI 2.1 : INPUT

Pada subbab ini, kita akan melaksanakan pelatihan tentang bagaimana cara kera dari masukan yang nantinya dapat dibaca oleh wemos baik itu masukan digital atau masukan analog. Adapun rangkaian secara umum untuk praktikum ini dapat dilihat pada

Gambar 6 Rangkaian Penuh Wemos D1 Mini.

Materi 2.1.1 : Push Button

Kita akan mencoba memproses masukan digital berupa push button. Push button yang kita gunakan ini, memiliki dua kaki yang kalau ditekan akan menghubungkan antara kaki-kaki tersebut. Pada push button, terdapat dua jenis rangkaian, yaitu rangkaian active high dan active low. Rangkaian active high adalah rangkaian yang jika terhubung maka akan memberikan tegangan +5V/+3,3V kepada pin masukan wemos. Sedangkan active low adalah rangkaian yang jika terhubung maka akan memberikan ground kepada

(12)

12

pin masukan wemos. Rangakaian active low sering digunakan oleh para pengguna arduino dikarenakan lebih sederhana merangkainya dan tidak perlu menggunakan resistor tambahan pada kaki ground-nya. Pada percobaan ini, kita menggunakan rangkaian active low.

Tujuan

1. Peserta dapat memahami konsep masukan pada wemos D1 Mini.

2. Peserta dapat memahami rangkaian aktif low pada push button.

3. Peserta dapat memahami prinsip kerja rangkaian aktif low pada push button.

Bahan-bahan yang digunakan

1. Kabel secukupnya 2. 1 buah push button 3. Wemos D1 Mini 4. Project board 5. Kabel USB

Langkah-langkah secara Umum

1. Rangkaialah rangkaian sesuai pada Gambar 6.

2. Ketik koding yang tersedia pada sketch arduino.

3. Setelah selesai di ketik kodingnya, diunggah kodingnya.

4. Tunggu hingga selesai unggahannya, setelah selesai pengunggahannya, rangkaian dapat dijalankan.

Koding

#define BUTTON_PIN D2 int current = 0;

void setup() {

Serial.begin(115200);

pinMode(BUTTON_PIN, INPUT_PULLUP);

}

void loop() {

current = digitalRead(BUTTON_PIN);

Serial.println(current);

Delay(1000);

}

Penjelasan Koding

(13)

13

#define BUTTON_PIN D2 int current = 0;

Pada awal baris, kita membuat satu konstanta dan dua variabel. konstanta BUTTON_PIN digunakan untuk menyimpan pin tombolnya. Variabel current berguna untuk menyimpan hasil masukan dari push button dan memiliki nilai awal 0.

void setup() {

Serial.begin(115200);

pinMode(BUTTON_PIN, INPUT_PULLUP);

}

Void setup () adalah prosedur yang dijalankan oleh wemos ketika dinyalakan dan hanya sekali dijalankan. Didalam void setup() terdapat koding pinMode yang dimana berguna untuk mengatur jenis pin yang dipakai. Dalam hal ini, BUTTON_PIN kita jadikan sebagai INPUT_PULLUP, yang artinya masukan active low. Serial.begin(115200) akan menyetel baud rate sebesar 115200.

void loop() {

current = digitalRead(BUTTON_PIN);

Serial.println(current);

}

Void loop() merupakan prosedur utama yang akan dijalankan oleh wemos secara terus-menerus hingga terputusnya aliran listrik yang menghidupinya. Ketika wemos telah membaca syntax paling terakhir, maka langka selanjutnya wemos akan mengulang pebacaan koding void loop() dari awal lagi. Fungsi digitalRead() adalah membaca masukan dari pin digital. Dalam konteks ini, digitalRead () akan membaca masukan dari BUTTON_PIN, kemudian menyimpannya kedalam variabel current. Serial.println(current) berguna untuk menampilkan apa yang ada di dalam variabel current pada saat itu di serial monitor.

Hasil Penerapan Koding

(14)

14

Gambar 7 Penekanan tombol push button

Ketika push button ditekan, maka akan menghasilkan nilai low yang ditampilkan di serial monitor.

Sedangkan, ketika push button tidak ditekan, maka akan menghasilkan nilai high yang ditampilkan pada serial monitor.

Materi 2.1.2 : DHT11

Pada materi kali ini, kita akan membahas salah satu sensor yang banyak digunakan dalam proyek arduino maupun IOT. Sensor ini bernama DHT yang dimana terdapat dua macam jenis DHT11 dan DHT22.

Meskipun memiliki tujuan yang sama, DHT11 memiliki galat pengukuran suhu dan kelembapan yang lebhi lebar dibandingkan dengan DHT22. Namun, DHT11 dari sisi harga jauh lebih terjangkau dibandingkan dengan DHT22. Sehingga DHT11 untuk kalangan penghobi, lebih banyak digunakan dibandingkan dengan DHT22.

Pada pelatihan materi ini, kita akan membaca nilai suhu dan kelembapan yang dihasilkan oleh sensor DHT11.

Hasil dari sensor tersebut nantinya akan menjadi objek pelatihan kita sampai akhir dari kelas IOT ini.

Tujuan

1. Peserta dapat memahami cara kerja dari DHT11 dalam menghasilkan nilai suhu dan kelembapan.

2. Peserta dapat memahami rangkaian dari DHT11 dan wemos.

Bahan-Bahan yang Digunakan

1. Wemos D1 Mini.

2. Kabel secukupnya.

3. DHT11.

4. Kabel Micro USB.

Langkah-Langkah Secara Umum

1. Rangkaialah rangkaian sesuai pada Gambar 6.

2. Pasang library pada arduino dengan nama library DHTesp.

3. Ketik koding yang tersedia pada sketch arduino.

4. Setelah selesai di ketik kodingnya, diunggah kodingnya.

5. Tunggu hingga selesai unggahannya, setelah selesai pengunggahannya, rangkaian dapat dijalankan.

Koding

#include "DHTesp.h"

DHTesp dht;

void setup() {

(15)

15

Serial.begin(115200);

dht.setup(D4, DHTesp::DHT11);

}

void loop() {

delay(dht.getMinimumSamplingPeriod());

float humidity = dht.getHumidity();

float temperature = dht.getTemperature();

Serial.print(“Humidity :”);

Serial.println(humidity);

Serial.print(“temperature :”);

Serial.println(temperature);

}

Penjelasan Koding

#include "DHTesp.h"

DHTesp dht;

#include “DHTesp.h” berguna untuk memasukkan library pemrograman dari DHT11 & DHT22 untuk esp8266 dan esp32. Sedangkan syntax DHTesp dht adalah kelas yang dibuat untuk mengoperasikan sensor DHT tersebut.

void setup() {

Serial.begin(115200);

dht.setup(D4, DHTesp::DHT11);

}

Untuk syntax Serial.begin(115200) berguna untuk mengatur baud rate antara perangkat sebesar 115200. Sedangkan, dht.setup(D4, DHTesp::DHT11) adalah syntax yang berfungsi untuk menyatakan bahwa pin sensor DHT11 dihubungkan ke pin wemos D4 dan DHTesp:DHT11 menyatakan bahwa sensor yang kita gunakan adalah DHT11.

void loop() {

delay(dht.getMinimumSamplingPeriod());

float humidity = dht.getHumidity();

float temperature = dht.getTemperature();

Serial.print(“Humidity :”);

Serial.println(humidity);

Serial.print(“temperature :”);

Serial.println(temperature);

}

(16)

16

delay(dht.getMinimumSamplingPeriod()); berguna untuk memberikan nilai delay kepada wemos agar ada jeda waktu pembacaan sensor. Syntax float humidity = dht.getHumidity(); & float temperature = dht.getTemperature(); berguna untuk membentuk variabel bilangan pecahan untuk menampung nilai sensor humidity dan temperature. Sedangkan beberapa syntax terakhir berguna untuk mencetak nilai yang disimpan oleh variabel humidity dan temperature.

Hasil Penerapan Koding

Gambar 8 Hasil Output DHT11

Gambbar 5 di atas adalah hasil pembacaan dari sensor DHT11, yang kemudian dicetak oleh wemos ke dalam serial monitor.

Materi 2.1.3 : LDR

Pada dasarnya, ada berbagai macam jenis sensor yang sensitif terhadap perubahan intensitas cahaya, dimulai dari foto dioda, LDR, dll. Di pelatihan ini, kita menggunakan LDR untuk membaca intensitas cahaya di sekeliling kita. Cahaya yang masuk ke dalam sensor nantinya akan dikonversi kedalam data digital.

Sensor LDR ini menggunakan pin masukan analog, berbeda dari perangkat-perangat sebelumnya yang menggunakan pin masukan digital.

Tujuan

1. Peserta dapat memahami cara kerja dari LDR.

2. Peserta dapat memahami rangkaian LDR dengan wemos D1 Mini.

(17)

17

Bahan-Bahan yang Digunakan

1. Wemos D1 Mini.

2. Kabel secukupnya.

3. DHT11.

4. Kabel Micro USB.

Langkah-Langkah Secara Umum

1. Rangkaialah rangkaian sesuai pada Gambar 6.

2. Ketik koding yang tersedia pada sketch arduino.

3. Setelah selesai di ketik kodingnya, diunggah kodingnya.

4. Tunggu hingga selesai unggahannya, setelah selesai pengunggahannya, rangkaian dapat dijalankan.

Koding

#define LDR_PIN A0 float sensorValue = 0;

void setup() {

Serial.begin(115200);

}

void loop() {

sensorValue = analogRead(LDR_PIN);

sensorValue = (sensorValue / 1023) * 5000;

Serial.print("Sensor value LDR : ");

Serial.println(sensorValue);

delay(1000);

}

Penjelasan Koding

#define LDR_PIN A0

float sensorValue = 0;

Pada syntax koding di atas, kita membuat konstanta A0 bernama LDR_PIN dan membuat variabel sensorValue yang berupa jenis bilangan pecahan dan memiliki nilai awal 0.

sensorValue = analogRead(LDR_PIN);

sensorValue = (sensorValue / 1023) * 5000;

Serial.print("Sensor value LDR : ");

Serial.println(sensorValue);

(18)

18

analogRead(LDR_PIN); berguna untuk membaca masukan analog dari pin LDR_PIN, yang kemudian disimpan ke dalam sensorValue. (sensorValue / 1023) * 5000; adalah sebuah rumus untuk mengonversi nilai mentah sensorValue untuk menjadi satuan mikrovolt (tegangan). Setelah dikonversi, nilai sensorValue ditampilkan kedalam serial monitor.

Hasil Penerapan Koding

Gambar 9 Hasil Keluaran LDR

Gambar di atas adalah hasil keluaran dari LDR, yang dimana nilai mentah dari sensornya diubah secara matematis ke dalam satuan mikro volt.

MATERI 2.2 : OUTPUT

Pada subbab ini, kita akan mempelajari bagaimana output bekerja dalam Wemos D1 Mini. Ada berbagai macam jenis keluaran yang dapat kita gunakan seperti motor DC, buzzer, servo, dll. Adapaun perangkat keluaran yang kita gunakan dalam pelatihan ini adalah LED. Kenapa hanya menggunakan LED ? karena LED adalah perangkat sederhana dalam rangkaian dan penggunaan serta pada intinya pin keluaran digital hanya menghasilkan nilai tinggi atau rendah sehingga lebih mudah dipresentasikan dalam bentuk cahaya.

Materi 2.2.1 : LED

LED (Light Emitting Diode) adalah sebuah dioda yang dapat memendarkan cahaya jika diberikan arus.

LED terdapat berbagai macam jenis, yaitu white LED, RGB LED, infrared LED, dll. Pada pelatihan ini, kita menggunakan dua buah LED sebagai keluaran dari wemos D1 Mini. LED yang kita gunakan pun berjenis RGB LED.

(19)

19

Tujuan

1. Peserta dapat memahami cara kerja dari LDR.

2. Peserta dapat memahami rangkaian LDR dengan wemos D1 Mini.

Bahan-Bahan yang Digunakan

1. Wemos D1 Mini.

2. Kabel secukupnya.

3. DHT11.

4. Kabel Micro USB.

Langkah-Langkah Secara Umum

1. Rangkaialah rangkaian sesuai pada Gambar 6.

2. Ketik koding yang tersedia pada sketch arduino.

3. Setelah selesai di ketik kodingnya, diunggah kodingnya.

4. Tunggu hingga selesai unggahannya, setelah selesai pengunggahannya, rangkaian dapat dijalankan.

Koding

#define LED_PIN1 D3

#define LED_PIN2 D1

void setup() {

pinMode(LED_PIN1, OUTPUT);

pinMode(LED_PIN2, OUTPUT);

}

void loop() {

digitalWrite(LED_PIN1, HIGH);

digitalWrite(LED_PIN2, HIGH);

delay(1000);

digitalWrite(LED_PIN1, LOW);

digitalWrite(LED_PIN2, LOW);

delay(1000);

}

Penjelasan Koding

#define LED_PIN1 D3

#define LED_PIN2 D1

Pada syntax koding di atas, kita memberi nama kepada pin yang digunakan sebagai keluaran LED.

pinMode(LED_PIN1, OUTPUT);

(20)

20

pinMode(LED_PIN2, OUTPUT);

pinMode berguna untuk menyetel jenis pin yang akan digunakan. Pada kasus ini, pin yang digunakan akan disetel menjadi pin OUTPUT.

digitalWrite(LED_PIN1, HIGH);

digitalWrite(LED_PIN2, HIGH);

delay(1000);

digitalWrite(LED_PIN1, LOW);

digitalWrite(LED_PIN2, LOW);

delay(1000);

digitalWrite () merupakan sebuah prosedur untuk mengirimkan perintah kepada pin yang dituju.

Perintah yang diberikan merupakan data digital yang hanya memiliki dua nilai, yaitu HIGH dan LOW. HIGH berarti akan memberikan tegangan 3.3V sedangkan LOW akan memberikan ground kepada pin tersebut.

sehingga kalau diterjemahkan ke dalam perangkat LED. HIGH berarti menyala sedangkan LOW berarti mati.

Dimana setiap rentang mati dan hidupnya LED diberikan jeda waktu 1000 ms atau 1 detik.

Hasil Penerapan Koding

Kedua lampu led yang dirangkaian dan dihubungkan ke dalam wemos, akan menyala bersama-sama dengan rentang waktu satu detik, kemudian mati bersama-sama dengan rentang waktu satu detik dan begitupun seterusnya, hingga aliran daya ke wemos diputuskan.

(21)

21

MATERI 3 : DASAR KONEKSI WIFI

Pada bab kali ini, kita akan membahas mengenai dasar koneksi WiFi ke dalam jaringan. Baik jaringan lokal maupun jaringan internet. Ada dua skenario yang akan kita bahas kedepannya. Skenario pertama, kita menjadikan wemos sebagai STA atau station, yang dimana wemos akan dihubungkan ke router atau access point. Sedangkan skenario kedua, kita menjadikan wemos sebagai access point, yang dimana wemos akan bekerja selayaknya router, bertindak sebagai pengatur jaringan yang terhubung dengannya.

MATERI 3.1 : WEMOS SEBAGAI STA

Gambar 10 Wemos Sebagai Station.

Wemos sebagai STA memiliki beberapa fitur yang unik untuk memfasilitasi pengaturan koneksi ke router. Fitur unik tersebut antara lain :

1. Ketika jaringan WiFi wemos terputus dari routernya, wemos akan berusaha menghubungkan kembali secara otomatis ke router yang terakhir kali terkoneksi dengannya. Ini disebabkan wemos dapat menyimpan ssid dan password yang telah digunakan terakhir kali sehingga menjaga wemos dapat menjaga koneksi jaringan agar tetap stabil.

2. Di suatu area yang memiliki beberapa koneksi WiFi, kita dapat menyimpan beberapa ssid dan password ke dalam wemos dan memberikan pilihan kepada wemos untuk mengatur sendiri ke router mana yang akan ia hubungkan dengan mempertimbangkan kekuatan sinyal dari WiFi router tersebut.

(22)

22

Pada subbab ini, kita akan mencoba mengoperasikan wemos sebagai STA dengan beberapa skenario, yakni : pemindaian WiFI sekitar dan menampilkan berapa kekuatan sinyalnya, memberikan pilihan kepada wemos untuk memilih koneksi terbaik, dan menghubungkan wemos ke internet dan mengakses website.

Materi 3.1.1 : Memindai WiFi sekitar

Pada pelatihan ini, kita akan mengoperasikan wemos sebagai STA agar dapat memindai WiFi sekitar dan menampilkan WiFi yang terdeteksi sembari menghitung berapa kekuatan sinyal untuk setiap WiFI yang diterima oleh wemos tersebut.

Tujuan

1. Peserta dapat memahami cara kerja wemos dalam pemindaian WiFi.

2. Peserta dapat memahami rincian detail WiFi yang ditampilkan oleh wemos dalam serial monitor.

Bahan-Bahan yang Digunakan

1. Wemos D1 Mini.

2. Kabel secukupnya.

3. DHT11.

4. LDR.

5. Satu buah push button.

6. Dua buah LED.

7. Kabel Micro USB.

Langkah-Langkah Secara Umum

1. Rangkaialah sesuai gambar rangkaian materi 2.1 INPUT.

2. Ketik koding yang tersedia pada sketch arduino.

3. Setelah selesai di ketik kodingnya, diunggah kodingnya.

4. Tunggu hingga selesai unggahannya, setelah selesai pengunggahannya, rangkaian dapat dijalankan.

5. Buka serial monitor untuk melihat hasilnya.

Koding

#include "ESP8266WiFi.h"

void setup() {

Serial.begin(115200);

WiFi.mode(WIFI_STA);

WiFi.disconnect();

delay(100);

(23)

23

Serial.println("Setup done");

}

void loop() {

Serial.println("scan start");

int n = WiFi.scanNetworks();

Serial.println("scan done");

if (n == 0) {

Serial.println("no networks found");

} else {

Serial.print(n);

Serial.println(" networks found");

for (int i = 0; i < n; ++i) { Serial.print(i + 1);

Serial.print(": ");

Serial.print(WiFi.SSID(i));

Serial.print(" (");

Serial.print(WiFi.RSSI(i));

Serial.print(")");

Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*");

delay(10);

} }

Serial.println("");

delay(5000);

}

Penjelasan Koding

#include "ESP8266WiFi.h"

Library di atas kita masukkan ke dalam sketch karena memang perangkat yang kita gunakan dasarnya adalah ESP8266 hanya saja diproduksi oleh wemos. Sejatinya kita bisa menggunakan library dasar untuk modul ESP8266, yakni #include <WiFi.h>. Namun, dibeberapa perangkat, penerapan library dasar ke dalam perangkat wemos atau dev kit esp8266 dapat menyebabkan dev kit tersebut me-reboot terus menerus.

Sehingga dibutuhkan library khusus untuk menangani dev kit yang akan kita gunakan.

void setup() {

Serial.begin(115200);

WiFi.mode(WIFI_STA);

WiFi.disconnect();

delay(100);

Serial.println("Setup done");

}

Pada syntax koding di atas, kita menyetel wemos untuk menjadi station yang nantinya akan dihubungkan ke router. Sedangkan WiFi.disconnect() berguna untuk memutuskan hubungan dari router

(24)

24

yang terhubung sebelumnya. Lalu diberikan jeda selama 100 ms untuk memastikan wemos benar-benar terputus dengan jaringan yang ada.

Serial.println("scan start");

// WiFi.scanNetworks will return the number of networks found int n = WiFi.scanNetworks();

Serial.println("scan done");

if (n == 0) {

Serial.println("no networks found");

}

Kita mulai masuk untuk melakukan pemindaian jaringan WiFi disekitar wemos. Nantinya jumlah hasil pemindaian jaringan WiFi akan dimasukkan ke dalam variabel n. Jika tidak ada jaringan disekitaran wemos maka wemos akan mencetak pernyataan di serial monitor “no networks found”.

else {

Serial.print(n);

Serial.println(" networks found");

for (int i = 0; i < n; ++i) { Serial.print(i + 1);

Serial.print(": ");

Serial.print(WiFi.SSID(i));

Serial.print(" (");

Serial.print(WiFi.RSSI(i));

Serial.print(")");

Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*");

delay(10);

}

Pada koding ini, jika ditemukan satu atau lebih jaringan WiFi di sekitaran wemos. Maka wemos akan mencetak nama jaringan tersebut dan kekuatan sinyal yang diterima oleh wemos untuk masing-masing jaringan WiFi. Perulangan for digunakan untuk melakukan perulangan cetak identitas WiFi, yang dimana jumlah pencetakan dipengaruhi oleh variabel n. WiFi.SSID(i) merupakan syntax koding yang berguna untuk menampilkan nama jaringannya, kemudian karena berbentuk array sehingga didalam kurungnya diberikan indicator i untuk mencetak nama jaringan pada indeks yang ditunjuk.

Sedangkan WiFi.RSSI(i) menunjukkan kekuatan sinyal yang dipancarkan oleh jaringan WiFi dan diterima oleh wemos. Kemudian pada syntax koding WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*", ini merupakan syntax koding ternary, yang dimana bentuk sederhana dari if else. Ketika jaringan WiFi yang terdeteksi memiliki enkripsi, maka nanti akan dicetak tanda “*” setelah mencetak kekuatan dari WiFi tersebut. Lalu diberikan delay 10ms untuk jeda pemindaian.

Hasil Penerapan Koding

(25)

25

Gambar 11 Hasil Penerapan Koding Pemindai WiFi

Pada gambar di atas, setelah diterapkan koding pemindaian WiFi. Wemos akan memindai area seklilingnya untuk mencari WiFi. Pemindaian dilakukan untuk mengidentifikasi nama SSID dan kekuatan sinyal dari jaringan WiFi tersebut. ketika sudah dilakukan pemindaian, wemos akan mencetak hasilnya ke dalam serial monitor.

Materi 3.1.2 : Koneksi WEMOS dengan jaringan WiFi

Pada materi kali ini, kita akan membahas bagaimana cara membuat wemos agar dapat terkoneksi ke dalam jaringan WiFi. Skenario yang kita gunakan adalah multiWiFi, yang dimana nanti kita akan menyimpan beberapa nama jaringan dan password dari WiFi tersebut. Lalu, wemos akan memilih dari detail jaringan yang kita berikan, mana dari jaringan tersebut yang memiliki sinyal terkuat. Ketika ditemukan sinyal tersebut, maka wemos akan menghubungkan ke jaringan WiFi tersebut.

Tujuan

1. Peserta memahami konsep koneksi antara jaringan WiFi dan wemos.

2. Peserta memahami cara mengoneksikan Wifi dan jaringan wemos.

Bahan-Bahan yang Digunakan

1. Wemos D1 Mini.

2. Kabel secukupnya.

3. DHT11.

4. LDR.

5. Satu buah push button.

(26)

26

6. Dua buah LED.

7. Kabel Micro USB.

Langkah-Langkah secara Umum

1. Rangkaialah sesuai gambar rangkaian materi 2.1 INPUT.

2. Ketik koding yang tersedia pada sketch arduino.

3. Setelah selesai di ketik kodingnya, diunggah kodingnya.

4. Tunggu hingga selesai unggahannya, setelah selesai pengunggahannya, rangkaian dapat dijalankan.

5. Buka serial monitor untuk melihat hasilnya.

Koding

#include <ESP8266WiFi.h>

#include <ESP8266WiFiMulti.h>

ESP8266WiFiMulti wifiMulti;

void setup() {

Serial.begin(115200);

WiFi.mode(WIFI_STA);

wifiMulti.addAP("BGPLaptop", "bagusgilang");

//wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2");

//wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3");

Serial.println("Connecting Wifi...");

}

void loop() {

if (wifiMulti.run() == WL_CONNECTED) { Serial.println("WiFi connected");

Serial.print("SSID: ");

Serial.println(WiFi.SSID());

Serial.print("IP Address: ");

Serial.println(WiFi.localIP());

Serial.println();

}

delay(5000);

}

(27)

27

Penjelasan Koding

#include <ESP8266WiFi.h>

#include <ESP8266WiFiMulti.h>

ESP8266WiFiMulti wifiMulti;

Kita menggunakan dua jenis library, baris pertama untuk koneksi WiFi wemos ke jaringan.

Sedangkan baris kedua untuk scenario koneksi pemilihan jaringan terbaik dari beberapa detail WiFi yang diberikan. Untuk dapat memilih jaringan WiFi terbaik, kita membuat kelas yang bernama wifiMulti, yang nantinya digunakan untuk menyimpan beberapa jaringan yang ada.

Serial.begin(115200);

WiFi.mode(WIFI_STA);

wifiMulti.addAP("ssid_from_AP_1", "your_password_for_AP_1");

wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2");

wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3");

kita menjadikan wemos untuk bekerja dalam mode station. Kemudian kita menambahkan detail jaringan dari nama WiFi hingga password WiFi tersebut.

if (wifiMulti.run() == WL_CONNECTED) { Serial.println("WiFi connected");

Serial.print("SSID: ");

Serial.println(WiFi.SSID);

Serial.print("IP Address: ");

Serial.println(WiFi.localIP());

}

Dalam syntax ini, kita mengoneksikan wemos ke dalam jaringan WiFi. Wemos akan memilih salah satu jaringan dengan kekuatan WiFi terbaik dari beberapa jaringan yang kita masukkan sebelumnya. Setelah terkoneksi dengan salah satu jaringan WiFi terbaik, maka kita memberikan perintah ke wemos untuk mencetak IP Address dan SSID yang diterima oleh wemos dari router yang terhubung.

(28)

28

Hasil Penerapan Koding

Gambar 12 Hasil Koneksi dengan Access Point

Pada gambar di atas, ditunjukkan hasil koneksi wemos ke jaringan WiFi yang ditentukan. Ketika telah terhubung, wemos akan mencetak alamat IP yang diberikan oleh router ke wemos tersebut.

Materi 3.1.3 : Koneksi Wemos ke website

Pada materi kali ini, setelah kita mengoneksikan wemos ke dalam jaringan router, kita akan mencoba menghubungkan wemos ke website. Wemos akan kita perintahkan untuk berkomunikasi dengan website tersebut, dengan mengirimkan perintah ke server dan menunggu balasan dari server tersebut. Lalu, wemos akan mencetak balasan dari website yang kita hubungkan dan kirimkan perintah.

Tujuan

1. Peseta dapat memahami cara kerja wemos mengakses website internet.

(29)

29

2. Peserta dapat memahami langkah-langkah wemos dalam mengakses website.

Bahan-Bahan yang Digunakan

1. Wemos D1 Mini.

2. Kabel secukupnya.

3. DHT11.

4. LDR.

5. Satu buah push button.

6. Dua buah LED.

7. Kabel Micro USB.

Langkah-Langkah secara Umum

1. Rangkaialah sesuai gambar rangkaian Materi 2.1 INPUT.

2. Ketik koding yang tersedia pada sketch arduino.

3. Setelah selesai di ketik kodingnya, diunggah kodingnya.

4. Tunggu hingga selesai unggahannya, setelah selesai pengunggahannya, rangkaian dapat dijalankan.

5. Buka serial monitor untuk melihat hasilnya.

Koding

#include <ESP8266WiFi.h>

#ifndef STASSID

#define STASSID "BGPLaptop"

#define STAPSK "bagusgilang"

#endif

const char* ssid = STASSID;

const char* password = STAPSK;

const char* host = "djxmmx.net";

const uint16_t port = 17;

void setup() {

Serial.begin(115200);

Serial.print("Connecting to ");

Serial.println(ssid);

WiFi.mode(WIFI_STA);

WiFi.begin(ssid, password);

(30)

30

while (WiFi.status() != WL_CONNECTED) { delay(500);

Serial.print(".");

}

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

}

void loop() {

Serial.print("connecting to ");

Serial.print(host);

Serial.print(':');

Serial.println(port);

WiFiClient client;

if (!client.connect(host, port)) { Serial.println("connection failed");

delay(5000);

return;

}

Serial.println("sending data to server");

if (client.connected()) {

client.println("hello from ESP8266");

}

unsigned long timeout = millis();

while (client.available() == 0) { if (millis() - timeout > 5000) {

Serial.println(">>> Client Timeout !");

client.stop();

delay(10000);

return;

} }

Serial.println("receiving from remote server");

while (client.available()) {

char ch = static_cast<char>(client.read());

Serial.print(ch);

}

Serial.println();

Serial.println("closing connection");

client.stop();

(31)

31

delay(10000);

}

Penjelasan Koding

#include <ESP8266WiFi.h>

#ifndef STASSID

#define STASSID "BGPLaptop"

#define STAPSK "bagusgilang"

#endif

const char* ssid = STASSID;

const char* password = STAPSK;

const char* host = "djxmmx.net";

const uint16_t port = 17;

Pada koding di atas, kita akan mengoneksikan wemos ke jaringan WiFi yang telah ditentukan.

Dengan mengisi ssid dan password pada salah satu jaringan WiFi yang tersedia. Sedangkan untuk website yang kita akan akses pun diisikan dan disimpan dalam variabel khusus. Begitupun port yang akan digunakan untuk komunikasi antara client dan server, sudah kita tentukan di awal.

Serial.begin(115200);

Serial.print("Connecting to ");

Serial.println(ssid);

WiFi.mode(WIFI_STA);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) { delay(500);

Serial.print(".");

}

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

Setelah kita menentukan website dan WiFi yang akan dikoneksikan, kita akan menghubungkan wemos ke WiFi yang tersedia. Dalam kasus ini, kita hanya memberikan satu detail jaringan WiFi, sehingga tidak memberikan pilihan kepada wemos diantara sekian banyak jaringan WiFi yang tersedia. Sembari menunggu wemos terkoneksi dengan jaringan WiFi, maka wemos akan mencetak “.” Dengan jeda per 500 ms. Jika wemos telah terkoneksi dengan WiFi yang ditentukan, maka wemos akan mencetak alamat IP yang diberikan oleh router.

(32)

32

Serial.print("connecting to ");

Serial.print(host);

Serial.print(':');

Serial.println(port);

WiFiClient client;

if (!client.connect(host, port)) { Serial.println("connection failed");

delay(5000);

return;

}

Koding di atas berfungsi untuk memerintah wemos untuk mencetak pernyataan koneksi ke server yang dituju dan ditampilkan di serial monitor. Kemudian, wemos akan menghubungkan ke server. Jika tidak terhubung, maka wemos akan mencetak pernyataan “connection failed” pada serial monitor dan syntax return berguna untuk kembali ke awal lagi untuk mencoba menghubungkan ulang ke website yang telah ditentukan.

Serial.println("sending data to server");

if (client.connected()) {

client.println("hello from ESP8266");

}

unsigned long timeout = millis();

while (client.available() == 0) { if (millis() - timeout > 5000) {

Serial.println(">>> Client Timeout !");

client.stop();

delay(10000);

return;

} }

Pada koding ini, ketika wemos sudah terhubung dengan host. Wemos akan mengirimkan pernyataan

“hello from esp8266” ke server. Kemudian menunggu balasan dari server yang dituju selama lima menit. Jika tidak ada balasan dari server, maka wemos akan memutuskan hubungan ke server dan menjalankan delay selama 10 detik, kemudian menjalankan return untuk kembali ke awal koding.

Serial.println("receiving from remote server");

while (client.available()) {

char ch = static_cast<char>(client.read());

Serial.print(ch);

}

Serial.println();

Serial.println("closing connection");

client.stop();

(33)

33

delay(10000);

ketika terdapat balasan dari server, maka wemos akan menerima balasan tersebut, kemudian mencetak apa yang diberikan oleh server ke dalam serial monitor. Setelah mencetak semua apa yang diberikan oleh server. Wemos akan mengakhiri koneksi dengan server yang dituju dan menjalankan delay selama 10 detik.

Hasil Penerapan Koding

Gambar 13 Hasil Koneksi ke Website

Pada gambar 11, wemos dikoneksikan ke WiFi yang memiliki jaringan internet. Kemudian wemos dikoneksikan ke alamat website djxmmx.net. Hasil dari koneksi alamat website tersebut, server akan mengirimkan quote kepada wemos. Kemudian wemos akan menampilkan quotenya ke dalam serial monitor.

MATERI 3.2 : WEMOS SEBAGAI ACCESS POINT

Pada subbab kali ini, kita akan membahas skenario mengenai wemos sebagai soft access point.

Sebelumnya, kita harus memahami dulu apa itu Acces point. Access point adalah sebuah perangkat yang memberikan akses jaringan WiFi kepada perangkat lainnya dan menghubungkan mereka antara satu sama lain. Keluarga esp8266 dapat menyediakan fungsi yang sama dengan access point, namun dalam ranah mereka hal itu disebut soft access point. Adapun maksimal jumlah perangkat yang dapat terhubung dengan access point wemos adalah lima perangkat.

(34)

34

Gambar 14 Wemos sebagai Access Point.

Tujuan

1. Peserta memahami cara kerja dari soft access point.

2. Peserta dapat menyetel wemos menjadi soft access point.

3. Peserta dapat menghubungkan perangkat ke access point dan mengakses alamat IP nya.

Bahan-Bahan yang Digunakan

1. Wemos D1 Mini.

2. Kabel secukupnya.

3. DHT11.

4. LDR.

5. Satu buah push button.

6. Dua buah LED.

7. Kabel Micro USB.

Langkah-Langkah secara Umum

1. Rangkaialah sesuai gambar rangkaian Materi 2.1 INPUT.

2. Ketik koding yang tersedia pada sketch arduino.

3. Setelah selesai di ketik kodingnya, diunggah kodingnya.

4. Tunggu hingga selesai unggahannya, setelah selesai pengunggahannya, rangkaian dapat dijalankan.

5. Buka serial monitor untuk melihat hasilnya.

(35)

35

Koding

#include <ESP8266WiFi.h>

#include <WiFiClient.h>

#include <ESP8266WebServer.h>

#ifndef APSSID

#define APSSID "BagusIoT"

#define APPSK "bagusgilang"

#endif

const char *ssid = APSSID;

const char *password = APPSK;

ESP8266WebServer server(80);

void handleRoot() {

server.send(200, "text/html", "<h1>You are connected\nBy Bagus</h1>");

}

void setup() { delay(1000);

Serial.begin(115200);

Serial.println();

Serial.print("Configuring access point...");

WiFi.softAP(ssid, password);

IPAddress myIP = WiFi.softAPIP();

Serial.print("AP IP address: ");

Serial.println(myIP);

server.on("/", handleRoot);

server.begin();

Serial.println("HTTP server started");

}

void loop() {

server.handleClient();

}

Penjelasan Koding

#include <ESP8266WiFi.h>

#include <WiFiClient.h>

#include <ESP8266WebServer.h>

#ifndef APSSID

(36)

36

#define APSSID "BagusIoT"

#define APPSK "bagusgilang"

#endif

const char *ssid = APSSID;

const char *password = APPSK;

ESP8266WebServer server(80);

Ada beberapa library yang kita tambahkan dalam koding ini, seperti #include

<ESP8266WebServer.h> yang berfungsi untuk menjalankan webserver pada wemos. #include <WiFiClient.h>

berfungsi untuk komunikasi wemos sebagai client dan menangani client. Karena skenario sekarang kita menjadikan wemos sebagai access point, maka kita mempersiapkan nama WiFi dan password untuk menjaga jaringan WiFi yang kita buat. Lalu, webserver yang akan kita buat, nantinya akan diakses melalui port ke 80.

void handleRoot() {

server.send(200, "text/html", "<h1>You are connected\nBy Bagus</h1>");

}

Prosedur ini berfungsi ketika terdapat client yang terkoneksi ke webserver. Kemudian, client melakukan HTTP request ke alamat server. Server wemos akan mengirimkan html ke client sesuai dengan yang kita perintahkan.

WiFi.softAP(ssid, password);

IPAddress myIP = WiFi.softAPIP();

Serial.print("AP IP address: ");

Serial.println(myIP);

server.on("/", handleRoot);

server.begin();

Serial.println("HTTP server started");

Pada syntax pertama, kita menyetel nama dan password jaringan yang akan kita buat. Lalu, setelah disetel, kita menampilkan alamat IP dari routernya. Pada syntax server.on(“/”, handleRoot) akan menangani client yang terhubung dan menjalankan prosedur handleRoot. Lalu syntax selanjutnya akan menjalankan server agar dapat diakses.

void loop() {

server.handleClient();

}

Pada prosedur void loop() akan dijalankan prosedur handleClient pada server untuk membaca apakah ada client yang terhubung ke server.

Hasil Penerapan Koding

(37)

37

Gambar 15 HTTP Server Dijalankan

Gambar 16 Mengakses Alamat Wemos

Pada gambar 12 dan gambar 13, kita menyetel wemos agar menjadi access point dan menunjukkan alamat IP-nya. Kemudian membuat webserver sederhana yang nantinya ketika di akses oleh client di browser mereka, maka akan menampilkan text “You are connected By Bagus”.

(38)

38

MATERI 4 : KOMUNIKASI ANTARA PERANGKAT WEMOS

Pada bab ini, kita akan membahas mengenai komunikasi antara perangkat wemos dengan menggunakan dua macam protokol, yaitu TCP dan UDP. Sebelum kita masuk lebih dalam ke arah komunikasi dua perangkat ini. Kita harus memahami dulu apa yang dimaksud oleh komunikasi TCP dan UDP agar kita dapat memahami prinsip kerja dari keduanya. Hal ini dikarenakan komunikasi TCP dan UDP antara perangkat wemos tidak jauh berbeda dari segi teknis dan protokol dengan komunikasi antara perangkat komputer.

TCP (Tranmission Control Protocol) adalah sebuah protokol yang berorientasi dengan koneksi. TCP akan melakukan pengecekan galat dari setiap komunikasi yang terhubung dan menjamin data yang terkirim akan sesuai dengan data aslinya. Sedangkan UDP (User Datagram Protocol) adalah protokol komunikasi yang hampir mirip dengan TCP. Hanya saja di dalam UDP tidak ada pengecekan error dan prosedur perbaikan data ketika data yang diterima tidak sesuai dengan data aslinya.

TCP sangat handal dalam pengiriman data, namun jika dibandingkan dengan UDP, kecepatan transfer data TCP lebih lambat dari UDP, dikarenakan dalam TCP banyak protokol yang harus dijalankan untuk menjamin data yang sampai sesuai dengan data aslinya. Sebelum melakukan pengiriman data ke perangkat lain, TCP akan membangun terlebih dahulu komunikasi antara server dan client. Ketika sudah terbangun jembatan komunikasi, maka perangkat dapat mengirimkan data satu sama lain. Lain hal dengan UDP, yang tidak perlu membangun jembatan koneksi, dan langsung mengirimkan data tanpa memperdulikan data yang sampai sesuai dengan data aslinya atau tidak.

TCP lebih banyak digunakan pada world wide web, secure shell, file transfer protocol, email.

Sedangkan UDP lebih banyak digunakan pada VPN, streaming video, online game, live broadcast, domain name system, voice over internet protocol, trivial file transfer protocol.

Gambar 17 Komunikasi antara ESP8266.

(39)

39

MATERI 4.1 : KOMUNIKASI TCP

Pada subbab ini, kita akan menjalankan skenario komunikasi TCP antara dua perangkat wemos, yang dimana salah satu perangkat wemos akan menjadi server dan satunya akan menjadi client. Komunikasi yang dilakukan nantinya tidak terkait dengan bahasa pemrograman PHP dan HTML. Jadi yang kita bahas kali ini hanyalah protokol komunikasi TCP/IP antara perangkat wemos. Antara wemos tersebut nantinya akan bertukar data antara satu sama lain. Client akan mengirimkan perintah dan server akan membalas perintah tersebut.

Tujuan

1. Peserta dapat memahami konsep kerja dari TCP IP.

2. Peserta dapat memahami komunikasi antara wemos dengan menggunakan protokol TCP IP.

Bahan-Bahan yang Digunakan

1. Satu buah Wemos D1 Mini.

2. Satu buah wemos lolin32.

3. Kabel secukupnya.

4. DHT11.

5. LDR.

6. Satu buah push button.

7. Dua buah LED.

8. Kabel Micro USB.

Langkah-Langkah secara Umum

1. Rangkaialah sesuai Gambar 18.

2. Ketik koding yang tersedia pada sketch arduino.

3. Setelah selesai di ketik kodingnya, diunggah kodingnya.

4. Tunggu hingga selesai unggahannya, setelah selesai pengunggahannya, rangkaian dapat dijalankan.

5. Buka serial monitor untuk melihat hasilnya.

Gambar Rangkaian

(40)

40

Gambar 18 Komunikasi Antara Perangkat Wemos dengan TCP IP

Koding

A. Koding Server Wemos D1 Mini

#include <ESP8266WiFi.h>

#include <WiFiClient.h>

char ssid[] = "BGPLaptop";

char pass[] = "bagusgilang";

WiFiServer server(80);

IPAddress ip(192, 168, 137, 80);

IPAddress gateway(192, 168, 137, 1);

IPAddress subnet(255, 255, 255, 0);

void setup() {

Serial.begin(115200);

WiFi.config(ip, gateway, subnet);

WiFi.begin(ssid, pass);

while (WiFi.status() != WL_CONNECTED) { Serial.print(".");

delay(500);

}

server.begin();

Serial.print("IP : ");

Serial.println(WiFi.localIP());

Serial.println();

}

void loop () {

WiFiClient client = server.available();

if (client) {

if (client.connected()) {

(41)

41

Serial.println(".");

String request = client.readStringUntil('\r');

Serial.print("From client: ");

Serial.println(request);

Serial.print("IP : ");

Serial.println(client.remoteIP());

client.flush();

client.println("Hi client! No, I am listening.\r");

}

client.stop();

} }

B. Koding Client Wemos Lolin32

#include <ESP8266WiFi.h

#include <WiFiClient.h>

char ssid[] = "BGPLaptop";

char pass[] = "bagusgilang";

IPAddress server(192,168,0,80);

WiFiClient client;

void setup() {

Serial.begin(115200);

WiFi.begin(ssid, pass);

while (WiFi.status() != WL_CONNECTED) { Serial.print(".");

delay(500);

}

Serial.print("IP : ");

Serial.println(WiFi.localIP());

Serial.println();

}

void loop () {

client.connect(server, 80);

Serial.println(".");

client.println("Hello server! Are you sleeping?\r");

String answer = client.readStringUntil('\r');

Serial.println("from server: " + answer);

client.stop();

delay(2000);

}

Penjelasan Koding

(42)

42

A. Koding Server Wemos D1 mini

#include <ESP8266WiFi.h>

#include <WiFiClient.h>

char ssid[] = "BGPLaptop";

char pass[] = "bagusgilang";

WiFiServer server(80);

IPAddress ip(192, 168, 137, 80);

IPAddress gateway(192, 168, 137, 1);

IPAddress subnet(255, 255, 255, 0);

Pada koding di atas, kita akan menyetel wemos yang akan dijadikan sebagai server untuk bekerja di port 80 (WiFiServer server(80)). Untuk memudahkan akses terhadap server, maka kita akan menyetel dari awal alamat IP, gateway, dan subnet mask-nya.

void setup() {

Serial.begin(115200);

WiFi.config(ip, gateway, subnet);

WiFi.begin(ssid, pass);

while (WiFi.status() != WL_CONNECTED) { Serial.print(".");

delay(500);

}

Kemudian, kita menghubungkan wemos ke server yang ada. Dalam skenario ini, kita menjalankan wemos sebagai station. Wemos juga kita konfigurasi agar ip, gateway, dan subnet-nya sesuai dengan yang kita tentukan di bagian koding sebelumnya (WiFi.config(ip, gateway, subnet);).

server.begin();

Serial.print("IP : ");

Serial.println(WiFi.localIP());

}

Setelah kita menghubungkan wemos dengan WiFi, maka langkah selanjutnya adalah menyalakan server-nya dan mencetak di serial monitor alamat IP-nya.

void loop () {

WiFiClient client = server.available();

if (client) {

if (client.connected()) { Serial.println(".");

String request = client.readStringUntil('\r');

Serial.print("From client: "); Serial.println(request);

Serial.print("IP : "); Serial.println(client.remoteIP());

client.flush();

client.println("Hi client! No, I am listening.\r");

}

client.stop();

}

(43)

43

}

Syntax koding di atas, akan membaca apakah ada client yang terhubung dengan server wemos. jika terhubung, maka server akan membaca masukkan dari client. Jika client memberikan masukan, maka akan dibalas oleh server sesuai dengan yang kita perintahkan dan juga server akan mencetak alamat IP dari client yang terhubung. Di akhir koding, setiap koneksi yang tersambung, akan diputuskan sehingga jika terdapat koneksi dari perangkat lain, perangkat yang lain tidak terblokir dengan sendirinya.

B. Koding Client Wemos Lolin32

#include <WiFi.h>

#include <WiFiClient.h>

char ssid[] = "BGPLaptop";

char pass[] = "bagusgilang";

IPAddress server(192,168,137,80);

WiFiClient client;

Pada koding di atas, kita memberikan informasi mengenai jaringan WiFi yang akan kita koneksikan dengan wemos. kemudian, kita membuat kelas dengan tipe IPAddress bernama server, yang berguna untuk akses menuju server. Dalam kelas server, kita memasukkan IP address server yang kita tuju. Lalu, kita juga membuat kelas bernama client dengan tipe WiFiClient yang berguna untuk mengatur komunikasi antara server dan client.

void setup() {

Serial.begin(115200);

WiFi.begin(ssid, pass);

while (WiFi.status() != WL_CONNECTED) { Serial.print(".");

delay(500);

}

Serial.print("IP : ");

Serial.println(WiFi.localIP());

}

Pada koding ini, kita mengoneksikan wemos client dengan jaringan WiFi. Setelah terkoneksi, kita mencetak alamat IP yang diberikan ke dalam serial monitor.

void loop () {

client.connect(server, 80);

Serial.println(".");

client.println("Hello server! Are you sleeping?\r");

String answer = client.readStringUntil('\r');

Serial.println("from server: " + answer);

client.stop();

delay(2000);

}

(44)

44

Pada koding client.connect(server, 80);, kita mengoneksikan wemos client ke wemos server. Setelah terkoneksi, kita akan mengirimkan perintah berupa kalimat “Hello Server! Are you sleeping?\r”. Setelah mengirimkan perintah tersebut, kita akan membaca apakah ada balasan dari server atau tidak. Balasan yang diterima nantinya akan di cetak ke dalam serial monitor. Setelah terjadi komunikasi antar client dan server, maka client akan memutuskan hubungan dengan server yang bersangkutan. Kemudian menjalankan tunda kerja selama dua detik.

Hasil Penerapan Koding

A. Koding Server

Gambar 19 Hasil komunikasi dari sudut pandang server.

Gambar 15 merupakan hasil komunikasi antara server dan client yang dimana pihak server mencetak apa yang dikirimkan oleh client.

B. Koding Client

(45)

45

Gambar 20 Hasil komunikasi antara server dan client dari sudut pandang client.

Gambar 16 merupakan hasil komunikasi antara client dan server. Pihak client akan menerima jawaban dari server setelah mengirimkan perintah kepadanya.

MATERI 4.2 : KOMUNIKASI UDP

Pada subbab kali ini, kita akan menjalankan skenario komunikasi antara perangkat wemos dengan protokol UDP. Sama seperti protokol TCP sebelumnya, kita tidak terikat dengan PHP dan HTML. Dalam skenario komunikasi UDP, tidak ada peran server dan client. Ini dikarenakan dalam UDP tidak diperlukan jembatan koneksi. Salah satu perangkat wemos hanya menyiarkan apa yang akan dikirimkan ke alamat IP yang dituju. Perangkat dengan alamat IP yang dituju akan mendengar apa yang dikrimkan oleh pengirimnya.

Konsekuensi yang harus dipahami dalam komunikasi UDP adalah karena tidak adanya pengecekan galat, maka bisa saja pesan yang sampai tidak sesuai dengan yang dikirimkan oleh pihak wemos pengirim.

Tujuan

1. Peserta dapat memahami komunikasi UDP antara perangkat.

2. Peserta dapat menjalankan skenario UDP antara perangkat wemos.

Bahan-Bahan yang Digunakan

1. Satu buah Wemos D1 Mini.

2. Satu buah wemos lolin32.

3. DHT11.

(46)

46

4. LDR.

5. Satu buah push button.

6. Dua buah LED.

7. Kabel Micro USB.

Langkah-Langkah secara Umum

1. Rangkaialah sesuai Gambar 18.

2. Ketik koding yang tersedia pada sketch arduino.

3. Setelah selesai di ketik kodingnya, diunggah kodingnya.

4. Tunggu hingga selesai unggahannya, setelah selesai pengunggahannya, rangkaian dapat dijalankan.

5. Buka serial monitor untuk melihat hasilnya.

Gambar Rangkaian

Gambar 21 Rangkaian komunikasi antara perangkat dengan protokol UDP

Koding

Terapkan koding di bawah ini, untuk semua wemos.

#include <ESP8266WiFi.h>

#include <WiFiUdp.h>

char *ssid = "TP-LINK_C65FAC";

const char *pass = "0987654321";

unsigned int localPort = 2000;

IPAddress SendIP(192, 168, 137, 255);

WiFiUDP udp;

char packetBuffer[9];

(47)

47

void setup(){

Serial.begin(115200);

Serial.println();

WiFi.begin(ssid, pass);

Serial.println();

while (WiFi.status() != WL_CONNECTED){

delay(500);

Serial.print(".");

}

Serial.println("");

Serial.print("Connected to ");

Serial.println(ssid);

Serial.print("IP Address: ");

Serial.println(WiFi.localIP());

Serial.println("Starting UDP");

udp.begin(localPort);

Serial.print("Local Port: ");

Serial.println(localPort);

}

void loop(){

int cb = udp.parsePacket();

if (!cb){

if (Serial.available() > 0){

udp.beginPacket(SendIP, 2000);

char a[1];

a[0] = char(Serial.read());

udp.write(a, 1);

udp.endPacket();

} } else{

udp.read(packetBuffer, 1);

Serial.print(packetBuffer);

delay(20);

} }

Penjelasan Koding

#include <ESP8266WiFi.h>

#include <WiFiUdp.h>

(48)

48

char *ssid = "TP-LINK_C65FAC";

const char *pass = "0987654321";

unsigned int localPort = 2000;

IPAddress SendIP(192, 168, 137, 255);

WiFiUDP udp;

char packetBuffer[9];

koding di atas berguna untuk memberikan detail jaringan WiFi yang akan dihubungkan. unsigned int localPort = 2000; adalah syntax untuk mensetel komunikasi UDP berjalan di port 2000. Kemudian di baris selanjutnya, kita menyatakan bahwa pesan yang kita kirimkan akan disiarkan ke seluruh alamat IP dari 192.168.137.0 sampai dengan 192.168.137.254. Sedangkan, packetBuffer[9] adalah variabel penyimpanan ketika kita menerima pesan dari wemos lain.

void setup() {

Serial.begin(115200);

Serial.println();

WiFi.begin(ssid, pass);

Serial.println("");

while (WiFi.status() != WL_CONNECTED) { delay(500);

Serial.print(".");

}

Serial.println("");

Serial.print("Connected to ");

Serial.println(ssid);

Serial.print("IP address: ");

Serial.println(WiFi.localIP());

Serial.println("Starting UDP");

udp.begin(localPort);

Serial.print("Local port: ");

Serial.println(localPort);

}

Syntax koding di atas akan menghubungkan wemos ke jaringan WiFi dan mencetak alamat IP yang diberikan oleh router. Lalu, wemos akan menjalankan fungsi komunikasi UDP dengan port yang telah ditentukan.

void loop() {

int cb = udp.parsePacket();

if (!cb){

if (Serial.available() > 0){

udp.beginPacket(SendIP, 2000);

char a[1];

(49)

49

a[0] = char(Serial.read());

udp.write(a, 1);

udp.endPacket();

} }

Udp.parserPacket() merupakan sebuah fungsi untuk membaca apakah ada paket data yang diterima oleh wemos atau tidak. Ketika tidak ada data yang diterima, maka wemos akan mengirimkan paket data yang telah ditentukan. udp.beginPacket(SendIP, 2000) adalah syntax yang berguna untuk tujuan pengiriman paket data dan port yang digunakan. Dalam skenario ini, kita akan mencoba mengirimkan data melalui serial monitor selayaknya applikasi percakapan yang sering kita gunakan. Maka dari itu, kita menjadikan serial monitor untuk membaca masukkan dari pesan yang akan dikirimkan. Dalam koding, hal tersebut diterjemahkan ke dalam a[0] = char(Serial.read()).

Setelah data dikirimkan melalui serial monitor, kita akan mengirimkan data melalui UDP per satu byte. Pengiriman tersebut akan dilakukan hingga jumlah paket data yang kita masukkan melalui serial monitor selesai. Sebagai contoh : jika kita mengirimkan “Hello”, maka wemos akan mengirimkan per satu huruf hingga huruf terakhir “o” dikirimkan. Setelah dikirimkan, maka nanti kita tutup paket data UDP-nya dengan syntax udp.endPacket() untuk memberitahukan ke pihak penerima bahwa itu adalah akhir dari paket datanya.

else {

udp.read(packetBuffer, 1);

Serial.print(packetBuffer);

delay(20);

} }

ketika wemos menerima paket data dari wemos lain, maka kita akan membaca paket data tersebut per satu byte dan mencetak data tersebut ke dalam serial monitor.

(50)

50

Hasil Penerapan Koding

Gambar 22 Komunikasi antara perangkat wemos melalui UDP skenario kesatu.

Gambar 23 Komunikasi antara perangkat wemos melalui UDP skenario kedua.

Gambar 22 dan Gambar 23 menunjukkan bahwa komunikasi antara dua perangkat wemos yang menggunakan UDP sangat tidak bisa diandalkan. Data yang dikirimkan antara keduanya tidak terkirim secara sempurna. Ada beberapa bagian data yang terhapus dan terkirim secara acak.

(51)

51

MATERI 5 : WEBSERVER

Pada bab kali ini, kita akan membahas mengenai penerapan webserver pada esp8266. Sebelum kita masuk lebih lanjut, kita harus memahami dulu apa yang dimaksud dengan webserver. Webserver adalah sebuah perangkat yang menyimpan, memproses dan mengirimkan halaman-halaman website kepada web client. Sedangkan web client hanyalah web browser saja yang bisa kita gunakan di smartphone ataupun laptop. Adapun komunikasi antara server dan client menggunakan protokol khusus, yakni HTTP (Hypertext Transfer Protocol). Pada protokol ini, client akan memulai komunikasi dengan meminta halaman website khusus atau jika yang diminta tidak ada, maka client akan menerima pesan error 404. Halaman-halaman website yang dikirimkan oleh server sebagian besar adalah dokumen HTML. Tabel di bawah ini merupakan daftar jenis respon yang diberikan oleh server untuk client dalam menjawab permintaan client.

Tabel 2 Kode Status Respon Server Kepada Client

Kode

Status Pengertian

200 OK: Permintaan client berhasil dijalankan

303 Lihat yang lain : biasa digunakan untuk mengalihkan ke alamat web yang lain, setelah melakukan permintaan POST sebagai contoh.

400 Permintaan buruk : server tidak mengerti apa yang diminta karena syntax-nya ada yang salah.

401 Tidak diizinkan: dibutuhkan izin pengguna untuk mengaksesnya.

403 Terlarang: server menolak permintaan meskipun ada izin pengguna.

404 Tidak ditemukan: permintaan alamant dari pengguna tidak ditemukan.

500 Terjadi galat internal pada server: server mengalami kondisi yang tidak diharapkan dan tidak dapat memenuhi permintaan client.

Skenario webserver yang kita gunakan adalah bertipe jaringan lokal dan untuk esp8266 akan dijadikan ke dalam mode station. Ada beberapa skenario yang akan kita bahas dari mulai dasar-dasar webster, kemudian client melakukan request, dan yang terakhir adalah auto-refresh web page.

(52)

52

MATERI 5.1 : DASAR-DASAR WEBSERVER PADA ESP8266

Pada subbab kali ini, kita akan membahas tentang dasar-dasar penerapan webserver pada ESP8266.

Pada umumnya, penerapan webserver pada ESP8266 tidak jauh berbeda dari penerapan ESP8266 pada server desktop. Hanya saja dalam ESP8266, kita tidak menggunakan php sebagai pemrograman backend, tetapi menggunakan bahasa C++ itu sendiri sebagai pemrograman backend yang berguna untuk mengatur jalannya webserver. Sedangkan untuk frontend, kita tetap menggunakan HTML beserta tambahannya seperti javascript. Pelatihan subbab ini, kita akan menjalankan webserver yang nantinya berguna untuk menampilkan nilai sensor LDR. Wemos akan membaca nilai sensor LDR dan kemudian mempublikasikannya di halaman website secara lokal.

Tujuan

1. Peserta memahami dasar-dasar dari webserver pada ESP8266.

2. Peserta dapat membangun website menggunakan ESP8266

Bahan-Bahan yang Digunakan

1. NodeMCU ESP8266.

2. Kabel secukupnya.

3. DHT11.

4. LDR.

5. Satu buah push button.

6. Dua buah LED.

7. Kabel Micro USB.

Langkah-Langkah secara Umum

1. Rangkaialah sesuai gambar pada materi 2.1 INPUT.

2. Ketik koding yang tersedia pada sketch arduino.

3. Setelah selesai di ketik kodingnya, diunggah kodingnya.

4. Tunggu hingga selesai unggahannya, setelah selesai pengunggahannya, rangkaian dapat dijalankan.

5. Buka serial monitor untuk melihat hasilnya.

Koding C++

#include <ESP8266WiFi.h>

#include <WiFiClient.h>

#include <ESP8266WebServer.h>

#include <ESP8266WiFiMulti.h>

(53)

53

const char *ssid = "POCO X3 NFC";

const char *pass = "11223344";

ESP8266WebServer server(80);

void handleRoot();

void handleNotFound();

const int inputLDR = A0;

ESP8266WiFiMulti WiFiMulti;

void setup(){

Serial.begin(115200);

Serial.println("Connecting to WiFi..");

WiFi.mode(WIFI_STA);

WiFiMulti.addAP(ssid, pass);

Serial.println("\n\n");

Serial.println("Wait for WiFi..");

while (WiFiMulti.run() != WL_CONNECTED){

Serial.print(".");

delay(100);

}

IPAddress IP = WiFi.localIP();

Serial.println("WiFi Connected.\n IP Address: ");

Serial.println(IP);

server.on("/", handleRoot);

server.onNotFound(handleNotFound);

server.begin();

Serial.println("HTTP Server Started.");

}

void loop(void){

server.handleClient();

}

void handleRoot(){

float LDRSensorValue = analogRead(inputLDR);

String LDRSensorValueStr = String((LDRSensorValue/ 1023) * 5000);

const String HTML_Str = "<!DOCTYPE html><html>\

<body>\

<h1>ESP32 Web Server</h1>\

<p>LDR Sensor Value ="\

+ LDRSensorValueStr +\

"</p></body></html>";

(54)

54

server.send(200, "text/html", HTML_Str);

}

void handleNotFound(){

server.send(404, "text/plain", "404: Not Found!");

}

Koding HTML

<html>

<body>

<h1>ESP32 Web Server</h1>

<p>LDR Sensor Value = $LDRSensorValue</p>

</body>

</html>

Penjelasan Koding C++

#include <ESP8266WiFi.h>

#include <WiFiClient.h>

#include <ESP8266WebServer.h>

#include <ESP8266WiFiMulti.h>

const char* ssid = "BGPLaptop";

const char* pass = "bagusgilang";

ESP8266WebServer server(80);

void handleRoot();

void handleNotFound();

const int inputLDR = A0;

ESP8266WiFiMulti WiFiMulti;

Pada syntax koding di atas, kita menggunakan library tambahan, yaitu ESP8266WebServer yang berguna sebagai

Gambar

Tabel berikut memberikan informasi, mana saja pin GPIO yang dapat dijadikan refrensi dalam pembuatan  proyek IOT, untuk mengurangi tingkat kegagalan
Gambar 5 Boards Manager.
Gambar 6 Rangkaian Penuh Wemos D1 Mini.
Gambar 9 Hasil Keluaran LDR
+7

Referensi

Dokumen terkait

Sistem Monitoring Kesehatan Berbasis Internet of Things (Iot) (Silvia Ratna) sehingga dokter dapat melihat hasil denyut jantung pasien secara langsung di smartphone.Dengan

Hasil kegiatan pembuatan Skripsi yang berjudul “Pengaturan Prototype Lampu Rumah Dengan Solar Cell Berbasis IOT (Internet Of Things)” berhasil menghasilkan subuah

Dalam konteks sistem monitoring factor daya listrik, beberapa peneliti telah melakukan pengembangan sistem monitoring berbasis Internet of Things (IoT), baik untuk keperluan

Berdasarkan perancangan dan pengujian yang telah di lakukan maka diambil kesimpulan bahwa SIstem Pendeteksi Gerakan Berbasis Internet of Things (IoT) dalam kasus

Revolusi industry 4.0 , setiap daerah di Indonesia mulai menerapkan sistem dengan teknologi berbasis Internet of Things (IoT) pada peternakan unggas di

Pada penelitian ini perangkat monitoring infus berbasis Internet of Things IoT yang menggunakan dua platform, yaitu platform Web server untuk memonitoring keseluruan informasi

7 Understanding the Internet of Things 1.3 IoT Impacts on Logistics IoT is „SENSING & SENSE MAKING“ in the world of logistics IoT in Logistics • Mobile computing growing steadily

KESIMPULAN Berdasarkan studi yang dilakukan terkait dengan pengembangan Sistem Monitoring Keselamatan Kapal Nelayan Berbasis Internet of Things IoT, dapat disimpulkan bahwa