Anda di halaman 1dari 17

LAPORAN KE 11

PRAKTIKUM SISTEM TERBENAM

Disusun oleh
Bagus Slamet Oetomo(3.34.17.1.07)

PROGRAM STUDI TEKNIK INFORMATIKA


JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI SEMARANG
2019

1
BAB 14
NODEMCU, FIREBASE, DAN ANDROID

Tujuan
1. Mahasiswa mamahami tentang Arduino UNO dan dasar-dasar Arduino Ethernet
shield.
2. Mahasiswa mampelajari cara mengendalikan perangkat dari Protocol Internet.
3. Mahasiswa mempelajari cara membangun aplikasi android sederhana untuk
menangani permintaan klien dan mengontrol LED.
Peralatan
1. Sebuah Komputer
2. Satu set trainer mikrokontroler
Dasar Teori

NodeMCU
NodeMCU Dev Dewan berdasarkan esp8266 Sistem luas dieksplorasi on Chip dari
Expressif. Ini gabungan fitur WIFI accesspoint dan stasiun + mikrokontroler dan
menggunakan bahasa pemrograman berbasis LUA sederhana. Spesifikasi ESP8266
NodeMCU :
 Arduino-Seperti perangkat keras IO
 API Event-didorong untuk aplikasi jaringan
 10 GPIOs D0-D10, fungsi PWM, IIC dan SPI communicaiton, 1-Wire dan ADC A0
dll semua dalam satu papan
 Jaringan Wifi (bisa menggunakan sebagai titik akses dan / atau stasiun, host
webserver), terhubung ke internet untuk mengambil atau meng-upload data.
 Harga terjangkau, dengan beberapa ribu rupiah siap membuat sistem untuk
Internet of Things (IoT).

2
Gambar NodeMCU v.3 (Lolin)

Baru-baru ini, telah ada ketertarikan dalam sistem pemrograman ESP8266


menggunakan Arduino IDE. Pemrograman, dari ESP8266 menggunakan Arduino
IDE tidak kompatibel sepenuhnya, sampai dikonfigurasi dengan benar. Terutama
karena, pin Input dan output memiliki pemetaan yang berbeda pada
NodeMCU daripada mereka pada chip ESP8266 yang sebenarnya.
Pada gambar 13.2 dijelaskan tentang bagaimana penggunaan pin/port program ESP-
12E NodeMCU menggunakan IDE Arduino.
Catatan :

 Untuk menggunakan NodeMCU V1 atau V2 atau V3 dan kode program ditulis


dengan menggunakan Arduino IDE, kita tidak perlu flash dengan firmware
menggunakan nodemcu flasher. Hal ini (flash) diperlukan hanya jika kita berniat
untuk program NodeMCU menggunakan skrip Lua dengan explorer dll.
 Chip ESP8266 membutuhkan 3.3V tegangan listrik. Seharusnya tidak didukung
dengan 5 volt seperti papan Arduino lainnya.
 NodeMCU ESP-12E dapat dihubungkan ke 5Vusing konektor micro USB atau pin
Vin.
 Pin I/O dari ESP8266 berkomunikasi atau input / output max 3.3V saja. yaitu pin
TIDAK 5V input toleran. Dalam kasus ini harus ada antarmuka dengan 5V I/O pin,
sehingga perlu menggunakan konversi (baik dibangun sendiri menggunakan
resistor pembagi tegangan atau menggunakan menggunakan konverter bertingkat.

3
Gambar Pin Mapping NodeMCU v.3 VS Arduino

Android Studio

Android Studio adalah Lingkungan Pengembangan Terpadu (Integrated


Development Environment/IDE) resmi untuk pengembangan aplikasi Android, yang
didasarkan pada IntelliJ IDEA. Selain sebagai editor kode dan fitur developer IntelliJ
yang andal, Android Studio menawarkan banyak fitur yang meningkatkan
produktivitas Anda dalam membuat aplikasi Android, seperti:

 Sistem build berbasis Gradle yang fleksibel


 Emulator yang cepat dan kaya fitur
 Lingkungan terpadu tempat Anda bisa mengembangkan aplikasi untuk semua
perangkat Android
 Terapkan Perubahan untuk melakukan push pada perubahan kode dan
resource ke aplikasi yang sedang berjalan tanpa memulai ulang aplikasi
 Template kode dan integrasi GitHub untuk membantu Anda membuat fitur
aplikasi umum dan mengimpor kode sampel
 Framework dan fitur pengujian yang lengkap

4
 Fitur lint untuk merekam performa, kegunaan, kompatibilitas versi, dan
masalah lainnya
 Dukungan C++ dan NDK
 Dukungan bawaan untuk Google Cloud Platform, yang memudahkan
integrasi Google Cloud Messaging dan App Engine
Secara default, Android Studio menampilkan file project Anda dalam tampilan
project Android, seperti yang ditunjukkan pada gambar 1. Tampilan ini disusun
menurut modul untuk memberikan akses cepat ke file sumber utama project dalam
suatu project. Semua file build terlihat di tingkat teratas di bagian Gradle Script dan
setiap modul aplikasi berisi folder berikut:
 manifests: Berisi file AndroidManifest.xml.
 java: Berisi file kode sumber Java, termasuk kode pengujian JUnit.
 res: Berisi semua resource non-kode, seperti tata letak XML, string UI, dan
gambar bitmap.

Gambar File project dalam tampilan Android.

5
Android Studio memiliki tiga jenis pelengkapan kode, yang dapat diakses
menggunakan pintasan keyboard.

Tabel 1. Pintasan keyboard untuk pelengkapan kode.

Jenis Deskripsi Windows Mac


dan Linux
Basic Menampilkan saran dasar untuk Control+S Control+S
Completio variabel, jenis, metode, ekspresi, pace pace
n dan sebagainya. Jika memanggil
Basic Completion dua kali berturut-
turut, Anda akan melihat lebih
banyak hasil, termasuk anggota
pribadi dan anggota statis yang tidak
diimpor.
Smart Menampilkan opsi yang relevan Control+S Control+S
Completio berdasarkan konteks. Smart hift+Space hift+Space
n Completion mengetahui jenis dan
alur data yang diharapkan. Jika
Anda memanggil Smart Completion
dua kali berturut-turut, Anda akan
melihat lebih banyak hasil, termasuk
chain.
Statement Melengkapi pernyataan saat ini Control+S Shift+Co
Completio secara otomatis, seperti hift+Enter mmand+E
n menambahkan tanda kurung, tanda nter
kurung siku, tanda kurung kurawal,
pemformatan, dll. yang tidak
lengkap.

User juga dapat melakukan perbaikan cepat dan menampilkan tindakan maksud
dengan menekan Alt+Enter.

6
Firebase
Firebase Realtime Database adalah database yang di-host di cloud. Data
disimpan sebagai JSON dan disinkronkan secara realtime ke setiap klien yang
terhubung. Ketika Anda membuat aplikasi lintas-platform dengan SDK Android, iOS,
dan JavaScript, semua klien akan berbagi sebuah instance Realtime Database dan
menerima update data terbaru secara otomatis.
Kemampuan utama

Realtime Sebagai ganti permintaan HTTP biasa, Firebase Realtime


Database menggunakan sinkronisasi data—setiap kali data
berubah, semua perangkat yang terhubung akan menerima
update dalam waktu milidetik. Memberikan pengalaman yang
kolaboratif dan imersif tanpa perlu memikirkan kode jaringan.
Offline Aplikasi Firebase tetap responsif bahkan saat offline karena SDK
Firebase Realtime Database menyimpan data ke disk. Setelah
konektivitas pulih, perangkat klien akan menerima setiap
perubahan yang terlewat dan melakukan sinkronisasi dengan
status server saat ini.
Dapat Firebase Realtime Database dapat diakses secara langsung dari
Diakses dari perangkat seluler atau browser web; server aplikasi tidak
Perangkat diperlukan. Keamanan dan validasi data dapat diakses melalui
Klien Aturan Keamanan Firebase Realtime Database yang merupakan
kumpulan aturan berbasis ekspresi dan dijalankan ketika data
dibaca atau ditulis.
Menskalakan Dengan Firebase Realtime Database pada paket harga Blaze,
di beberapa Anda dapat mendukung kebutuhan data aplikasi Anda pada skala
database tertentu dengan membagi data Anda di beberapa instance
database di project Firebase yang sama. Menyederhanakan
autentikasi dengan Firebase Authentication pada project Anda
dan mengautentikasi pengguna di instance database Anda.
Mengontrol akses ke data di tiap database dengan Aturan
Firebase Realtime Database khusus untuk tiap instance database.

7
Langkah Kerja

Controlling satu buah LED melalui Firebase


Kode Program
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>

#define FIREBASE_HOST "oneled-4f0d1.firebaseio.com"


#define FIREBASE_AUTH "O5YS9SmRV0TkR54r5W1U59yWL677Au73JS3ypQo2"
#define WIFI_SSID "Indonesia"
#define WIFI_PASSWORD "shafiraarlina"

String fireStatus = "";


void setup() {
Serial.begin(115200);
delay(1000);
pinMode(D3, OUTPUT);

//pinMode(LED_BUILTIN, OUTPUT);
pinMode(led, OUTPUT);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to ");
Serial.print(WIFI_SSID);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.print("Connected to ");
Serial.println(WIFI_SSID);
Serial.print("IP Address is : ");
Serial.println(WiFi.localIP());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.setString("led/ledstatus", "OFF");
}

void loop() {
fireStatus = Firebase.getString("led/ledstatus");
if (fireStatus == "ON") {
Serial.println("Led Turned ON");
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(D3, HIGH);
delay(100);
}
else if (fireStatus == "OFF") {
Serial.println("Led Turned OFF");
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(D3, LOW);
delay(100);
}
else {
Serial.println("Wrong Credential! Please send ON/OFF");
}
}

8
Rangkaian
Buat rangkaian nodemcu seperti berikut

Hasil
 Saat LED Status = 1

 Saat LED Status = 0

9
Controlling Tiga Buah LED Melalui Firebase dan Android
Rangkaian
Buat rangkaian pada nodeMcu seperti berikut

Kode Program
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>

#define FIREBASE_HOST "fir-lolin.firebaseio.com"


#define FIREBASE_AUTH
"HWreQjx90ywqS29Ybuh6cUrLvsPmGq6Npz5eIM2A"

#define WIFI_SSID "?"


#define WIFI_PASSWORD "qwerty779"

void setup() {
Serial.begin(115200);
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(D3, OUTPUT);

// connect to wifi.
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("connecting");

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


Serial.print(".");
delay(500);
}

Serial.println();
Serial.print("connected: ");
Serial.println(WiFi.localIP());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}

void loop() {
// get value

String led1 = Firebase.getString("led/led1");


String led2 = Firebase.getString("led/led2");
String led3 = Firebase.getString("led/led3");

// handle error
if (led1 == "ON") {
Serial.println("LED ON");
digitalWrite(D1,HIGH);
}

10
else if(led1 == "OFF") {
Serial.println("LED OFF");
digitalWrite(D1,LOW);
}

// handle error
if (led2 == "ON") {
Serial.println("LED 2 ON");
digitalWrite(D2,HIGH);
}
else if(led2 == "OFF") {
Serial.println("LED 2 OFF");
digitalWrite(D2,LOW);
}

// handle error
if (led3 == "ON") {
Serial.println("LED 3 ON");
digitalWrite(D3,HIGH);
}
else if(led3 == "OFF") {
Serial.println("LED 3 OFF");
digitalWrite(D3,LOW);
}

delay(10);
}

Hasil
 LED 1 Menyala

11
 LED 2 Menyala

 LED 3 Menyala

Controlling Tiga Buah LED dan Menampilkan Nilai Sensor LDR (Lumen)
Melalui Firebase dan Android

Rangkaian
Buat rangkaian sebagai berikut

12
Kode Program
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>

#define FIREBASE_HOST "fir-lolin.firebaseio.com"


#define FIREBASE_AUTH
"HWreQjx90ywqS29Ybuh6cUrLvsPmGq6Npz5eIM2A"

#define WIFI_SSID "?"


#define WIFI_PASSWORD "qwerty779"
float resolution=3.3/1023;
float lumen = 0;
const int ldrPin = A0;
void setup() {
Serial.begin(9600);
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(D3, OUTPUT);
pinMode(A0, INPUT);
// connect to wifi.
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("connecting");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.print("connected: ");
Serial.println(WiFi.localIP());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.set("LED_STATUS", 0);
}
int n = 0;
void loop() {
// get value

String led1 = Firebase.getString("led/led1");


String led2 = Firebase.getString("led/led2");
String led3 = Firebase.getString("led/led3");

if (led1 == "OFF"){
Serial.println("LED1 OFF");
digitalWrite(D1,LOW);
delay(10);
}
else if (led1 == "ON"){
Serial.println("LED1 ON");
digitalWrite(D1,HIGH);
delay(10);
}
if (led2 == "OFF"){
Serial.println("LED2 OFF");
digitalWrite(D2,LOW);
delay(10);
}
else if (led2 == "ON"){
Serial.println("LED2 ON");
digitalWrite(D2,HIGH);
delay(10);
}
if (led3 == "OFF"){
Serial.println("LED3 OFF");
digitalWrite(D3,LOW);
delay(10);
}

13
else if (led3 == "ON"){
Serial.println("LED3 ON");
digitalWrite(D3,HIGH);

}
delay(10);
float suhu = ((analogRead(A0) * resolution) * 100)+23.89;
// Read temperature as Celsius (the default)
Serial.print("Suhu: "); Serial.print(suhu);
Serial.println("°C ");
convert integer temperature to string temperature
delay(10);
Firebase.setFloat("sensor/suhu", suhu);

}
Hasil
 LED Menyala

 Nilai Suhu

Controlling Tiga Buah LED dan Menampilkan Nilai Sensor LM35 (Suhu)
Melalui Firebase dan Android

14
Rangkaian

Kode Program
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>

#define FIREBASE_HOST "fir-lolin.firebaseio.com"


#define FIREBASE_AUTH
"HWreQjx90ywqS29Ybuh6cUrLvsPmGq6Npz5eIM2A"

#define WIFI_SSID "?"


#define WIFI_PASSWORD "qwerty779"
float resolution=3.3/1023;
float lumen = 0;
const int ldrPin = A0;
void setup() {
Serial.begin(9600);
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(D3, OUTPUT);
pinMode(A0, INPUT);
// connect to wifi.
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("connecting");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.print("connected: ");
Serial.println(WiFi.localIP());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.set("LED_STATUS", 0);
}
int n = 0;
void loop() {
// get value

String led1 = Firebase.getString("led/led1");


String led2 = Firebase.getString("led/led2");
String led3 = Firebase.getString("led/led3");

if (led1 == "OFF"){
Serial.println("LED1 OFF");
digitalWrite(D1,LOW);
delay(10);
}
else if (led1 == "ON"){
Serial.println("LED1 ON");
digitalWrite(D1,HIGH);

15
delay(10);
}
if (led2 == "OFF"){
Serial.println("LED2 OFF");
digitalWrite(D2,LOW);
delay(10);
}
else if (led2 == "ON"){
Serial.println("LED2 ON");
digitalWrite(D2,HIGH);
delay(10);
}
if (led3 == "OFF"){
Serial.println("LED3 OFF");
digitalWrite(D3,LOW);
delay(10);
}
else if (led3 == "ON"){
Serial.println("LED3 ON");
digitalWrite(D3,HIGH);

}
delay(10);
int ldr = (analogRead(A0));
Serial.print("Lumen: "); Serial.println(ldr);
delay(10);
Firebase.setInt("sensor/lumen", ldr);
}

16
Hasil

17

Anda mungkin juga menyukai