프로그래밍

파이어베이스 연결해서 아두이노 제어 하는 앱 만들기

안드로이드 스튜디오
반응형
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context=".MainActivity"
    android:orientation="vertical"
    android:layout_gravity="center">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="창문"
        android:textSize="40dp"
        android:textStyle="bold"
        android:textColor="#000000"
        android:gravity="center"/>

    <TextView
        android:id="@+id/window"
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="창문이 열렸습니다"
        android:gravity="center"
        android:textSize="45dp"/>

    <TextView
        android:layout_marginTop="50dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="내부 공기"
        android:textSize="40dp"
        android:textColor="#000000"
        android:textStyle="bold"
        android:gravity="center"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center">

        <TextView
            android:layout_marginTop="10dp"
            android:text="습도 : "
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="50dp"/>
        <TextView
            android:id="@+id/Hum"
            android:layout_marginTop="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0"
            android:textSize="50dp"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center">
        <TextView
            android:text="온도 : "
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="50dp"/>

        <TextView
            android:id="@+id/Tem"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0"
            android:textSize="50dp"/>
    </LinearLayout>

    <LinearLayout
        android:layout_marginTop="50dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">
        <Button
            android:layout_marginRight="8dp"
            android:layout_marginLeft="8dp"
            android:id="@+id/light"
            android:layout_weight="1"
            android:text="불 끄기"
            android:textSize="25dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/door"
            android:layout_weight="1"
            android:layout_marginRight="8dp"
            android:text="문 열기"
            android:textSize="25dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>


</LinearLayout>
package com.example.smart;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class MainActivity extends AppCompatActivity {

    private TextView window,hum,tem;
    private Button light,door;

    DatabaseReference Root = FirebaseDatabase.getInstance().getReference();
    DatabaseReference WinRef = Root.child("light").child("Window");
    DatabaseReference HumRef = Root.child("humidity");
    DatabaseReference TemRef = Root.child("temperature");
    DatabaseReference lightRef = Root.child("light").child("Light");
    DatabaseReference DoRef = Root.child("light").child("Door");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        window = findViewById(R.id.window);
        hum = findViewById(R.id.Hum);
        tem = findViewById(R.id.Tem);
        light = findViewById(R.id.light);
        door = findViewById(R.id.door);

        light.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if ("불 끄기".equals(light.getText()))
                    lightRef.setValue("0");
                else
                    lightRef.setValue("1");
            }
        });

        door.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if ("문 열기".equals(door.getText()))
                    DoRef.setValue("0");
                else
                    DoRef.setValue("1");
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        final AlertDialog.Builder Builder = new AlertDialog.Builder(this);
        Builder.setTitle("경고");
        Builder.setMessage("창문을 열었습니까?");
        Builder.setPositiveButton("예", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        });
        Builder.setNegativeButton("아니요", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getApplicationContext(),"창문을 확인해 주세요",Toast.LENGTH_LONG).show();
            }
        });

        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("더워요");
        builder.setMessage("에어컨을 켜세요");
        builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        });
        WinRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String text = String.valueOf((Long) dataSnapshot.getValue());
                int a = Integer.parseInt(text);
                if (a == 1) {
                    window.setText("창문이 열렸습니다.");
                    Builder.show();
                }
                else
                    window.setText("창문이 닫혔습니다.");
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
        HumRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String hum1 = String.valueOf((Long) dataSnapshot.getValue());
                hum.setText(hum1);
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
        TemRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String tem2 = String.valueOf((Long) dataSnapshot.getValue());
                int tem1 =  Integer.parseInt(tem2);
                tem.setText(tem2);
                if (tem1>=28)
                    builder.show();
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
        lightRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String li = String.valueOf(dataSnapshot.getValue());
                int lig = Integer.parseInt(li);
                if (lig == 1)
                    light.setText("불 끄기");
                else
                    light.setText("불 켜기");
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
        DoRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String Do = String.valueOf(dataSnapshot.getValue());
                int doo = Integer.parseInt(Do);
                if (doo==1) //1 닫힘
                    door.setText("문 열기");
                else
                    door.setText("문 닫기");
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
    }
}

 

아두이노는 https://practicecprogram.tistory.com/101

 

아두이노, 파이어베이스, 앱인벤터 연결 - 온습도 센서

이번에 새로 파이어베이스 라이브러리가 바뀌면서 전에 되던 코드가 되지 않았다. 혹시 몰라서 파이어베이스랑 연결하지 않고, 온습도 측정하는 코드만 따로 해봤는데 이 코드는 잘 됐다. 파이�

practicecprogram.tistory.com

 

설명 : 파이어베이스와 연결해서 버튼 눌러서 값 변경 -> 아두이노에서 파이어베이스 값 변경을 받아와서 제어

        아두이노에서 파이어베이스 값 변경 -> 안드로이드에서 값이 변하는 것을 인식하고 화면 구성 변경

반응형