Disusun oleh
Bagus Slamet Oetomo(3.34.17.1.07)
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)
3
Gambar Pin Mapping NodeMCU v.3 VS Arduino
Android Studio
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.
5
Android Studio memiliki tiga jenis pelengkapan kode, yang dapat diakses
menggunakan pintasan keyboard.
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
7
Langkah Kerja
//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
9
Controlling Tiga Buah LED Melalui Firebase dan Android
Rangkaian
Buat rangkaian pada nodeMcu seperti berikut
Kode Program
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
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");
Serial.println();
Serial.print("connected: ");
Serial.println(WiFi.localIP());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
void loop() {
// get value
// 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>
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>
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