Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 130 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
130
Dung lượng
3,99 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ, TRUYỀN THÔNG THIẾT KẾ HỆ THỐNG TRUY CẬP VÀO RA KHU NHÀ TRỌ GVHD:NGUYỄN VĂN HIỆP SVTT:NGUYỄN THÀNH PHÁT ĐẠT SVTT:PHẠM PHONG PHÚ SKL005414 Tp Hồ Chí Minh, 2019 LỜI CẢM ƠN Để hoàn thành đồ án tốt nghiệp này, lời chúng em xin cảm ơn sâu sắc đến thầy Ths Nguyễn Văn Hiệp tận tình hướng dẫn bảo chúng em suốt trình thực đồ án Chúng em xin chân thành cảm ơn quý thầy, cô trường Đại Học Sư Phạm Kỹ Thuật TP.HCM, đặc biệt thầy cô mơn Điện tử, truyền thơng nhiệt tình giúp đỡ, truyền đạt kiến thức suốt trình học tập nhóm chúng em trường Những kiến thức tiếp thu trình học tập thực tế khơng tảng cho q trình thực đồ án tốt nghiệp mà hành trang quý báu cho tương lai chúng em Cuối cùng, xin cảm ơn tập thể lớp 15141CL3 bạn chung chuyên ngành nhiệt tình hỗ trợ giúp đỡ nhóm suốt thời gian học tập Đặc biệt, chúng xin gửi lời cảm ơn trân trọng đến cha mẹ, người ủng hộ, động viên nguồn động lực cho chúng cố gắng phấn đấu đường học tập Người thực đề tài Nguyễn Thành Phát Đạt Phạm Phong Phú i TĨM TẮT Ngày nay, cơng nghệ thực chiếm phần lớn quan trọng hầu hết tất lĩnh vực phổ biến toàn giới Việc áp dụng công nghệ làm công cụ để quản lý khu nhà Việt Nam chưa phát triển mạnh, nhằm khắc phục việc truy cập vào an ninh khu nhà trọ, thêm vào việc lập trình ứng dụng điện thoại vào sản phẩm IoT ngày phổ biến có khả điều khiển từ xa nên nhóm chúng em định chọn đề tài Thiết kế thi công hệ thống truy cập vào khu nhà trọ Với mục đích muốn tiếp cận cơng nghệ IoT mảng lập trình ứng dụng điện thoại di động chúng em mong muốn tự tạo hệ thống giúp người dùng sử dụng để giao tiếp từ xa, có khả nhận biết cho phép nhân viên giao hàng hay người thân quen vào khu trọ, sử dụng kiến thức học môn học lập trình Android ứng dụng điều khiển dựa tảng mã nguồn mở lập trình ứng dụng, chúng em tạo thành công ứng dụng hệ thống truy cập vào khu nhà trọ thơng qua WiFi Trong q trình thực đề tài nhóm chúng em cố gắng hồn thành thật tốt nhiệm vụ yêu cầu đặt nhiều hạn chế mặt kiến thức nên chắn không tránh khỏi chập chờn, thiếu sót Mong q thầy/cơ bạn thơng cảm, nhóm biết ơn mong muốn nhận ý kiến đóng góp tích cực từ phía q thầy/cơ bạn sinh viên đề tài ii DANH MỤC HÌNH ẢNH Hình 1: Agora.io Hình 2: Firebase Hình 3: Cách giao chuẩn SPI Hình 4: Công nghệ RFID .9 Hình 5: Hoạt động thẻ RFID đầu đọc Hình 1: Sơ đồ khối hệ thống………………………………………………………12 Hình 2: ESP8266 NodeMCU 15 Hình 3: Sơ đồ chân ESP8266 NodeMCU 17 Hình 4: Module RFID RC522 18 Hình 5: Nguồn cho ESP8266 NodeMCU 19 Hình 6: Điện thoại thơng minh 20 Hình 7: Đèn led 20 Hình 8: Động servo SG90 22 Hình 9: Cảm biến DHT11 23 Hình 10: Điện thoại thông minh 24 Hình 11: Sơ đồ nguyên lí mạch cổng 24 Hình 12: Sơ đồ ngun lí mạch phịng 25 Hình 13: Mơ hình tổng quan phần mềm 25 Hình 14: Giao diện hiển thị ban đầu app 26 Hình 15: Giao diện app đặt cổng 27 Hình 16: Giao diện kết nối gọi thành công 27 Hình 17: Giao diện app đặt phòng 28 Hình 18: Giao diện có gọi tới phòng 28 Hình 19: Sơ đồ tồn hệ thống 29 Hình 1: Phần mềm Altium Designer………………………………………………… 32 Hình 2: Sơ đồ mạch in PCB 34 Hình 3: Mạch hồn chỉnh 34 Hình 4: Lưu đồ điều khiển chương trình vi xử lí 35 Hình 5: Chu trình hoạt động phần mềm Arduino IDE 36 Hình 6: Giao diện Arduino IDE 36 Hình 7: Phần mềm Android Studio 38 Hình 8: Đặt tên cho Project Android Studio 38 Hình 9: Chọn phiên Android mà ứng dụng chạy 39 Hình 10: Chọn loại Activity xuất ban đầu 40 iii Hình 11: Đặt tên cho Activity Layout 40 Hình 12: Tổng quan cấu tạo app cổng 44 Hình 1: Phần mặt trước mơ hình………………………………………………… 61 Hình 2: Phần bên hơng mơ hình 62 Hình 3: Tồn mơ hình chụp từ cao 62 Hình 4: Cổng mở 63 Hình 5: Kết nối giao tiếp người cổng người phòng 64 iv DANH MỤC BẢNG BIỂU Bảng 1: Các linh kiện sử dụng mạch vi xử lí 33 v DANH MỤC CÁC TỪ VIẾT TẮT URL: Uniform Resource Locator RTC: Real Time Clock SDK: Software Development Kit RFID: Radio Frequency Identification SPI: Serial Peripheral Interface LAN: Local Area Network AIDC: Automatic Identification and Data Capture I/O: Input/Output TFT: Thin Film Transistor LCD: Liquid crystal display LED: Light Emitting Diode PWM: Pulse Width Modulation PCB: Printed circuit board IDE : Intergrated Development Environment API: Application Programming Interface App: Application vi MỤC LỤC LỜI CẢM ƠN i TÓM TẮT .ii DANH MỤC HÌNH ẢNH iii DANH MỤC BẢNG BIỂU .v DANH MỤC CÁC TỪ VIẾT TẮT vi CHƯƠNG 1: TỔNG QUAN 1.1 Đặt vấn đề: 1.2 Lý chọn đề tài: .1 1.3 Mục tiêu: 1.4 Nội dung nghiên cứu: 1.5 Giới hạn: .2 1.6 Bố cục: CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 An ninh vào .3 2.2.1 Giới thiệu truy cập vào 2.2.2 Tiện ích việc điều khiển truy cập vào từ xa 2.2 Cách thức truyền đạt liệu hình ảnh, âm thơng qua Wifi: 2.2.1 Giới thiệu Agora: 2.2.2 Các dịch vụ Agora: 2.3 Cơ sở liệu Firebase: 2.2.1 Giới thiệu Firebase: 2.2.2 Đặc điểm Firebase: 2.2.3 Các dịch vụ Firebase: 2.4 Công nghệ RFID 2.4.1 Giới thiệu chuẩn giao tiếp SPI .8 2.4.2 Cấu trúc đặc điểm hệ thống RFID .8 2.4.3 Sử dụng công nghệ RFID truy cập vào 10 CHƯƠNG 3: TÍNH TỐN - THIẾT KẾ HỆ THỐNG 12 3.1 Giới thiệu hệ thống 12 3.2 Sơ đồ khối hệ thống 12 3.2.1 Sơ đồ khối cổng 13 3.2.2 Sơ đồ khối phòng 13 3.3 Thiết kế sơ đồ nguyên lí 13 3.3.1 Thiết kế sơ đồ nguyên lí cổng 13 3.3.2 Thiết kế sơ đồ ngun lí phịng 22 3.3.6 Sơ đồ nguyên lí mạch cổng 24 3.3.7 Sơ đồ nguyên lí mạch phòng 25 3.4 Thiết kế ứng dụng 25 3.5 Sơ đồ hệ thống 29 CHƯƠNG 4: THI CƠNG MẠCH – VIẾT CHƯƠNG TRÌNH 31 4.1 Thi công mạch PCB 31 4.1.1 Các linh kiện sử dụng 32 4.1.1 Mạch in PCB 34 4.1.1 Mạch hoàn chỉnh 34 4.2 Viết chương trình điều khiển 35 4.2.1 Lưu đồ giải thuật 35 4.2.2 Tổng quan phần mềm Arduino IDE 35 4.2.3 Android Studio 37 a Giới thiệu Android Studio 37 b Tạo file project 38 4.2.4 Chương trình điều khiển 41 CHƯƠNG 5: KẾT QUẢ THỰC HIỆN 61 5.1 Mơ hình hệ thống 61 5.2 Kết 63 5.2.1 Kết thực 63 5.2.2 Nhận xét 64 5.2.3 Đánh giá 65 CHƯƠNG 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 66 6.1 Kết luận 66 6.2 Hướng phát triển 66 TÀI LIỆU THAM KHẢO 67 PHỤ LỤC 68 android:layout_weight="1" android:orientation="horizontal" android:layout_marginLeft="40dp" android:layout_marginRight="40dp" > Phone_coming.java package io.agora.tutorials1v1vcall; import import import import import android.content.Context; android.content.Intent; android.content.SharedPreferences; android.media.MediaPlayer; android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ImageView; 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 phone_coming extends AppCompatActivity { private static int SPLASH_TIME_OUT=3000; private DatabaseReference mdatabaseRef,databaseRefGate,databaseReferenceCall,databaseReferencechannel, databaseReferenceCheck; private String mTemperature,mMoisture,channelStatus, Chanel; Bundle extras = new Bundle(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_phone_coming); 103 Init(); //} } private void Sleep() { new Handler().postDelayed(new Runnable() { @Override public void run() { databaseRefGate=FirebaseDatabase.getInstance().getReference().child("Infomations"); databaseRefGate.child("Gate").setValue("close"); } },SPLASH_TIME_OUT); } private void Init() { final MediaPlayer phoneComingSound=MediaPlayer.create(this,R.raw.sound_phone_coming); final TextView textViewTemperature=(TextView)findViewById(R.id.Temperature); final TextView textViewMoisture=(TextView)findViewById(R.id.Moisture); final TextView textViewMoKhoa=(TextView)findViewById(R.id.txtMoKhoa); final TextView textViewPhoneCall=(TextView)findViewById(R.id.txtPhoneCall); final TextView textViewTemperatureName=(TextView)findViewById(R.id.txtTemperature); final TextView textViewMoisureName=(TextView)findViewById(R.id.txttMoisture); final ImageView imageViewKeypad=(ImageView)findViewById(R.id.imgKeypad_) ; final ImageView imageViewKeypadOutLine=(ImageView)findViewById(R.id.imgKeypadOutLine) ; final ImageView imageViewKeyPadSolid=(ImageView)findViewById(R.id.imgKeyPadSolid) ; final ImageView imageViewMuteMic=(ImageView)findViewById(R.id.imgMuteMic) ; final ImageView imageViewMuteSpeaker=(ImageView)findViewById(R.id.imgMuteSpeaker) ; final ImageView imageViewSpeaker=(ImageView)findViewById(R.id.imgSpeaker) ; // button final ImageView buttonAccept=(ImageView)findViewById(R.id.btn_accept) ; final ImageView buttonReject=(ImageView)findViewById(R.id.btn_reject) ; final ImageView buttonMoKhoa=(ImageView)findViewById(R.id.btn_MoKhoa); // textViewTemperature.setVisibility(View.VISIBLE); textViewMoisture.setVisibility(View.VISIBLE); textViewTemperatureName.setVisibility(View.VISIBLE); textViewMoisureName.setVisibility(View.VISIBLE); textViewMoKhoa.setVisibility(View.VISIBLE); textViewPhoneCall.setVisibility(View.INVISIBLE); imageViewKeypad.setVisibility(View.INVISIBLE); imageViewKeypadOutLine.setVisibility(View.INVISIBLE); imageViewKeyPadSolid.setVisibility(View.INVISIBLE); imageViewMuteMic.setVisibility(View.INVISIBLE); imageViewMuteSpeaker.setVisibility(View.INVISIBLE); imageViewSpeaker.setVisibility(View.INVISIBLE); buttonAccept.setVisibility(View.INVISIBLE); buttonReject.setVisibility(View.INVISIBLE); buttonMoKhoa.setVisibility(View.VISIBLE); 104 // // SharedPreferences sharedPreferences = getSharedPreferences("channelName", Context.MODE_PRIVATE); final String j = sharedPreferences.getString("NAME",""); TextView textView= findViewById(R.id.kenhchon); textView.setText(j); mdatabaseRef= FirebaseDatabase.getInstance().getReference().child("Infomations"); mdatabaseRef.child(j).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { mTemperature=dataSnapshot.child("Temperature").getValue().toString(); mMoisture=dataSnapshot.child("Moisture").getValue().toString(); textViewTemperature.setText(mTemperature); textViewMoisture.setText(mMoisture); } @Override public void onCancelled(DatabaseError databaseError) { } }); //SharedPreferences sharedPreferences = getSharedPreferences("channelName", Context.MODE_PRIVATE); // final String j = sharedPreferences.getString("NAME",""); databaseReferenceCall=FirebaseDatabase.getInstance().getReference().child("Rooms"); databaseReferenceCall.child(j).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { channelStatus=dataSnapshot.child("state").getValue().toString(); if(channelStatus.equals("calling")) { textViewTemperatureName.setVisibility(View.INVISIBLE); textViewMoisureName.setVisibility(View.INVISIBLE); textViewMoKhoa.setVisibility(View.INVISIBLE); textViewTemperature.setVisibility(View.INVISIBLE); textViewMoisture.setVisibility(View.INVISIBLE); textViewPhoneCall.setVisibility(View.VISIBLE); imageViewKeypad.setVisibility(View.VISIBLE); imageViewKeypadOutLine.setVisibility(View.VISIBLE); imageViewKeyPadSolid.setVisibility(View.VISIBLE); imageViewMuteMic.setVisibility(View.VISIBLE); imageViewMuteSpeaker.setVisibility(View.VISIBLE); imageViewSpeaker.setVisibility(View.VISIBLE); buttonMoKhoa.setVisibility(View.INVISIBLE); buttonAccept.setVisibility(View.VISIBLE); buttonReject.setVisibility(View.VISIBLE); // phoneComingSound.start(); // buttonAccept.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { 105 databaseReferencechannel=FirebaseDatabase.getInstance().getReference().child("Channels "); databaseReferencechannel.child(j).child("channelStatus").setValue("inUse"); Intent intTentAccept=new Intent(phone_coming.this,VideoChatViewActivity.class); startActivity(intTentAccept); } }); buttonReject.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { databaseReferenceCall.child(j).child("state").setValue("waiting"); databaseReferenceCheck=FirebaseDatabase.getInstance().getReference().child("checkActio ns"); databaseReferencechannel=FirebaseDatabase.getInstance().getReference().child("Channels "); databaseReferencechannel.child(j).child("channelStatus").setValue("ok"); } }); }else if(channelStatus.equals("waiting")) { textViewTemperature.setVisibility(View.VISIBLE); textViewMoisture.setVisibility(View.VISIBLE); textViewTemperatureName.setVisibility(View.VISIBLE); textViewMoisureName.setVisibility(View.VISIBLE); textViewMoKhoa.setVisibility(View.VISIBLE); textViewPhoneCall.setVisibility(View.INVISIBLE); imageViewKeypad.setVisibility(View.INVISIBLE); imageViewKeypadOutLine.setVisibility(View.INVISIBLE); imageViewKeyPadSolid.setVisibility(View.INVISIBLE); imageViewMuteMic.setVisibility(View.INVISIBLE); imageViewMuteSpeaker.setVisibility(View.INVISIBLE); imageViewSpeaker.setVisibility(View.INVISIBLE); buttonAccept.setVisibility(View.INVISIBLE); buttonReject.setVisibility(View.INVISIBLE); buttonMoKhoa.setVisibility(View.VISIBLE); } } @Override public void onCancelled(DatabaseError databaseError) { } }); buttonMoKhoa.setOnClickListener(new View.OnClickListener() { 106 @Override public void onClick(View v) { databaseRefGate=FirebaseDatabase.getInstance().getReference().child("Infomations"); databaseRefGate.child("Gate").setValue("open"); Sleep(); } }); } } Activity_video_chat_view.xml 107 VideoChatViewActivity.java package io.agora.tutorials1v1vcall; import import import import import import import android.Manifest; android.content.Context; android.content.Intent; android.content.SharedPreferences; android.content.pm.PackageManager; android.graphics.PorterDuff; android.os.Bundle; import android.os.PersistableBundle; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.util.Log; import import import import import import import import android.view.LayoutInflater; android.view.SurfaceView; android.view.View; android.widget.EditText; android.widget.FrameLayout; android.widget.ImageView; android.widget.Spinner; android.widget.Toast; 108 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; import io.agora.rtc.IRtcEngineEventHandler; import io.agora.rtc.RtcEngine; import io.agora.rtc.video.VideoCanvas; import io.agora.rtc.video.VideoEncoderConfiguration; // 2.3.0 and later public class VideoChatViewActivity extends AppCompatActivity { private static final String LOG_TAG = VideoChatViewActivity.class.getSimpleName(); private String name; private DatabaseReference databaseReference,databaseReferenceCall,databaseReferencechannel ,databaseReferenceOK,databaseReferenceBack; private static final int PERMISSION_REQ_ID = 22; / permission WRITE_EXTERNAL_STORAGE is not mandatory for Agora RTC SDK, just incase if you wanna save logs to external sdcard private static final String[] REQUESTED_PERMISSIONS = {Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}; private RtcEngine mRtcEngine; private final IRtcEngineEventHandler mRtcEventHandler = new IRtcEngineEventHandler() { @Override public void onFirstRemoteVideoDecoded(final int uid, int width, int height, int elapsed) { runOnUiThread(new Runnable() { @Override public void run() { setupRemoteVideo(uid); } }); } @Override public void onUserOffline(int uid, int reason) { runOnUiThread(new Runnable() { @Override public void run() { onRemoteUserLeft(); } }); } @Override public void onUserMuteVideo(final int uid, final boolean muted) { runOnUiThread(new Runnable() { @Override public void run() { onRemoteUserVideoMuted(uid, muted); } }); } }; 109 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video_chat_view); if (checkSelfPermission(REQUESTED_PERMISSIONS[0], PERMISSION_REQ_ID) && checkSelfPermission(REQUESTED_PERMISSIONS[1], PERMISSION_REQ_ID) && checkSelfPermission(REQUESTED_PERMISSIONS[2], PERMISSION_REQ_ID)) { initAgoraEngineAndJoinChannel(); } } private void initAgoraEngineAndJoinChannel() { initializeAgoraEngine(); setupVideoProfile(); setupLocalVideo(); joinChannel(); } public boolean checkSelfPermission(String permission, int requestCode) { Log.i(LOG_TAG, "checkSelfPermission " + permission + " " + requestCode); if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, REQUESTED_PERMISSIONS, requestCode); return false; } return true; } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) { Log.i(LOG_TAG, "onRequestPermissionsResult " + grantResults[0] + " " + requestCode); switch (requestCode) { case PERMISSION_REQ_ID: { if (grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED || grantResults[2] != PackageManager.PERMISSION_GRANTED) { showLongToast("Need permissions " + Manifest.permission.RECORD_AUDIO + "/" + Manifest.permission.CAMERA + "/" + Manifest.permission.WRITE_EXTERNAL_STORAGE); finish(); break; } initAgoraEngineAndJoinChannel(); break; } } } 110 public final void showLongToast(final String msg) { this.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show(); } }); } @Override protected void onDestroy() { super.onDestroy(); / } leaveChannel(); RtcEngine.destroy(); mRtcEngine = null; public void onLocalVideoMuteClicked(View view) { ImageView iv = (ImageView) view; if (iv.isSelected()) { iv.setSelected(false); iv.clearColorFilter(); } else { iv.setSelected(true); iv.setColorFilter(getResources().getColor(R.color.colorPrimary), PorterDuff.Mode.MULTIPLY); } mRtcEngine.muteLocalVideoStream(iv.isSelected()); FrameLayout container = (FrameLayout) findViewById(R.id.local_video_view_container); SurfaceView surfaceView = (SurfaceView) container.getChildAt(0); surfaceView.setZOrderMediaOverlay(!iv.isSelected()); surfaceView.setVisibility(iv.isSelected() ? View.GONE : View.VISIBLE); } public void onLocalAudioMuteClicked(View view) { ImageView iv = (ImageView) view; if (iv.isSelected()) { iv.setSelected(false); iv.clearColorFilter(); } else { iv.setSelected(true); iv.setColorFilter(getResources().getColor(R.color.colorPrimary), PorterDuff.Mode.MULTIPLY); } mRtcEngine.muteLocalAudioStream(iv.isSelected()); } public void onSwitchCameraClicked(View view) { mRtcEngine.switchCamera(); } public void onEncCallClicked(View view) { SharedPreferences sharedPreferences = getSharedPreferences("channelName", Context.MODE_PRIVATE); String key = sharedPreferences.getString("NAME",""); databaseReferenceCall = FirebaseDatabase.getInstance().getReference().child("Rooms"); 111 databaseReferenceCall.child(key).child("state").setValue("waiting"); databaseReferencechannel = FirebaseDatabase.getInstance().getReference().child("Channels"); databaseReferencechannel.child(key).child("channelStatus").setValue("ok"); leaveChannel(); RtcEngine.destroy(); mRtcEngine = null; finish(); } private void initializeAgoraEngine() { try { mRtcEngine = RtcEngine.create(getBaseContext(), getString(R.string.agora_app_id), mRtcEventHandler); } catch (Exception e) { Log.e(LOG_TAG, Log.getStackTraceString(e)); throw new RuntimeException("NEED TO check rtc sdk init fatal error\n" + Log.getStackTraceString(e)); } } private void setupVideoProfile() { mRtcEngine.enableVideo(); / mRtcEngine.setVideoProfile(Constants.VIDEO_PROFILE_360P, false); // Earlier than 2.3.0 mRtcEngine.setVideoEncoderConfiguration(new VideoEncoderConfiguration(VideoEncoderConfiguration.VD_640x360, VideoEncoderConfiguration.FRAME_RATE.FRAME_RATE_FPS_15, VideoEncoderConfiguration.STANDARD_BITRATE, VideoEncoderConfiguration.ORIENTATION_MODE.ORIENTATION_MODE_FIXED_PORTRAIT)); } private void setupLocalVideo() { FrameLayout container = (FrameLayout) findViewById(R.id.local_video_view_container); SurfaceView surfaceView = RtcEngine.CreateRendererView(getBaseContext()); surfaceView.setZOrderMediaOverlay(true); container.addView(surfaceView); mRtcEngine.setupLocalVideo(new VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_FIT, 0)); } private void joinChannel() { SharedPreferences sharedPreferences = getSharedPreferences("channelName", Context.MODE_PRIVATE); final String name = sharedPreferences.getString("NAME",""); databaseReference = FirebaseDatabase.getInstance().getReference().child("Rooms"); databaseReference.child(name).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { String channelname = dataSnapshot.child("channelName").getValue().toString(); String code=dataSnapshot.child("state").getValue().toString(); if(code.equals("calling")&&channelname.equals("demoChannel1")) { 112 try { mRtcEngine.joinChannel(null,"demoChannel1","Extra Optional Data",0); // databaseReference.child(name).child("count").setValue("1"); } catch (NullPointerException e) { // finish(); } } else if(code.equals("calling")&&channelname.equals("demoChannel2")) { try { mRtcEngine.joinChannel(null,"demoChannel2","Extra Optional Data",0); } catch (NullPointerException c) { finish(); } } } @Override public void onCancelled(DatabaseError databaseError) { } }); } // mRtcEngine.joinChannel(null, "demoChannel1", "Extra Optional Data", 0); // if you not specify the uid, we will generate the uid for you / } private void setupRemoteVideo(int uid) { FrameLayout container = (FrameLayout) findViewById(R.id.remote_video_view_container); if (container.getChildCount() >= 1) { return; } SurfaceView surfaceView = RtcEngine.CreateRendererView(getBaseContext()); container.addView(surfaceView); mRtcEngine.setupRemoteVideo(new VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_FIT, uid)); } surfaceView.setTag(uid); // for mark purpose View tipMsg = findViewById(R.id.quick_tips_when_use_agora_sdk); // optional UI tipMsg.setVisibility(View.GONE); 113 private void leaveChannel() { mRtcEngine.leaveChannel(); } private void onRemoteUserLeft() { FrameLayout container = (FrameLayout) findViewById(R.id.remote_video_view_container); container.removeAllViews(); } View tipMsg = findViewById(R.id.quick_tips_when_use_agora_sdk); // optional UI tipMsg.setVisibility(View.VISIBLE); private void onRemoteUserVideoMuted(int uid, boolean muted) { FrameLayout container = (FrameLayout) findViewById(R.id.remote_video_view_container); SurfaceView surfaceView = (SurfaceView) container.getChildAt(0); Object tag = surfaceView.getTag(); if (tag != null && (Integer) tag == uid) { surfaceView.setVisibility(muted ? View.GONE : View.VISIBLE); } } } 114 ... dụng vào việc quản lí truy cập vào vừa an ninh, tiện lợi dễ dàng sử dụng 11 CHƯƠNG 3: TÍNH TỐN - THIẾT KẾ HỆ THỐNG 3.1 Giới thiệu hệ thống Đề tài “THIẾT KẾ MƠ HÌNH HỆ THỐNG TRUY CẬP VÀO RA KHU NHÀ... khu vực tòa nhà, văn phòng,… Chức hệ thống kiểm soát vào - Hệ thống thực chức kiểm sốt, quản lý lưu trữ thơng tin cần thiết nhân vào tòa nhà khu vực quan trọng - - Hệ thống kiểm soát vào hệ thống. .. thực đề tài ? ?Thiết kế mơ hình hệ thống truy cập vào khu nhà trọ? ?? 1.3 Mục tiêu: Thiết kế thi công hệ thống cung cấp cho người dùng giao diện bắt mắt, dễ sử dụng điện thoại sở hữu hệ điều hành