[Tutorial] Cara Streaming Data Internet Realtime Menggunakan Wemos D1 Arduino ESP 8266 dengan Firebase Server dan Android

Pada tutorial ini saya akan membagikan bagaimana cara streaming data online (IOT) dengan menggunakan arduino wemos D1 based ESP8266 dengan server Firebase dan dapat diakses melalui smartphone Android. Namun sebelum itu download dulu library ESP8266 pada arduino IDE kalian.
Berikut langkah-langkahnya :
1. Buat database baru pada Firebase anda, pada link berikut  https://console.firebase.google.com.
    Kemudian beri nama project anda "node-mcu firebase"
2. Kemudian atur pada setelan projek anda dan masuk ke akun layanan sesuai dengan gambar
    dibawah ini:
   



pada bagian akun layanan pilih rahasia basis data dan pilih tambahkan rahasaia


Kemudian copy code tersebut dan simpan pada notepad


3. Kemudian pada database buat lah struktur data seperti pada gambar dibawah ini

    Kemudian setting aturan menjadi true


4. Kemudian download library arduino firebase master pada link berikut ini 

5. Jangan lupa setting arduino board pada Wemos D1 


6. Berikut program Arduino nya :

//
// Copyright 2015 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

// FirebaseRoom_ESP8266 is a sample that demo using multiple sensors
// and actuactor with the FirebaseArduino library.

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

// Set these to run example.
#define FIREBASE_HOST "website firebase anda"
#define FIREBASE_AUTH "kode rahasia firebase"
#define WIFI_SSID "wifi_SSID_anda"
#define WIFI_PASSWORD "wifi_Password_anda"


const int lightSensorPin = A0;
float analog;
float sun;

void setup() {
  Serial.begin(9600);
  pinMode(lightSensorPin, 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("adc", 0);
  Firebase.set("sunlight", 0);
}

int button = 0;
float light = 0.0;

void loop() 
{
  analog = analogRead(lightSensorPin);
  sun = map(analog, 0,1023, 0, 100);
  Firebase.set("adc", analog);
  Firebase.set("sunlight", sun);
  
  Serial.print(analog);
  Serial.print(" # ");
  Serial.print(sun);
  Serial.println();
  delay(100);
}

pada program saya setting websitenya seperti dibawah ini :


Hasilnya jadi seperti ini:


7. Kemudian pada program android nya berikut :

activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent"    
 android:layout_height="match_parent"    
 android:paddingBottom="@dimen/activity_vertical_margin"    
 android:paddingLeft="@dimen/activity_horizontal_margin"    
 android:paddingRight="@dimen/activity_horizontal_margin"    
 android:paddingTop="@dimen/activity_vertical_margin"    
 tools:context="com.example.dimas.firebaseandroid.MainActivity">

<TextView        
  android:layout_width="wrap_content"        
  android:layout_height="wrap_content"        
  android:textAppearance="?android:attr/textAppearanceLarge"        
  android:text="Large Text"        
  android:id="@+id/textView"        
  android:layout_centerHorizontal="true" 
/>

<TextView        
  android:layout_width="wrap_content"        
  android:layout_height="wrap_content"        
  android:textAppearance="?android:attr/textAppearanceLarge"        
  android:text="Large Text"        
  android:id="@+id/textView2"        
  android:layout_below="@+id/textView"        
  android:layout_alignLeft="@+id/textView"        
  android:layout_alignStart="@+id/textView"        
  android:layout_marginTop="155dp" />
</RelativeLayout>

mainactivity.java :
package com.example.dimas.firebaseandroid;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener;

public class MainActivity extends AppCompatActivity {

    Firebase a,b;
    Button btnOn,btnOff;
    TextView datain1,datain2;
    @Override    
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        datain1=(TextView)findViewById(R.id.textView);
        datain2=(TextView)findViewById(R.id.textView2);
        Firebase.setAndroidContext(this);
        a = new Firebase("https://nodemcu-firebase-bfb59.firebaseio.com/adc");
        b= new Firebase("https://nodemcu-firebase-bfb59.firebaseio.com/sunlight");

        a.addValueEventListener(new ValueEventListener() {
            @Override            
            public void onDataChange(DataSnapshot snapshot) {
                System.out.println(snapshot.getValue());  
                Toast.makeText(getBaseContext(), "MASUK", Toast.LENGTH_SHORT).show();
                datain1.setText(snapshot.toString());
            }
            @Override 
            public void onCancelled(FirebaseError error) { }
        });
        b.addValueEventListener(new ValueEventListener() {
            @Override            
             public void onDataChange(DataSnapshot dataSnapshot1) {
                System.out.println(dataSnapshot1.getValue());  
                Toast.makeText(getBaseContext(), "MASUK", Toast.LENGTH_SHORT).show();
                datain2.setText(dataSnapshot1.toString());
            }

            @Override            


             public void onCancelled(FirebaseError firebaseError){ }
        });
    }
}


Berikut Hasilnya :


19 Comments

  1. gan, pernah nampilin data realtime hasil dr sensing ke bentuk grafik di aplikasi android ga?yg dmn data yg ditampilin adalah data yg diambil dr firebase

    ReplyDelete
    Replies
    1. Untuk yang menampilkan ke dalam bentuk grafik sudah saya floorkan di web saya mbak

      Delete
  2. oiya sama nanya juga, kenapa data dari arduino saya gamau masuk ya gan ke firebase?pdhl saya udh ngikutin sesuai instruksi dr agan, dan code gaada yg error. mohon bantuan gan, terimakasih

    ReplyDelete
    Replies
    1. Maaf mbak saya baru bisa balas lama tidak buka blog, kemungkinan alamat wifi atau SSID nya salah mbak jadi Wemos nya gak bisa konek wifi. Semua sudah saya floor disini mbak insaallah bisa kok. Bisa saja di librarynya

      Delete
  3. saya coba pake arduino uno tapi library firebasenya ga cocok apa ya bos? error saat dicompie.

    ReplyDelete
    Replies
    1. setahu saya hanya bisa make modul platform esp** di library firbase-arduino

      Delete
  4. mas saya sudah ikuti instruksi diatas tapi serial monitor IDE nya udh berubah2 sesuai cahaya tapi di firebasenya gaberubah2 seperti serial monitor IDE itu kenapa ya kendalanya ? terimakasih

    ReplyDelete
  5. mas, kalo pakai 2 sensor gimana ?
    programnya dipisah apa digabung

    ReplyDelete
    Replies
    1. kalau pakai dua sensor sama seperti di atas tapi harus sesuai format kirim protokolnya. Biar nanti di androidnya bisa tau sensor yang nomor 1 sma 2 yang mana

      Delete
  6. gan pake arduino NANO bisa nggak? pake esp 8266 yang 01?

    ReplyDelete
    Replies
    1. kalau pakai Nano bisa aja asal tetep pakek ESP8266 atau modul wifi lain. ntar data nya kirim dari rx/tx nano ke modul wifi. Saya pakai wemos karena kan udah include di dalamnya esp8266 jadi lebih simpel

      Delete
  7. Mas kalau untuk mengkoneksikanke raspbarry bagaimana yah mas apakah bsa saya lagi mengerjakan Raspbarry koneksi ke googl maps

    ReplyDelete
    Replies
    1. bisa mas tinggal nanti masukkan platform service nya google maps ke ke android, tapi harus daftar dulu di google API klo gk salah namanya. Klo raspeberry misal buat komunikasi data mending pakai node JS aja lebih mudah. Bisa di chechk di Tutorial saya yg raspberry ke node JS.

      Delete
  8. mas kalo firebasenya gk dibuka apakah masih tetep bisa ngirim data ke androidnya?

    ReplyDelete
  9. bisa mas, hampir sama kok cuma kalau pakai wemos D1 ini lebih praktis

    ReplyDelete
Previous Post Next Post