파이어베이스 연결해서 아두이노 제어 하는 앱 만들기
안드로이드 스튜디오반응형
<?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
설명 : 파이어베이스와 연결해서 버튼 눌러서 값 변경 -> 아두이노에서 파이어베이스 값 변경을 받아와서 제어
아두이노에서 파이어베이스 값 변경 -> 안드로이드에서 값이 변하는 것을 인식하고 화면 구성 변경
반응형
'안드로이드 스튜디오' 카테고리의 다른 글
| 안드로이드 스튜디오 DB- 파이어 베이스 (firebase)2 (0) | 2020.05.24 |
|---|---|
| 안드로이드 스튜디오 DB- 파이어 베이스 (firebase)1 (0) | 2020.05.24 |
| 추가) recyclerview (0) | 2020.05.17 |
| 안드로이드 스튜디오 RecyclerView (0) | 2020.05.10 |
| 안드로이드 스튜디오 프래그먼트 2 (0) | 2020.05.09 |