Untitled B Indonesia
Untitled B Indonesia
net/publication/363429895
CITATIONS READS
0 978
5 authors, including:
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Hollanda Arief Kusuma on 10 September 2022.
I
Pemrograman Dasar Internet of Things Menggunakan ESP8266
Hollanda Arief Kusuma, S.IK, M.Si
Tonny Suhendra, S.T., M.Cs
Ir. Anton Hekso Yunianto, S.T., M.Si
Farista Egistian, S.T.
Rohani B.R Siagian, S.T.
© Hollanda Arief Kusuma, S.IK, M.Si, Tonny Suhendra, S.T., M.Cs, Ir. Anton Hekso
Yunianto, S.T., M.Si, Farista Egistian, S.T., Rohani B.R Siagian, S.T., 2022
Kantor:
Kampus Universitas Maritim Raja Ali Haji, Gedung Rektorat Lantai III
Jl. Dompak, Tanjungpinang - Kepulauan Riau 29111
Telp/Fax : (0771) 7001550 – (0771) 7038999, 4500091
E-mail : umrahpress@gmail.com / umrahpress@umrah.ac.id
II
Prakata
Segala puji bagi Allah Swt Tuhan Yang Maha Esa, berkat limpahan rahmat serta
kemudahan yang diberikan kepada penulis sehingga dapat menyelesaikan buku
“Pemrograman Dasar Internet of Things Menggunakan ESP8266” dengan lancar.
Sholawat serta salam tidak lupa untuk Nabi Besar Muhammad SAW. Ucapan
terimakasih tentunya kepada seluruh pihak yang mendukung penulis selama proses
penulisan buku ini sehingga dapat selesai dengan baik.
Kami penulis menyadari bahwa buku ini masih ada beberapa kekurangan. Oleh
karena itu, kami berharap pembaca dapat memberikan kritik serta saran terhadap
buku “Pemrograman Dasar Internet of Things Menggunakan ESP8266” Ini agar
kedepannya buku ini dapat menjadi lebih baik sebagai media pembelajaran yang
bermanfaat bagi penulis dan orang banyak.
Demikian buku ini kami buat, besar harapan penulis terhadap pembaca agar buku
ini menjadi sumber inspirasi untuk terus berinovasi. Atas perhatiannya penulis
mengucapkan terima kasih.
Penulis
III
IV
DAFTAR ISI
VI
F. PENGGABUNGAN DHT11, LCD 16X2 I2C, DAN DS1307 ......................................... 67
VII
VIII
1. PENGENALAN ESP8266
Bagi yang belum pernah tahu pasti akan bertanya-tanya apa itu Internet of Things.
Istilah Internet of Things (IoT) diperkenalkan pertama kali pada tahun 2003 oleh
David Brock. Istilah ini kemudian digunakan secara luas oleh peneliti dan praktisi
untuk menjelaskan kombinasi perangkat elektronik yang mampu berkomunikasi
dan mengirimkan data ke internet. Internet of things dapat diartikan sebagai sistem
tertanam yang terdiri dari sensor dan mikroprosesor yang terhubung ke jaringan
internet.
Mungkin bagi kita pemula, terkadang kita berpikir bahwa membuat perangkat IoT
itu susah. Namun, sebetulnya sangat mudah mengembangkan perangkat IoT
sederhana. Syaratnya kita hanya perlu mempunyai sensor, mikrokontroler, dan
jaringan internet. Agar kita bisa membuat perangkat ini maka pada bagian ini kita
akan belajar mengenal mikrokontroler ESP8266 yang akan digunakan pada proyek
IoT di buku ini.
A. SPESIFIKASI ESP8266
ESP8266 dikembangkan oleh Espressif, sebuah perusahaan yang berlokasi di
Shanghai, China. ESP8266 dilengkapi dengan Tensilica L106 32-bit microcontroller
(MCU). Kecepatan osilasi sebesar 80 MHz. ESP8266 dilengkapi dengan WIFI
transceiver sehingga mampu terkoneksi dengan WIFI router maupun menjadi Access
Point. Chip ini memiliki 17 pin dimana 11 pin digunakan sebagai pin I/O (Input /
Output) dan 6 pin untuk komunikasi dengan chip memori flash. ESP8266 bekerja
pada tegangan operasi 3.3 V. ESP8266 dilengkapi dengan komunikasi SPI, I2C, dan
UART. Chip ini juga mampu melakukan konversi analog ke digital sebesar 10 bit.
B. MODUL ESP8266
Sebelum kita membuat sebuah perangkat IoT, kita perlu mengenal dulu modul
ESP8266 yang ada di pasaran agar kita kita salah memilih. Ada banyak modul yang
sekarang tersedia di marketplace seperti tokopedia, bukalapak, shopee, dll.
9
Selama beberapa tahun, ESP8266 telah berkembang menjadi primadona dalam
pengembangan perangkat IoT. Harganya sangat terjangkau. Modul ini juga dapat
diprogram menggunakan Arduino IDE yang akan akan kita bahas ke depannya.
(1) ESP-01
Modul ini merupakan versi pertama yang tersedia di pasaran. Modul ini digunakan
sebagai WIFI adaptor yang terhubung dengan mikrokontroler seperti Arduino. AT
Command digunakan untuk berkomunikasi dengan modul ini. Kelemahan dari
modul ini ialah pin I/O yang terbatas. Selain itu, juga susah untuk dipasangkan ke
project board.
(2) NodeMCU
Modul ini dikembangkan oleh NodeMCU. Modul ini berdasarkan modul ESP-12E
yang memiliki Tensilica Xtensa® 32-bit LX106 RISC mikroprosesor dengan frekuensi
osilasi antara 80 hingga 160 MHz. modul ini dilengkapi dengan chip USB to serial
sehingga mudah diprogram pada Arduino IDE.
Modul ini bekerja di tegangan 3.3V. Tapi kita bisa menggunakan tegangan 5V dari
micro USB connector. Modul ini dilengkapi dengan regulator tegangan sehingga bisa
disuplai tegangan 9-12V dari pin VIN.
10
(3) Wemos D1 Mini
11
Modul ini bekerja di tegangan 3.3V, memiliki 11 pin I/O, 1 pin analog, dilengkapi
dengan chip USB to Serial dan micro USB connector sehingga mudah diprogram di
Arduino IDE. Modul ini yang akan digunakan dalam pengembangan perangkat IoT
di buku ini.
12
2. PENGENALAN ARDUINO IDE
Arduino IDE merupakan tempat dimana kita mencurahkan ide kita ke dalam bentuk
kode-kode. Kita mengatur perintah yang akan dijalankan melalui firmware yang
dibuat di Arduino IDE. IDE (Integrated Development Environment) ialah program
khusus yang dijalankan di komputer kita dan memungkinkan kita menulis sketch.
Sketch itu sendiri merupakan istilah untuk kode-kode sintak program Arduino IDE.
Proses yang diperlukan untuk mengubah sketch menjadi bentuk yang dapat
digunakan di dalam Board dinamakan kompilasi (Compilation).
Sebelum kita menggunakan WeMos D1 Mini dalam proyek kita, kita perlu
melakukan instalasi Arduino IDE agar dapat memprogram chip ini. Arduino IDE
digunakan untuk memprogram karena mudah dan banyak sekali tutorial yang dapat
membantu kita memahami program yang akan dibuat. Pada bagian ini akan
dijelaskan bagaimana cara mendapatkan software Arduino IDE dan
menginstalasinya ke dalam laptop kita.
13
14
B. INSTALASI ARDUINO IDE
Setelah unduhan selesai maka kita lakukan instalasi program Arduino IDE. Klik dua
kali pada Arduino-1.8.13-windows.exe.
15
Jika muncul tampilan Arduino Setup, maka kita klik I Agree.
Lalu pilih opsi instalasi. Biarkan sesuai default. Kemudian klik Install.
16
Tunggu proses instalasi hingga selesai. Klik Close.
Setelah instalasi selesai dilakukan maka kita buka Arduino IDE 1.8.13. tampilannya
akan seperti berikut ini:
17
C. MENU PADA ARDUINO IDE
Menu utama terdiri dari File., Edit, Sketch, Tools, dan Help. Seluruh operasi dan
pilihan dapat diakses melalui menu utama.
Menu File
H. Menyimpan sketch dengan nama file yang lain (Save As, Ctrl+Shift+S)
18
(2) Menu Edit
G. Menimpa/menyisipkan tulisan
yang disalin atau dipotong (Paste,
Ctrl+V)
H. Memilih semua kode untuk siap disalin atau dipotong (Select All, Ctrl+A)
19
(3) Menu Sketch
Menu ini berhubungan dengan operasi pengubahan sketch menjadi firmware yang
akan dimasukkan ke dalam Arduino Board dan library yang akan digunakan di
dalam sketch.
A. Melakukan format/ perataan baris secara otomatis pada sketch (Auto Format,
Ctrl+T)
D. Membuka Monitor Serial untuk melihat data yang diterima dari komunikasi
Arduino Board sesuai dengan perintah yang diunggah melalui firmware (Serial
Monitor, Ctrl+Shift+M)
E. Memplotkan nilai yang keluar dari Arduino Board (Serial Plotter, Ctrl+Shift+L)
Menu Help berisi bantuan dan manual untuk memahami Arduino IDE dan
pemrogramannya. Manual dasar ini tersedia offline yang dibuka pada web browser.
Ada beberapa bagian dari manual ini yang harus terhubung dengan internet untuk
mengaksesnya.
D. TOOLBAR UTAMA
Pada Toolbar ini terdapat beberapa icon yang bisa di klik untuk menjalankan fungsi
dari menu yang ada. Berikut ini penjelasan dari masing-masing icon pada toolbar
utama Arduino IDE:
21
Verify/Compile. Pengecekan kesalahan pada sintak yang ditulis.
E. KONSOL TEKS
Kotak berwarna hitam ini digunakan untuk melihat status dari proses yang sedang
berjalan dan pesan kesalahan yang timbul pada saat kompilasi maupun
pengunggahan firmware. Pada sisi kiri bawah menandakan jumlah baris pada
Sketch dan pada bagian kanan bawah menandakan Arduino Board yang dipilih dari
Menu Tools.
F. SCRIPT EDITOR
Bagian ini merupakan bagian utama dari Arduino IDE dimana kita menulis sintak
program. Secara umum, sintak yang disediakan oleh Arduino IDE ialah void setup()
dan void loop().
void setup () akan dipanggil pada saat Arduino Board dinyalakan. void setup ()
digunakan untuk inisialisasi variabel, mode pin, inisialisasi library yang digunakan,
dan sebagainya. Fungsi setup ini hanya berjalan sekali pada saat dinyalakan yaitu
saat power up dan reset.
22
void loop() digunakan untuk melaksanakan atau mengeksekusi perintah dari
program yang telah dibuat. void loop() akan selalu dijalankan selama Arduino Board
menyala. void loop() harus tetap ada di dalam script editor walaupun tidak ada sintak
di dalamnya.
Selain void setup() dan void loop(), kita juga bisa menambahkan header library yang
akan digunakan dengan menambahkan #include pada bagian awal program; jenis
variabel yang digunakan; dan fungsi-fungsi tambahan yang dibutuhkan agar
program dapat berjalan dengan baik.
G. KONFIGURASI PREFERENCES
Pada saat kita membuka Arduino IDE, ada beberapa hal yang perlu dilakukan agar
nomor baris dapat ditampilkan dan saat melakukan pengunggahan kita bisa
mengetahui proses yang sedang terjadi. Langkahnya sebagai berikut.
Kita juga bisa mengatur ukuran font agar lebih besar atau kecil dengan mengubah
angka di dalam Editor font size.
23
24
3. KONFIGURASI DAN PENGATURAN
WEMOS D1 MINI BOARD
Kali ini, kita akan belajar bagaimana menghubungkan Wemos D1 Mini Board ke
komputer dan melakukan konfigurasi agar Board ini bisa diunggah firmware yang
telah dibuat di Arduino IDE.
25
Klik setup.exe. Jika muncul pop up window, kita klik YES.
Klik INSTALL pada jendela di bawah ini. Tunggu sesaat hingga muncul pop up
window yang menyatakan instalasi driver berhasil.
C. INSTALASI ESP8266
BOARD MANAGER
Langkah selanjutnya adalah melakukan instalasi
board manager di Arduino IDE. Hal ini dilakukan
agar kita bisa memprogram board Wemos
maupun board lainnya yang berbasis chip
ESP8266. Pastikan komputer/laptop anda
terkoneksi dengan internet.
26
Klik Boards Manager. Lalu pilih Tools > Board > Boards Manager…
Ketik ESP8266 pada kotak pencarian. Pilih versi yang ingin diinstal. ESP8266
Versi 2.5.2 disarankan untuk dipasang karena sudah stabil dalam
penggunaannya. Lalu klik tombol install pada ESP8266 by ESP8266 Community
27
Tunggu unduhan selesai. Beberapa saat setelah unduhan selesai maka akan
muncul tulisan INSTALLED.
Klik Tools > Board > Pilih LOLIN (WEMOS) D1 mini Pro
28
Klik Tools > Port > Pilih port dari board Wemos yang terkoneksi dengan komputer
anda (Sebagai contoh disini COM15)
29
30
4. PENGENALAN MODUL SHIELD WEMOS
D1 MINI BOARD
Pada bagian ini kita akan belajar mengenal komponen elektronik dalam bentuk
shield yang akan digunakan dalam proyek IoT. Berikut penjelasan modul-modul
yang digunakan.
31
Modul micro SD card pada shield ini berfungsi untuk menghubungkan kartu micro
SD card ke Wemos D1 Mini. Kita bisa menyimpan data ke dan membaca data dari
kartu micro SD.
Modul ini menggunakan komunikasi SPI yang terdiri dari 4 pin yaitu Pin MOSI
(Master Output Slave Input) atau DO (Data Out) sebagai output dari master. MISO
(Master Input Slave Output) atau DI (Data In) sebagai input dari master, SCK (Serial
Clock) atau CK, dan CS (Chip Select) berfungsi memilih slave yang akan digunakan
untuk berkomunikasi dengan Wemos D1 Mini. Pin D8 sebagai CS, pin D7 sebagai
DI, pin D6 sebagai DO, dan pin 5 sebagai CLK.
32
C. PROTOSHIELD
Protoshield merupakan pcb tambahan yang dapat
digunakan untuk menempatkan komponen yang
tidak bisa terhubung secara langsung ke Wemos D1
Mini. Protoshield ini mempermudah kita dalam
menempatkan dan menyoldernya di satu tempat.
33
34
5. FIRST SKETCH
Akhirnya kita sampai pada bagian yang diinginkan yaitu memprogram Wemos D1
Mini. Pada bagian ini kita akan belajar bagaimana membuat program sederhana
untuk menyalakan lampu LED yang ada pada board Wemos D1 Mini.
A. PENGUNGGAHAN FIRMWARE
Langkah memprogramnya akan disampaikan berikut ini.
Klik File > Examples > ESP8266 > Blink. Arduino IDE akan membuka contoh
sketch yang ada untuk membuat lampu LED berkedip setiap 1 detik.
35
Kita klik icon atau menekan shortcut key Ctrl+R untuk melakukan kompilasi.
Dari hasil kompilasi kita bisa melihat apakah ada kesalahan/error dari sintak
yang kita buat. Kompilasi ini butuh waktu beberapa detik.
36
Apabila tidak ada yang error pada tampilannya akan seperti berikut.
Jika ada yang error akan muncul tulisan di bagian konsol teks. Arduino IDE akan
memberikan pesan bagian mana yang error dan harus diperbaiki. Kita lakukan
perbaikan agar program bisa dikompilasi.
Kemudian, kita klik icon atau menekan shortcut key Ctrl+U untuk
melakukan pengunggahan firmware ke Board Wemos D1 Mini. Tunggu hingga
tulisan Done uploading muncul.
37
Setelah program diunggah maka LED akan
mesnyala selama satu detik dan mati selama dua
detik. Pengecekan dilakukan pada status LED
yang berdekatan pin TX.
38
void setup() digunakan untuk menginisialisasi mode pin LED.
Tanda // digunakan untuk memberikan komentar. Kalimat yang berada di dalam
// tidak akan dianggap sebagai sintak program.
pinMode(LED_BUILTIN, OUTPUT) digunakan untuk mengkonfigurasikan pin
LED_BUILTIN sebagai OUTPUT.
Tanda {} digunakan untuk menandakan isi perintah yang berada di dalam fungsi
void setup().
Tanda titik koma (;) digunakan pada setiap akhir baris sintak agar tidak error
pada saat kompilasi.
Setelah void setup(), mari kita bedah sintak yang terdapat pada void loop().
39
40
6. PEMBACAAN DATA SENSOR DHT11
Setelah kita belajar bagaimana cara memprogram LED sederhana di Wemos D1 Mini,
saatnya kita belajar bagaimana cara mengambil data dari DHT11 dan
menampilkannya ke dalam serial monitor. Sebelum kita melakukan pemrograman
sensor DHT11, kita perlu melakukan instalasi library DHT11.
Akan muncul jendela Library Manager. Tunggu hingga proses loading selesai.
Proses ini dapat dilihat pada bagian bawah jendela.
41
Pada kotak Filter your search… ketik DHT. Nanti akan muncul library yang
berhubungan dengan DHT. Pilih DHT sensor library by Adafruit. Klik Install.
43
B. KONFIGURASI PIN DHT11 KE WEMOS D1
MINI
DHT11 dihubungkan ke Wemos D1 Mini seperti gambar di bawah ini. Pin yang
terhubung dari DHT11 ke Wemos D1 Mini ialah pin D4.
C. SKETCH DHT11
Kita akan gunakan
Example yang tersedia
di dalam library DHT
library untuk
mengunggah
program/sketch ke
Wemos D1 Mini.
Langkahnya sebagai
berikut.
Sketch DHTtester
akan tampil seperti
berikut ini.
44
Pada baris ke-10, kita ubah letak pin DHT dari 2 menjadi D4.
Pada baris 15, kita hilangkan tanda //. Pada baris 16 kita berikan tanda
komentar //. Hal ini dilakukan karena DHT yang kita gunakan ialah DHT11.
Lalu kita unggah programnya dengan menekan icon Upload atau tekan Ctrl+U.
Setelah selesai upload, kita buka Serial Monitor . Pastikan kecepatan serial
diatur di 9600 baud. Pengaturan bisa dilakukan di sisi kanan bawah serial
monitor. Saat kecepatan serial sesuai dengan yang di sketch maka akan muncul
karakter dan angka hasil pembacaan sensor DHT11.
45
D. PENJELASAN SINTAK PROGRAM
Sketch program yang diunggah harus berisikan #include "DHT.h" agar library DHT
terinstall di dalam Wemos D1 Mini. #define DHTPIN D4 artinya ialah mendefinisikan
variabel DHTPIN yang terletak di pin D4.
Pada void setup(), kita awali dengan inisialisasi serial pada baudrate 9600 dengan
perintah Serial.begin(9600). Kemudian kita munculkan tulisan pada serial
monitor dengan perintah Serial.println("DHTxx test!");. Kita inisialisasi
sensor DHT agar dapat dipakai dengan perintah dht.begin();.
Pada void loop(), di bagian awal diberi jeda selama 2 detik dengan perintah
delay(2000). Setelah itu dilakukan pembacaan suhu dan kelembaban. Pembacaan
ini cukup mudah. Kita tinggal menggunakan readTemperature() dan
readHumidity().
Dalam sketch example, kita mengambil data humidity dan disimpan dalam variabel
float h = dht.readHumidity();. Variabel h digunakan untuk menyimpan data
kelembaban. Pembacaan data suhu dilanjutkan dengan perintah float t =
dht.readTemperature();. Variabel t digunakan untuk menyimpan data suhu.
Apabila kita ingin mendapatkan nilai suhu dalam satuan Fahrenheit maka kita
tambahkan tulisan TRUE di dalam perintah dht.readTemperature(true). Jika
pembacaan suhu dan kelembaban gagal atau tidak terdeteksi maka akan keluar
tulisan “Failed to read from DHT sensor!”. Library ini juga memiliki metode untuk
menghitung indeks panas dalam Fahrenheit dan Celcius dengan perintah:
Akhirnya saatnya kita tampilkan data pembacaan ke serial monitor dengan perintah:
46
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: ");
Serial.print(hic);
Serial.print(" *C ");
Serial.print(hif);
Serial.println(" *F");
E. TROUBLESHOOTING
Apabila saat menjalankan program untuk membaca data suhu dan kelembaban dari
DHT11 mengalami gangguan, maka beberapa cara dapat dilakukan agar kita bisa
mengatasi masalah ini.
1. Pastikan koneksi kabel antara DHT11 dan Wemos D1 Mini sudah tepat dan
terhubung.
2. Pastikan tegangan input berada di rentang 3.3V hingga 5V.
3. Pastikan menggunakan kabel data yang bagus. Terkadang kabel data yang
dihubungkan ke Wemos D1 Mini bisa bermasalah karena ada kabel putus di
dalamnya.
4. Perhatikan #define. Pastikan menggunakan DHT11 bukan tipe DHT yang lain.
5. Delay antar pengambilan data tidak boleh kurang dari 2 detik.
6. Pastikan sensor DHT11 yang digunakan tidak rusak. Cara mengeceknya ialah
dengan menggunakan sensor DHT11 yang lain.
7. Pastikan baudrate yang digunakan di dalam sketch dan serial monitor memiliki
angka yang sama.
47
48
7. PENAMPILAN DATA PADA LCD
Setelah kita belajar bagaimana cara mendapatkan data suhu udara dan kelembaban
dari DHT11, maka kita akan belajar bagaimana menampilkan data tersebut ke dalam
LCD 16x2 yang sudah terhubung dengan I2C breakout module. Sebelum kita
melakukan pemrograman untuk menampilkan data ke LCD, kita perlu melakukan
instalasi library LCD.
Akan muncul jendela untuk mengunduh file tersebut. Pilih Save File lalu Klik OK.
49
Setelah unduhan selesai, kita mulai install library ini.
Pada Arduino IDE, kita klik Sketch > Include Library > Add .ZIP Library…
Akan muncul jendela baru untuk mengambil library LCD yang baru saja
diunduh. Pilih folder tempat library disimpan tadi. Sebagai contoh, library LCD
disimpan di folder Download.
50
Pilih file New-LiquidCrystal-master.zip. lalu klik Open.
Setelah library sudah terinstall maka akan muncul keterangan di konsol teks.
51
B. KONFIGURASI PIN LCD 16x2 I2C KE WEMOS
D1 MINI
LCD 16x2 I2C dihubungkan ke Wemos D1 Mini di pin D1 untuk pin SCL dan pin D2
untuk pin SDA. Koneksi pin dapat dilihat pada gambar di bawah ini.
52
Kemudian kita upload program ini ke dalam Wemos D1 Mini. Hasil pengecekan
alamat akan muncul di dalam Serial Monitor. Alamat untuk LCD ini ialah 0x27.
Alamat ini akan digunakan di bagian berikutnya.
53
Pada sketch baru kita ketik kode program berikut ini.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 3
#define I2C_ADDR 0x27
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin,
D6_pin, D7_pin);
void setup() {
lcd.begin(16, 2); // inisialisasi LCD
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
lcd.setCursor(0,0); // cursor di kiri atas
lcd.print("Hello, Wemos D1");
lcd.setCursor( 0, 1 ); // kursor di kiri bawah
lcd.print ("LCD 16X2");
delay(1000);
}
void loop(){
}
Kita upload sketch nya.
Hasilnya akan muncul di LCD seperti berikut ini.
54
Berikutnya kita mendefinisikan pin-pin yang ada di modul I2C sesuai dengan yang
dibutuhkan. Definisi pin ini digunakan untuk inisialisasi LCD I2C pada sintak
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin,
D5_pin, D6_pin, D7_pin);.
Setelah itu, di dalam void setup() kita tambahkan dua baris sintak berikut.
Inisialisasi ini digunakan untuk menyalakan BACKGROUND LED LCD.
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
LiquidCrystal()
Fungsi ini diperlukan untuk menginisialisasi pin-pin LCD yang terhubung pada
Arduino Board.
Sintak:
LiquidCrystal(I2C address, enable, rw, rs, d0, d1, d2, d3, d4, d5, d6,
d7)
Parameter:
rs : pin RS LCD enable : pin ENABLE LCD
rw : pin RW LCD d0-d7 : pin D0-D7 LCD
Contoh Program:
#include <LiquidCrystal_I2C.h>
LiquidCrystal lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin,
D6_pin, D7_pin);
Penjelasan:
Pin-pin LCD yang terhubung diinisialisasikan dan fungsi LiquidCrystal dijadikan
sebuah variabel baru dengan nama lcd.
lcd.begin()
Sintak:
lcd.begin(karakter, baris)
55
Contoh program :
lcd.begin(16,2)
Penjelasan:
Pada sintak di atas LCD yang digunakan ialah LCD dengan jumlah karakter yang
digunakan sebanyak 16 dan 2 baris.
lcd.setCursor()
Sintak:
lcd.setCursor(kolom, baris)
Contoh program :
lcd.setCursor(1,1)
Penjelasan:
Dari sintak di atas, kursor diletakkan pada kolom ke-2 dan baris ke-2 (nilai 0 pada
baris dan kolom dianggap sebagai baris ke-1).
lcd.print()
Sintak:
lcd.print(data)
Contoh program :
lcd.print("test");
Penjelasan:
lcd.print() akan menampilkan teks “test” pada LCD.
lcd.clear()
Fungsi lcd.clear() digunakan untuk menghapus teks yang ada di LCD dan
meletakkan posisi kursor pada baris ke-1 kolom ke-1.
Sintak:
lcd.clear()
56
Contoh program :
lcd.print("test");
lcd.clear();
Penjelasan:
lcd.clear() akan menghapus teks “test”yang tertampil pada LCD.
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
void setup() {
Serial.begin(9600);
Serial.println(F("Init DHT11"));
dht.begin();
lcd.begin(16, 2);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
//tampilan awal
lcd.setCursor(7, 0);
lcd.print("Pemantau");
lcd.setCursor(3, 1);
lcd.print ("Ruangan IoT");
delay (3000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu =");
lcd.setCursor(15, 1);
57
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humid=");
lcd.setCursor(15, 1);
lcd.print("%");
}
void loop() {
delay(2000);
float kelembaban = dht.readHumidity();
float suhu = dht.readTemperature();
if (isnan(kelembaban) || isnan(suhu)) {
kelembaban = -99;
suhu = -99;
}
58
8. WAKTU REAL TIME CLOCK
Pada bagian ini kita akan belajar bagaimana cara mengambil data waktu dan
menyimpannya ke dalam chip yang dapat digunakan sebagai pewaktu atau dikenal
dengan nama Real Time Clock (RTC). Pewaktu yang digunakan ialah chip DS1307
dari Maxim Integrated. Kita akan menggunakan modul data logger yang sudah
terintegrasi dengan chip ini.
59
Akan muncul jendela Library Manager. Tunggu hingga proses loading selesai.
Proses ini dapat dilihat pada bagian bawah jendela.
Pada kotak Filter your search… ketik RTCLIB. Nanti akan muncul library yang
berhubungan dengan RTC. Pilih RTCLIB by Adafruit. Klik Install.
60
B. KONFIGURASI PIN RTC DI WEMOS D1 MINI
DATALOGGER
RTC DS1307 terletak pada modul Wemos D1 Mini Data Logger Shield. Modul ini
berisi RTC dan micro SD Card adapter. RTC DS1307 terhubung ke Wemos D1 Mini
pada pin D1 untuk pin SCL dan pin D2 untuk pin SDA. Konfigurasi pin modul ini
dapat dilihat berikut.
Sebelum kita bisa menggunakan RTC DS1307, kita perlu mengatur waktunya agar
tersimpan ke dalam chipnya. Pengaturan waktu ini cukup satu kali. Selama baterai
di modul data logger masih aktif atau tegangannya 3 V berarti waktu masih
tersimpan di dalam chip.
Kita akan menggunakan sketsa program library RTCLIB untuk mengatur waktu.
Caranya ialah sebagai berikut:
Kita buka sketch baru. Klik File > Example > RTClib > ds1307nvram.
61
Sketch ds1307nvram akan tampil seperti berikut ini.
Lalu kita unggah programnya dengan menekan icon Upload atau tekan Ctrl+U.
Setelah selesai upload, kita buka Serial Monitor . Pastikan kecepatan serial
diatur di 57600 baud. Pengaturan bisa dilakukan di sisi kanan bawah serial
monitor. Saat kecepatan serial sesuai dengan yang di sketch maka akan muncul
karakter dan angka hasil pengaturan waktu.
62
Pastikan karakter yang keluar seperti di atas. Jika karakter yang keluar seperti
di bawah berarti ada masalah dengan RTC.
Setelah kita mengatur waktunya, saatnya kita membaca data waktu yang tersimpan
di dalam DS1307. Langkah-langkahnya sebagai berikut:
Kita buka sketch baru. Klik File > Example > RTClib > ds1307.
63
Sketch ds1307 akan tampil seperti berikut ini.
Lalu kita unggah programnya dengan menekan icon Upload atau tekan Ctrl+U.
Setelah selesai upload, kita buka Serial Monitor . Pastikan kecepatan serial
diatur di 57600 baud. Pengaturan bisa dilakukan di sisi kanan bawah serial
monitor. Saat kecepatan serial sesuai dengan yang di sketch maka akan muncul
karakter dan angka hasil pengaturan waktu.
64
E. PENJELASAN SINTAK LIBRARY RTCLIB
RTC_DS1307
Fungsi ini diperlukan untuk menginisialisasi library RTC dan menentukan tipe RTC
yang digunakan.
Sintak:
RTC_DS1307 rtc;
RTC.begin()
Fungsi ini diperlukan untuk mengetahui RTC DS1307 terhubung dan biasanya
diletakkan di dalam void setup. Hasil eksekusi fungsi hanya sebuah nilai boolean.
Nilai 1 berarti RTC terhubung dan nilai 0 berarti RTC tidak terhubung.
RTC.isrunning()
Fungsi ini membaca register internal I2C RTC DS1307 untuk memastikan waktu
sudah tersimpan di dalam chip. Jika fungsi ini mengembalikan nilai 0 maka kita
dapat melakukan pengaturan waktu dan tanggal.
RTC.adjust()
Sintak:
rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));
rtc.adjust(DateTime(tahun, bulan, hari, jam, menit, detik))
Contoh program :
rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));
rtc.adjust(DateTime(2017, 1, 27, 12, 56, 0));
RTC.now()
Fungsi ini digunakan untuk mengambil data tanggal dan waktu sekarang. Nilai yang
dikeluarkan dari fungsi ini biasanya tersimpan ke dalam variabel DateTime.
65
RTC.year()
RTC.month()
RTC.day()
RTC. dayOfTheWeek()
RTC.hour()
RTC.minute()
RTC.second()
66
F. PENGGABUNGAN DHT11, LCD 16x2 I2C, DAN
DS1307
Disini kita akan memberikan kode program yang menggabungkan sensor DHT11 dan
DS1307 dengan LCD 16x2 I2C dalam satu sketch. Program ini akan mengambil data
waktu, suhu, dan kelembaban udara yang ditampilkan ke dalam LCD.
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
//RTC DS1307
RTC_DS1307 rtc;
DateTime waktuSekarang;
char tanggal[10], waktu[10];
//inisialisasi LCD
#define BACKLIGHT_PIN 3
#define I2C_ADDR 0x27
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin,
D6_pin, D7_pin);
void setup() {
Serial.begin(9600);
Serial.println(F("Init DHT11"));
dht.begin();
lcd.begin(16, 2);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
//tampilan awal
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Pemantau");
lcd.setCursor(2, 1);
lcd.print ("Ruangan IoT");
delay (3000);
lcd.clear();
if (! rtc.begin()) {
lcd.setCursor(2, 0);
lcd.print(F("RTC ERROR!!!"));
67
abort();
}
else {
for (byte i = 0; i < 3; i++) {
waktuSekarang = rtc.now();
sprintf(tanggal, "%04d/%02d/%02d", waktuSekarang.year(),
waktuSekarang.month(), waktuSekarang.day());
//tampilkan tanggal dan waktu
lcd.clear();
lcd.setCursor(3, 0);
lcd.print(tanggal);
void loop() {
delay(2000);
float kelembaban = dht.readHumidity();
float suhu = dht.readTemperature();
if (isnan(kelembaban) || isnan(suhu)) {
kelembaban = -99;
suhu = -99;
}
lcd.clear();
waktuSekarang = rtc.now();
sprintf(tanggal, "%02d/%02d/%02d", waktuSekarang.year()-2000,
waktuSekarang.month(), waktuSekarang.day());
sprintf(waktu, "%02d:%02d", waktuSekarang.hour(), waktuSekarang.minute());
68
9. PENYIMPANAN DATA DI MICRO SD
Setelah kita belajar bagaimana cara mengambil data suhu dari DHT11 dan waktu
dari internet maka kita perlu belajar mengenai penyimpanan data ke dalam modul
micro SD. Kita akan menggunakan modul data logger yang telah disematkan kartu
micro SD.
69
Berdasarkan kapasitasnya, micro SD dibagi menjadi 4 jenis yaitu
1. SDSC (Secure Digital Standard Capacity). Jenis micro sd ini memiliki kapasitas
mulai dari 1 MB hingga maksimal 2 GB dan dikategorikan sebagai SDSC. Format
memori ini menggunakan FAT16.
2. SDHC (Secure Digital High Capacity). Jenis memori SDHC memiliki kecepatan
yang lebih baik ketimbang SDSC karena sudah menggunakan format FAT32.
Kapasitas untuk memori ini mulai dari 4 GB hingga maksimal sebesar 32 GB.
4. SDUC (Secure Digital Ultra Capacity. Jenis yang terakhir yaitu SDUC yang
memiliki kapasitas penyimpanan ultra besar yakni mulai dari 4 TB hingga
maksimal mencapai 128 TB. Format memorinya menggunakan exFAT.
B. Komunikasi SPI
Komunikasi antara mikrokontroler dengan kartu micro SD menggunakan
komunikasi Serial Peripheral Interface (SPI). Komunikasi SPI merupakan jenis
komunikasi sinkronus yang menggunakan jalur yang terpisah antara sinyal data
dan waktu (clock) yang menjaga kedua sisi sinkron. Clock merupakan sinyal
berosilasi yang memberi tahu penerima secara tepat kapan harus mengambil sampel
bit pada jalur data.
SPI memiliki 4 pin yaitu pin Chip Select (CS) atau dikenal juga dengan Slave Select
(SS), MOSI (Master Out Slave In), MISO (Master In Slave Out), dan CLK/SCK yang
berarti Clock. Pin CS berfungsi untuk memilih Slave yang akan berkomunikasi. Pin
MOSI merupakan jalur masuk data dari Master ke Slave. Pin MISO merupakan jalur
masuk data ke Master dari Slave. Pin CLK mengeluarkan sinyal osilasi dari Master
ke Slave untuk tetap tersinkronisasi. Ilustrasi komunikasi SPI dapat dilihat pada
gambar di bawah ini.
70
C. LIBRARY SD
Dalam menggunakan kartu micro SD, kita dapat menggunakan library SdFat yang
sudah diinstalasi di dalam Arduino IDE ketika board ESP8266 dipasang. Library ini
mendukung kartu micro SD dengan sistem FAT16 dan FAT32. Library ini dapat
digunakan dengan memasukkan #include <SPI.h> dan #include "SdFat.h". Library
SdFat berisi fungsi-fungsi untuk mengakses, menulis, dan membaca data yang ada
di dalam kartu micro SD.
SD.begin()
SD.exists()
SD.mkdir()
SD.open()
SD.remove()
SD.rmdir()
Fungsi-fungsi yang digunakan untuk mengakses, membaca, dan menulis file antara
lain sebagai berikut:
File.name()
File.available()
File.close()
File.flush()
File.peek()
File.position()
File.print()
File.println()
File.seek()
71
File.size()
File.read()
File.write()
File.isDirectory()
File.openNextFile()
File.rewindDirectory()
Adapter untuk kartu micro SD terpasang pada modul Wemos D1 Mini Data Logger
Shield. Pin Chip Select (CS) terletak pada pin D8. Pin D7 digunakan untuk pin MOSI
(Master Out Slave In). Pin D6 digunakan untuk pin MISO (Master In Slave Out), dan
pin D5 digunakan untuk pin CLK. Konfigurasi pin dapat dilihat pada gambar berikut.
Sebelum kita menggunakan kartu micro SD untuk menulis dan membaca data, kita
perlu mengidentifikasi kartu micro SD yang akan digunakan. Kita pastikan kartu
micro SD dapat dikenali oleh mikrokontroler sehingga dapat digunakan kemudian.
Pengecekan kartu micro SD bukanlah sebuah keharusan namun dapat sangat
membantu kita apabila ada kesalahan atau kekeliruan yang bisa disebabkan oleh
kartu micro SD yang rusak. Kita akan menggunakan sketch SdInfo untuk
mendapatkan informasi ukuran memori, tipe kartu, sisa memori, dan file yang
tersimpan di dalam kartu micro SD.
72
Langkah-langkahnya sebagai berikut.
Kemudian pada baris 20 pin SS diganti sesuai dengan pin SSS pada modul yang
digunakan yaitu pin D8.
73
Lalu kita unggah programnya dengan menekan icon Upload atau tekan Ctrl+U.
Setelah selesai upload, kita buka Serial Monitor . Pastikan kecepatan serial
diatur di 9600 baud. Pengaturan bisa dilakukan di sisi kanan bawah serial
monitor. Pada serial monitor akan muncul tulisan seperti di bawah ini.
74
Kita ketik karakter sembarang di sisi kiri atas seperti yang ditunjukkan gambar
di bawah ini. Lalu kita klik tombol send atau tekan Enter.
Jika kartu micro SD terdeteksi maka akan keluar informasi mengenai tipe kartu,
jumlah memori, dan sebagainya seperti gambar di bawah ini.
75
Jika kartu micro SD tidak terdeteksi maka akan keluar tulisan SD errorCode di
dalam serial monitor.
Disini kita akan membahas cara menggunakan library SdFat yang dihubungkan ke
Wemos. Kita tidak menggunakan example yang ada di library ini. Tapi kita buat
sendiri. Kita akan menyimpan data nilai digital dari pin analog. Langkah-langkahnya
sebagai berikut:
#include <SPI.h>
#include "SdFat.h"
void setup() {
Serial.begin(9600);
if (!sd.begin(chipSelect)) {
Serial.println("Kartu micro SD tidak terdeteksi");
while (1);
}
Serial.println("kartu micro SD terdeteksi");
}
void loop() {
int nilai = analogRead(0);
dataFile = sd.open("log.txt", FILE_WRITE);
if (dataFile) {
dataFile.print("Nilai pin analog=");
dataFile.println(nilai);
dataFile.close();
}
else {
Serial.println("error membuka log.txt");
}
Lalu kita unggah programnya dengan menekan icon Upload atau tekan Ctrl+U.
Setelah selesai upload, kita buka Serial Monitor . Pastikan kecepatan serial
diatur di 9600 baud.
Hasil pengambilan nilai akan muncul di Serial monitor seperti gambar berikut.
Nilai yang muncul bisa saja tidak sesuai dengan gambar di bawah ini melainkan
sesuai dengan output yang keluar dari Wemos D1 Mini.
77
G. PENJELASAN SINTAK PENYIMPANAN DATA
Sketch dimulai dengan menyertakan library SPI dan SdFat dengan perintah
#include <SPI.h> dan #include “SdFat.h”. Kemudian dilanjutkan dengan using
namespace sdfat;. Baris ini harus ada karena di dalam sketch ini digunakan library
SdFat. Jika tidak ada akan menimbulkan error saat melakukan uploading.
Berikutnya dilakukan inisialisasi pin CS yang akan terpasang pada pin D8 dengan
menggunakan perintah const uint8_t chipSelect = D8;. SdFat sd; digunakan
untuk mendefinisikan nama sd akan dipakai untuk mengakses library SdFat. File
dataFile; diperlukan untuk membuat objek yang bisa mengakses fungsi File.
void loop() diawali dengan int nilai = analogRead(0); yang digunakan untuk
mengambil nilai digital pada pin A0 menggunakan fungsi analogRead. Hasil
eksekusi fungsi ini akan disimpan dalam variabel nilai. Kemudian perintah
dataFile = sd.open("log.txt", FILE_WRITE); digunakan untuk membuka file
di dalam kartu micro SD dengan mode FILE_WRITE (menulis file). Jika file dapat
terbuka untuk ditulis, maka langkah selanjutnya ialah mencetak tulisan dan nilai
ke dalam file log.txt. Perintah untuk menulis data di dalam file terdiri dari baris-baris
program berikut ini. print() digunakan untuk menulis data ke dalam kartu dan
diakhiri dengan close().
Disini kita akan memberikan kode program yang menggabungkan sensor DHT11,
DS1307, LCD 16x2 I2C, dan micro SD ke dalam satu sketch. Program ini akan
mengambil data waktu, suhu, dan kelembaban udara yang ditampilkan ke dalam
LCD kemudian disimpan ke dalam kartu micro SD.
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
#include <SPI.h>
#include "SdFat.h"
//micro SD
using namespace sdfat;
const uint8_t chipSelect = D8;
SdFat sd;
File dataFile;
//RTC DS1307
RTC_DS1307 rtc;
DateTime waktuSekarang;
char tanggal[10], waktu[10];
//inisialisasi LCD
#define BACKLIGHT_PIN 3
#define I2C_ADDR 0x27
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
79
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin,
D6_pin, D7_pin);
void setup() {
Serial.begin(9600);
Serial.println(F("Pemantauan Kualitas Udara Sensor DHT11"));
dht.begin();
lcd.begin(16, 2);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
//tampilan awal
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Pemantau");
lcd.setCursor(2, 1);
lcd.print ("Ruangan IoT");
delay (3000);
lcd.clear();
if (! rtc.begin()) {
lcd.setCursor(2, 0);
lcd.print(F("RTC ERROR!!!"));
Serial.println("RTC Error!!!");
abort();
}
else {
for (byte i = 0; i < 3; i++) {
waktuSekarang = rtc.now();
sprintf(tanggal, "%04d/%02d/%02d", waktuSekarang.year(),
waktuSekarang.month(), waktuSekarang.day());
//tampilkan tanggal dan waktu
lcd.clear();
lcd.setCursor(3, 0);
lcd.print(tanggal);
Serial.print(tanggal);
Serial.print(" ");
lcd.clear();
if (!sd.begin(chipSelect)) {
lcd.setCursor(0, 0);
lcd.print("Kartu Micro SD");
lcd.setCursor(0, 1);
lcd.print("Tidak Terdeteksi");
Serial.println("Kartu micro SD tidak terdeteksi");
while (1);
}
80
lcd.setCursor(1, 0);
lcd.print("Kartu Micro SD");
lcd.setCursor(3, 1);
lcd.print("Terdeteksi");
Serial.println("kartu micro SD terdeteksi");
}
void loop() {
delay(2000);
float kelembaban = dht.readHumidity();
float suhu = dht.readTemperature();
if (isnan(kelembaban) || isnan(suhu)) {
kelembaban = -99;
suhu = -99;
}
lcd.clear();
waktuSekarang = rtc.now();
sprintf(tanggal, "%02d/%02d/%02d", waktuSekarang.year() - 2000,
waktuSekarang.month(), waktuSekarang.day());
sprintf(waktu, "%02d:%02d", waktuSekarang.hour(), waktuSekarang.minute());
if (dataFile) {
dataFile.print(tanggal);
dataFile.print(" ");
dataFile.print(waktu);
dataFile.print(", Suhu=");
dataFile.print(suhu, 1);
dataFile.print(" °C, Kelembaban=");
dataFile.print(kelembaban, 0);
dataFile.println(" %");
dataFile.close();
}
81
else {
Serial.println("error membuka log.txt");
}
}
82
10. KONEKSI WIFI
Kali ini kita akan belajar melakukan koneksi WiFi dari Wemos D1 Mini ke Access
Point (AP) atau lebih dikenal dengan nama hotspot yang bisa berasal dari
smartphone atau router. Wemos D1 Mini akan dikonfigurasi menjadi station.
#include <ESP8266WiFi.h>
83
void setup() {
Serial.begin(9600);
delay(10);
Serial.println('\n');
WiFi.begin(ssid, password);
Serial.print("Mencoba Terhubung ke ");
Serial.print(ssid); Serial.println(" ...");
int i = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(++i); Serial.print(' ');
}
Serial.println('\n');
Serial.println("Wifi Terhubung!");
Serial.print("alamat IP:\t");
Serial.println(WiFi.localIP());
}
void loop() { }
Ubah variabel ssid sesuai dengan nama hotspot yang akan dikoneksikan.
Lalu kita unggah programnya dengan menekan icon Upload atau tekan Ctrl+U.
Setelah selesai upload, kita buka Serial Monitor . Pastikan kecepatan serial
diatur di 9600 baud.
Pastikan hotspot aktif.
Kita dapat melihat hasil eksekusi program yang mencoba terhubung ke hotspot.
84
C. PENJELASAN SINTAK KONEKSI HOTSPOT
Program ini diawali dengan memasukkan library ESP8266WiFi.h. Sketch dimulai
dengan memasukkan library Wifi ESP8266 dengan perintah #include <
ESP8266WiFi.h>. Kemudian dilanjutkan dengan mendefinisikan variabel ssid dan
password yang akan digunakan. Kita isi variabel ssid dan password sesuai dengan
nama hotspot dan passwordnya. Jika password hotspot tidak ada, maka cukup
ditulis const char* password = "";.
Disini kita akan memberikan kode program yang menggabungkan koneksi WiFi
dengan sensor DHT11, DS1307, LCD 16x2 I2C, dan micro SD ke dalam satu sketch.
Program ini akan mengecek hotspot, terhubung ke hotspot, mengambil data waktu,
suhu, dan kelembaban udara yang ditampilkan ke dalam LCD kemudian disimpan
ke dalam kartu micro SD.
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
#include <SPI.h>
#include "SdFat.h"
85
#include <ESP8266WiFi.h>
//hotspot
const char* ssid = "hollanda";
const char* password = "dunedin1996";
//micro SD
using namespace sdfat;
const uint8_t chipSelect = D8;
SdFat sd;
File dataFile;
//RTC DS1307
RTC_DS1307 rtc;
DateTime waktuSekarang;
char tanggal[10], waktu[10];
//inisialisasi LCD
#define BACKLIGHT_PIN 3
#define I2C_ADDR 0x27
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin,
D6_pin, D7_pin);
void setup() {
Serial.begin(9600);
Serial.println(F("Pemantauan Kualitas Udara Sensor DHT11"));
dht.begin();
lcd.begin(16, 2);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
//tampilan awal
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Pemantau");
lcd.setCursor(2, 1);
lcd.print ("Ruangan IoT");
delay (3000);
lcd.clear();
if (! rtc.begin()) {
lcd.setCursor(2, 0);
lcd.print(F("RTC ERROR!!!"));
Serial.println("RTC Error!!!");
abort();
}
86
else {
for (byte i = 0; i < 3; i++) {
waktuSekarang = rtc.now();
sprintf(tanggal, "%04d/%02d/%02d", waktuSekarang.year(),
waktuSekarang.month(), waktuSekarang.day());
//tampilkan tanggal dan waktu
lcd.clear();
lcd.setCursor(3, 0);
lcd.print(tanggal);
Serial.print(tanggal);
Serial.print(" ");
lcd.clear();
if (!sd.begin(chipSelect)) {
lcd.setCursor(0, 0);
lcd.print("Kartu Micro SD");
lcd.setCursor(0, 1);
lcd.print("Tidak Terdeteksi");
Serial.println("Kartu micro SD tidak terdeteksi");
while (1);
}
lcd.setCursor(1, 0);
lcd.print("Kartu Micro SD");
lcd.setCursor(3, 1);
lcd.print("Terdeteksi");
Serial.println("kartu micro SD terdeteksi");
delay (2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(ssid);
lcd.print(" ");
int i = 0;
while (WiFi.status() != WL_CONNECTED) { // Wait for the Wi-Fi to connect
delay(1000);
Serial.print(++i); Serial.print(' ');
lcd.print(".");
}
lcd.clear();
lcd.print("-Wifi Terhubung-");
lcd.print(WiFi.localIP());
87
Serial.println('\n');
Serial.println("Wifi Terhubung!");
Serial.print("alamat IP:\t");
Serial.println(WiFi.localIP());
void loop() {
delay(2000);
float kelembaban = dht.readHumidity();
float suhu = dht.readTemperature();
if (isnan(kelembaban) || isnan(suhu)) {
kelembaban = -99;
suhu = -99;
}
lcd.clear();
waktuSekarang = rtc.now();
sprintf(tanggal, "%02d/%02d/%02d", waktuSekarang.year() - 2000,
waktuSekarang.month(), waktuSekarang.day());
sprintf(waktu, "%02d:%02d", waktuSekarang.hour(), waktuSekarang.minute());
if (dataFile) {
dataFile.print(tanggal);
dataFile.print(" ");
dataFile.print(waktu);
dataFile.print(", Suhu = ");
dataFile.print(suhu, 1);
dataFile.print(" °C, Kelembaban = ");
dataFile.print(kelembaban, 0);
dataFile.println(" %");
dataFile.close();
88
}
else {
Serial.println("error membuka log.txt");
}
}
89
90
11. CAYENNE MYDEVICES
Setelah kita belajar mengenai cara terhubung ke hotspot, maka saatnya kita untuk
belajar mengirimkan data ke internet. Data yang terkirim akan dapat dilihat secara
real-time dimanapun selama masih terkoneksi dengan jaringan internet. Agar
mempermudah dalam mengirimkan data secara real-time ini telah banyak platform
yang tersedia. Salah satunya yaitu Cayenne myDevices. Inti dari platform ini adalah
visualisasi data. Fitur drag-and-drop memungkinkan pengguna untuk membuat
dashboard untuk memvisualisasikan data yang datang dari perangkat remote yang
terhubung. Ada juga widget untuk menampilkan informasi. Platform ini mendukung
beberapa perangkat seperti Arduino dan juga Raspberry Pi. Selain itu Cayenne
myDevices juga membuka beberapa API untuk integrasi layanan yang mendukung
protokol MQTT. Kita akan belajar bagaimana cara mengirimkan data ke Cayenne
myDevices. Sehingga data dari pembacaan perangkat yang kita buat dapat
ditampilkan pada platform Cayenne myDevices.
Setelah mengklik SIGN UP FREE akan keluar tampilan seperti di bawah ini. Lalu
lakukan pengisian pada kotak yang tersedia > klik Register.
91
92
Setelah registrasi berhasil maka kita akan langsung diarahkan ke halaman
berikut.
Klik Sketch > Include Library > Manage Libraries. Tunggu hingga loading
selesai
Akan muncul jendela Library Manager. Tunggu hingga proses loading selesai.
Proses ini dapat dilihat pada bagian bawah jendela.
93
Pada kotak Filter your search… ketik cayenne. Nanti akan muncul library yang
berhubungan dengan cayenne. Pilih cayenneMQTT. Klik Install.
94
C. PEMBUATAN DASHBOARD PADA CAYENNE
Setelah melakukan instalasi library pada Arduino IDE langkah selanjutnya yaitu
pembuatan Dashboard di Cayenne. Pembuatan dashboard ini melanjutkan langkah-
langkah yang pada bagian 11.A. Langkah pembuatan dashboard di Cayenne sebagai
berikut.
95
Akan muncul halaman pengaturan board. Kita ubah nama alat kita sesuai
dengan yang diinginkan. Pengubahan terletak pada kotak Name Your Device.
Kita salin tiga parameter yaitu MQTT USERNAME, MQTT PASSWORD, dan
CLIENT ID yang akan digunakan dalam sketch Arduino.
96
Sketch ESP8266 akan tampil seperti berikut ini.
Ubah variabel ssid dan password sesuai dengan nama hotspot dan password yang
akan dihubungkan.
97
Lalu kita unggah programnya dengan menekan icon Upload atau tekan Ctrl+U.
Setelah selesai upload, kita buka Serial Monitor . Pastikan kecepatan serial
diatur di 9600 baud.
Pastikan hotspot aktif.
Kita dapat melihat hasil eksekusi program di serial monitor seperti gambar
berikut ini.
Kita dapat melihat pada halaman web pengaturan berubah setelah Wemos D1
Mini terhubung ke jaringan. Hal ini menandakan bahwa perangkat kita sudah
terhubung dengan dashboard Cayenne.
98
12. PENGATURAN DASHBOARD
Pada bagian ini kita akan belajar menggabungkan semua kode yang telah dipelajari
agar dapat mengirimkan data ke Cayenne dan ditampilkan ke dalam dashboard. Kita
juga akan belajar mengubah beberapa hal agar dashboard terlihat lebih cantik.
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
#include <SPI.h>
#include "SdFat.h"
#include <ESP8266WiFi.h>
#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>
//hotspot
const char* ssid = "hollanda";
const char* Password = "blablabla";
//micro SD
using namespace sdfat;
const uint8_t chipSelect = D8;
SdFat sd;
File dataFile;
//RTC DS1307
RTC_DS1307 rtc;
DateTime waktuSekarang;
char tanggal[10], waktu[10];
//inisialisasi LCD
#define BACKLIGHT_PIN 3
#define I2C_ADDR 0x27
#define En_pin 2
#define Rw_pin 1
99
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin,
D6_pin, D7_pin);
void setup() {
Serial.begin(9600);
Serial.println(F("Pemantauan Kualitas Udara Sensor DHT11"));
dht.begin();
lcd.begin(16, 2);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
//tampilan awal
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Pemantau");
lcd.setCursor(2, 1);
lcd.print ("Ruangan IoT");
delay (3000);
lcd.clear();
if (! rtc.begin()) {
lcd.setCursor(2, 0);
lcd.print(F("RTC ERROR!!!"));
Serial.println("RTC Error!!!");
abort();
}
else {
for (byte i = 0; i < 3; i++) {
waktuSekarang = rtc.now();
sprintf(tanggal, "%04d/%02d/%02d", waktuSekarang.year(),
waktuSekarang.month(), waktuSekarang.day());
//tampilkan tanggal dan waktu
lcd.clear();
lcd.setCursor(3, 0);
lcd.print(tanggal);
Serial.print(tanggal);
Serial.print(" ");
lcd.clear();
if (!sd.begin(chipSelect)) {
lcd.setCursor(0, 0);
lcd.print("Kartu Micro SD");
lcd.setCursor(0, 1);
lcd.print("Tidak Terdeteksi");
Serial.println("Kartu micro SD tidak terdeteksi");
100
while (1);
}
lcd.setCursor(1, 0);
lcd.print("Kartu Micro SD");
lcd.setCursor(3, 1);
lcd.print("Terdeteksi");
Serial.println("kartu micro SD terdeteksi");
delay (2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(ssid);
lcd.print(" ");
WiFi.begin(ssid, Password);
Serial.print("Mencoba terhubung ke ");
Serial.print(ssid); Serial.println(" ...");
int i = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(++i); Serial.print(' ');
lcd.print(".");
}
lcd.clear();
lcd.print("-Wifi Terhubung-");
lcd.print(WiFi.localIP());
Serial.println('\n');
Serial.println("Wifi Terhubung!");
Serial.print("alamat IP:\t");
Serial.println(WiFi.localIP());
delay (2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" KONEKSI KE");
lcd.setCursor(0, 1);
lcd.print("CAYENNE MYDEVICE");
Cayenne.begin(username, password, clientID);
delay (2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" TERHUBUNG KE");
lcd.setCursor(0, 1);
lcd.print("CAYENNE MYDEVICE");
}
void loop() {
Cayenne.loop();
delay(2000);
float kelembaban = dht.readHumidity();
float suhu = dht.readTemperature();
if (isnan(kelembaban) || isnan(suhu)) {
kelembaban = -99;
suhu = -99;
}
101
lcd.clear();
waktuSekarang = rtc.now();
sprintf(tanggal, "%02d/%02d/%02d", waktuSekarang.year() - 2000,
waktuSekarang.month(), waktuSekarang.day());
sprintf(waktu, "%02d:%02d", waktuSekarang.hour(), waktuSekarang.minute());
if (dataFile) {
dataFile.print(tanggal);
dataFile.print(" ");
dataFile.print(waktu);
dataFile.print(", Suhu = ");
dataFile.print(suhu, 1);
dataFile.print(" °C, Kelembaban = ");
dataFile.print(kelembaban, 0);
dataFile.println(" %");
dataFile.close();
}
else {
Serial.println("error membuka log.txt");
}
102
B. PENJELASAN SINTAK LIBRARY CAYENNE
Sintak yang digunakan pada sketsa di atas menggunakan beberapa fungsi
dari Library Cayenne. Berikut penjelasan singkat dari fungsi yang digunakan.
Fungsi ini digunakan untuk memulai koneksi antara Wemos D1 Mini dengan server
Cayenne.
Fungsi ini digunakan untuk mengirimkan data ke server cayenne. Sebagai contoh
pada sketsa di atas kita tulis Cayenne.virtualWrite(0, suhu);. Artinya kita
mengirimkan data variabel suhu ke channel 0.
103
Kita akan atur channel 0 dan 1 agar sesuai dengan parameter yang dikirim dengan
langkah-langkah sebagai berikut:
104
Akan muncul jendela baru seperti berikut. Kita ganti nama channel pada kotak
Widget Name dengan nama Suhu.
105
Channel 0 akan berubah menjadi Suhu.
Berikutnya, kita atur channel 1. Klik tanda plus (+) pada sisi kanan channel 1.
Kemudian kita klik icon pengaturan. Kita ubah nama widget dengan Kelembaban.
Kita ubah juga Icon dengan Humidity. Lalu klik save.
106
D. BERBAGI DASHBOARD
Pada bagian terakhir ini kita akan belajar membagi dashboard yang telah
dibuat agar dapat dilihat oleh orang lain dari smartphone, PC, ataupun laptop.
Langkah-langkahnya sebagai berikut:
Kita ketik nama project kita sesuai yang diinginkan. Lalu tekan tombol ceklist.
Akan muncul tampilan project. Untuk menambahkan data dari alat yang telah
kita hubungkan ke project ini, kita cukup tarik device ke dalam project.
Lalu kita pilih parameter yang ingin dimasukkan. Kita ceklist semuanya.
Kemudian tekan tombol Done.
107
Semua parameter akan masuk ke dalam dashboard project.
Agar kita bisa berbagi dashboard dengan orang lain, kita tekan tombol sharing.
Akan muncul jendela baru. Kita pilih opsi berbagi. Jangan lupa untuk menyalin
teks tautan dashboardnya.
108
Orang lain yang mendapatkan tautan akan dapat melihat dashboard kita seperti
gambar berikut ini.
(Afzal, Gondal, Arshad, & Shahid, 2018; Grokhotkov, 2019; Kurniawan, 2015; Marco
Schwartz, 2012; Margolis, 2012; Wang, Huang, & Song, 2019; Waworundeng &
Lengkong, 2018)
109
110
DAFTAR PUSTAKA
Afzal, M., Gondal, H. A. H., Arshad, M. B., & Shahid, M. (2018). IoT Based Real Time
Warehouse Monitoring using Sparkfun ESP8266 Thing Dev and Cayenne
MyDevices. University of Swabi Journal, 2(2), 12–18.
Wang, Y., Huang, Y., & Song, C. (2019). A New Smart Sensing System Using
LoRaWAN for Environmental Monitoring. 2019 Computing, Communications and
IoT Applications, ComComAp 2019, 347–351.
https://doi.org/10.1109/ComComAp46287.2019.9018829
Waworundeng, J., & Lengkong, O. (2018). Sistem Monitoring dan Notifikasi Kualitas
Udara dalam Ruangan dengan Platform IoT Indoor Air Quality Monitoring and
Notification System with IoT Platform. Cogito Smart Journal, 4(1), 94–102.
111
112
BIODATA PENULIS
Hollanda Arief Kusuma, S.IK, M.Si dilahirkan di Ambon tanggal
1 April 1989 dari pasangan Prof. Dr. Ir. Dwi Eny Djoko Setyono
dan Kusmariatin. Sekarang menetap di Tanjungpinang,
Kepulauan Riau sebagai Dosen Teknik Elektro, Fakultas Teknik,
Universitas Maritim Raja Ali Haji. Anak kedua dari tiga
bersaudara ini menyelesaikan pendidikan Strata 1 dan 2 di
Institut Pertanian Bogor Jurusan Ilmu dan Teknologi Kelautan.
Dosen muda ini hobi untuk bereksperimen pada perangkat
mikrokontroler dan IoT.
113
Tertarik dengan dunia Internet of Things (IoT) tapi bingung mau mulai darimana?
Buku ini akan membuat anda untuk mahir membuat perangkat IoT. Buku ini
memandu anda untuk belajar secara sistematik untuk membuat perangkat IoT yang
dapat mengirimkan data ke platform IoT.
Mikrokontroler ESP8266
Arduino IDE untuk ESP8266
Sensor suhu dan kelembaban DHT
LCD 16x2
Micro SD
Koneksi WIFI
Cayenne myDevice