Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 109 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
109
Dung lượng
3,48 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM KHOA ĐÀO TẠO CHẤT LƯỢNG CAO NGÀNH ĐIỆN TỬ CÔNG NGHIỆP ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ VÀ THI CƠNG MƠ HÌNH GIÁM SÁT CHUNG CƯ THÔNG QUA INTERNET GVHD SVTH MSSV SVTH MSSV : TS NGUYỄN THANH HẢI : HUỲNH QUỐC HOÀNG : 13141492 : HỒ NHÂN BẢO : 13141454 SKL004971 Tp Hồ Chí Minh, tháng 07/2017 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 KHOA ĐÀO TẠO CHẤT LƯỢNG CAO - ĐỒ ÁN TỐT NGHIỆP Đề tài: THIẾT KẾ VÀ THI CÔNG HỆ THỐNG GIÁM SÁT CHUNG CƯ THÔNG QUA INTERNET SVTH : MSSV : SVTH : MSSV : Khóa : Ngành : GVHD: HUỲNH QUỐC HOÀNG 13141492 HỒ NHÂN BẢO 13141454 2013 ĐIỆN TỬ CƠNG NGHIỆP TS NGUYỄN THANH HẢI Tp Hồ Chí Minh, tháng năm 2017 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 KHOA ĐÀO TẠO CHẤT LƯỢNG CAO - ĐỒ ÁN TỐT NGHIỆP Đề tài: THIẾT KẾ VÀ THI CƠNG HỆ MƠ HÌNH GIÁM SÁT CHUNG CƯ THƠNG QUA INTERNET SVTH : MSSV : SVTH : MSSV : Khóa : Ngành : GVHD: HUỲNH QUỐC HOÀNG 1314192 HỒ NHÂN BẢO 13141454 2013 ĐIỆN TỬ CÔNG NGHIỆP TS NGUYỄN THANH HẢI Tp Hồ Chí Minh, tháng năm 2017 i LỜI CẢM ƠN Để hoàn thành đồ án tốt nghiệp này, lời chúng em xin bày tỏ lòng biết ơn sâu sắc đến thầy TS Nguyễn Thanh Hải, tận tình hướng dẫn suốt trình chúng em 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ô khoa Đào tạo chất lượng cao, nhiệt tình giúp đỡ, truyền đạt kiến thức suốt trình học tập nhóm trường Vốn kiến thức tiếp thu q trình học tập khơng tảng cho trình thực đồ án tốt nghiệp mà hành trang quý báu cho nghiệp nhóm sau Bên cạnh đó, chúng tơi xin cảm ơn hỗ trợ giúp đỡ bạn bè thời gian học tập Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh q trình hồn thành luận văn tốt nghiệp Cuối cùng, chúng chân thành cảm ơn động viên hỗ trợ gia đình 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 sinh nuôi dưỡng chúng nên người Sự quan tâm, lo lắng hy sinh lớn lao cha mẹ động lực cho chúng cố gắng phấn đấu đường học tập Xin chân thành cảm ơn! Người thực đề tài Huỳnh Quốc Hồng Hồ Nhân Bảo iv TĨM TẮT Hiện nay, điện thoại động thông minh ( Smart Phone) ngày phát triển phổ biến giới Việc áp dụng điện thoại thông minh việc quản lý chung cư Việt Nam chưa phát triển mạnh; thêm vào việc lập trình ứng dụng điện thoại vào sản phâm IoTs ngày phổ biến dễ tiếp cận hết Với mục đích muốn tiếp cận với cơng nghệ IoTs mảng lập trình ứng dụng điện thoại di động chúng em mong muốn tự tạo ứng dụng giúp người sử dụng nhận biết người quen đến nhà mình, sử dụng kiến thức học mơn lập trình Android dựa tảng mã nguồn mở lập trình ứng dụng, em tạo thành công ứng dụng giám sát chung cư thơng qua Internet Trong q trình thực đề tài Thiết kế thi cơng mơ hình giám sát chung cư thơng qua Internet, nhóm thực đề tài cố gắng hoàn thành nhiệm vụ đặt thời hạn hạn chế kiến thức nên chắn không tránh khỏi thiếu sót, hạn chế, mong q Thầy/Cơ bạn sinh viên thơng cảm Nhóm biết ơn mong nhận ý kiến đóng góp quý Thầy/Cô bạn sinh viên đề tài v MỤC LỤC LỜI CẢM ƠN IV TÓM TẮT V CHƯƠNG 1: TỔNG QUAN 1.1 Đặt vấn đề: 1.2 Lý chọn đề tài: 1.3 Mục tiêu: 1.4 Nội dung nghiên cứu: 1.5 Giới hạn: 1.6 Bố cục: CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Giới thiệu Raspberry Pi: 2.1.1 Giới thiệu bo mạch Raspberry Pi 3: 2.1.2 Cấu hình Raspberry Pi 3: 2.2 Tổng quan MQTT: 2.2.1 Giới thiệu MQTT: 2.2.2 Đặc điểm giao thức MQTT: 2.2.3 Cấu trúc giao thức MQTT: 2.2.4 Tầng ứng dụng( qualities of server): 2.2.5 Bảo mật: 2.3 Tổng quan M-JPEG: 10 2.3.1 Giới thiệu M-JPEG: 10 2.3.2 Đặc điểm M-JPEG: 10 2.3.3 Cấu trúc M-JPEG: 10 2.4 Gstreamer: 11 2.4.1 Giới thiệu Gstreamer: 11 2.4.2 Tính Gstreamer: 12 vi 2.4.3 Cấu trúc Gstreamer: 12 2.5 Tổng quan ngơn ngữ lập trình Python: 15 2.5.1 Giới thiệu ngôn ngữ Python: 15 2.5.2 Đặc điểm ngôn ngữ Python: 16 2.5.3 Đa luồng Python: 17 2.6 Android Studio: 22 2.6.1: Giới thiệu Android Studio: 22 2.6.2 Cấu trúc Android Studio: 23 2.6.3 Service Android: 27 2.6.3.1 Giới thiệu: 27 2.6.3.2 Tạo dịch vụ bản: 28 2.6.3.3 Quản lý vòng đời dịch vụ: 29 2.6.4 Tạo file project: 32 CHƯƠNG 3: TÍNH TỐN VÀ THIẾT KẾ HỆ THỐNG 36 3.1 Giới thiệu hệ thống: 36 3.2 Sơ đồ khối toàn hệ thống: 36 3.3 Tính tốn thiết kế hệ thống: 37 3.3.1 Khối thu thập liệu: 37 3.3.1.1 Lựa chọn camera: 37 a Giới thiệu Webcam E-Blue: 37 b Cấu hình webcam E-Blue Lente: 37 3.3.1.2 Keypad 4x4: 38 3.3.1.3 Thiết kế: 39 3.3.2 Khối hiển thị cảnh báo: 39 3.3.2.1 Giới thiệu LCD16x2: 39 3.3.2.2 Thiết kế: 40 3.3.3 Khối điều khiển trung tâm: 41 3.3.3.1 Phần cứng: 41 vii 3.3.3.2 Phần mềm: 42 3.3.4 Khối nguồn: 50 3.3.5 Khối nhận liệu điều khiển: 51 3.3.6 Sơ đồ nguyên lý toàn mạch: 52 3.4 Thiết kế mơ hình: 53 3.5 Thi công PCB: 53 3.6 Lưu đồ chương trình vi xử lý: 54 3.7 Lưu đồ chương trình ứng dụng Android Studio: 56 3.7.1 Lưu đồ cho úng dụng giám sát chung cư: 56 3.7.2 Thiết kế ứng dụng giám sát chung cư: 57 CHƯƠNG 4: KẾT QUẢ NGHIÊN CỨU 60 4.1 Ứng dụng giám sát chung cư SmartPhone: 60 4.2 Thiết kế mơ hình: 61 4.3 Sơ đồ mạch in: 63 4.4 Hoạt động toàn hệ thống: 65 CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 68 5.1 Kết luận: 68 5.2 Hướng phát triển: 68 TÀI LIỆU THAM KHẢO 69 PHỤ LỤC 1: CODE PYTHON TRÊN RASPBERRY 70 PHỤ LỤC 2: CODE ANDROID 80 CHƯƠNG TRÌNH CHÍNH: 80 CHƯƠNG TRÌNH CON APP CHẠY NGẦM: 86 viii DANH MỤC HÌNH ẢNH Hình - 1: Bo mạch Raspberry Pi Hình - 8: Cơ chế giao thức MQTT (*) Hình - 9: Cấu trúc Gstreamer 11 (*) Hình - 10: Element Gstreamer 12 Hình - 11: Các trạng thái elements 13 (*) Hình - 12: Pads liên kết element lại với 13 Hình - 13: Mơ hình Element, Bin Pipeline 14 (*) Hình - 14: Cơ chế giao tiếp ứng dụng pipeline 15 (*) Hình - 15: Tổ chức nhớ Python 17 Hình - 16: Giao diện làm việc phần mềm Android Studio .23 Hình - 17: Vùng làm việc thứ 24 Hình - 18: Vùng làm việc thứ 25 Hình - 19: Vùng làm việc thứ 25 Hình - 20: Vùng làm việc số 26 Hình - 21: Vùng làm việc số 26 Hình - 22: Vùng làm việc thứ 27 Hình - 23: Vịng đời Service 30 Hình - 24: Đặt tên cho Project Android studio 32 Hình - 25: Chọn phiên Android mà ứng dụng chạy .33 Hình - 26: Chọn loại Activity xuất ban đầu 34 Hình - 27: Đặt tên cho Activity Layout 34 Hình - 1: Sơ đồ khối hệ thống 36 Hình - 2: Bàn phím ma trận 4x4 38 Hình - 3: Sơ đồ bàn phím ma trận 38 Hình - 4: Sơ đồ nguyên lý kết nối ma trận phím 39 Hình - 5: LCD16x2 39 Hình - 6: Sơ đồ kết nối LCD 16 40 Hình - 7: Sơ đồ nguyên lý kết nối Raspberry Pi 41 Hình - 8: Cập nhật phần mềm cho Raspberry Pi3 42 Hình - 9: Cài đặt xrdp cho Raspberry Pi3 42 Hình - 10: Ứng dụng Remote Desktop 43 Hình - 11: Thông báo truy cập Raspberry Pi 43 Hình - 12: Giao diện Raspberry Pi 44 Hình - 13:Download gói MQTT vè 44 Hình - 14: Giải nén gói tập tin MQTT 45 ix PHỤ LỤC 1: CODE PYTHON TRÊN RASPBERRY else: if (((phong.find("A",k,len(phong))==k) or (phong.find("B",k,len(phong))==k) or (phong.find("C",k,len(phong))==k) or (phong.find("D",k,len(phong))==k))): phong= "" lcd_string(phong,0x8B) lcd_string("Sai Dia Chi",LCD_LINE_2) time.sleep(0.3) lcd_string("Moi Nhap Lai",LCD_LINE_2) time.sleep(0.3) lcd_string(" ",LCD_LINE_2) k=0 else: k=k+1 if ==k: k=0 while (GPIO.input(ROW[i]) == 0): pass GPIO.output(COL[j],1) except KeyboardInterrupt: GPIO.cleanup() if name == ' main ': mqttc = mqtt.Client() 78 PHỤ LỤC 1: CODE PYTHON TRÊN RASPBERRY mqttc.username_pw_set(USER,PASSWORD) mqttc.connect(HOST,PORT,60) #dien IP cua Pi, vd: 192.168.1.77 #mqttc.username_pw_set("doantotnghiep","123") print("Ket Moi Thanh Cong") #mqttc.on_message = on_message #start_new_thread(camera,(command,)) start_new_thread(camera_stop,(command_stop,)) start_new_thread(key_4x4_lcd_16x2,(MATRIX, ROW, COL, phong,key,k,tt,LCD_RS, LCD_E, LCD_D4,LCD_D5,LCD_D6,LCD_D7,LCD_LINE_1,LCD_LINE_2,mqtt,HOST,PORT,on_ message,)) mqttc.loop_forever() while 1: pass 79 PHỤ LỤC 2: CODE ANDROID PHỤ LỤC 2: CODE ANDROID CHƯƠNG TRÌNH CHÍNH: package com.camera.simplemjpeg; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.media.Ringtone; import android.media.RingtoneManager; import android.net.Uri; import android.os.Bundle; import android.os.Vibrator; import android.support.v7.app.AppCompatActivity; import android.support.v7.app.NotificationCompat; import android.view.View; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import org.eclipse.paho.android.service.MqttAndroidClient; import org.eclipse.paho.client.mqttv3.IMqttActionListener; import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.client.mqttv3.IMqttToken; import org.eclipse.paho.client.mqttv3.MqttCallback; 80 PHỤ LỤC 2: CODE ANDROID import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import java.lang.reflect.Array; import java.util.Arrays; public class PreferenceActivity extends Activity { private static final int MY_NOTIFICATION_ID = 12345; private static final int MY_REQUEST_CODE = 200; public static final String KEY_HOSTNAME = "hostname"; public static final String KEY_PORTNUM = "portnum"; public static final String KEY_WIDTH = "width"; public static final String KEY_HEIGHT = "height"; //static String MQTTHOST = "tcp://14.169.30.8:1883"; static String MQTTHOST = "tcp://192.168.1.127:1883"; static String STREAMHOST = "192.168.1.127"; static String USERNAME = "doantotnghiep"; static String PASSWORD = "baobao"; String topicStr = "B301"; MqttAndroidClient client; MqttConnectOptions options; Vibrator vibrator; Ringtone myRingtone; TextView subText; private static ImageView img1; private static ImageView img2; private NotificationCompat.Builder notBuilder; String dulieu=" "; @Override 81 PHỤ LỤC 2: CODE ANDROID protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.notBuilder = new NotificationCompat.Builder(this); // Thông báo tự động bị hủy người dùng click vào Panel this.notBuilder.setAutoCancel(true); this.setContentView( R.layout.preference); subText = (TextView) findViewById(R.id.subText); vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); options = new MqttConnectOptions(); Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); myRingtone = RingtoneManager.getRingtone(getApplicationContext(), uri); String clientId = MqttClient.generateClientId(); client = new MqttAndroidClient(this.getApplicationContext(), MQTTHOST, clientId); options.setUserName(USERNAME); options.setPassword(PASSWORD.toCharArray()); / / load stored data SharedPreferences sp = this.getPreferences( MODE_PRIVATE); img1 = (ImageView)findViewById(R.id.imageView1); img2 = (ImageView)findViewById(R.id.imageView2); img1.setEnabled(false); img2.setEnabled(false); Intent myIntent = new Intent(PreferenceActivity.this,MyService.class); // Gọi phương thức startService (Truyền vào đối tượng Intent) try { IMqttToken token = client.connect(options); token.setActionCallback(new IMqttActionListener() { 82 PHỤ LỤC 2: CODE ANDROID @Override public void onSuccess(IMqttToken asyncActionToken) { //Toast.makeText(PreferenceActivity.this,"Connected",Toast.LENGTH_LO NG).show(); setSub(); } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { Toast.makeText(PreferenceActivity.this,"Connection failed",Toast.LENGTH_LONG).show(); } }); } catch (MqttException e) { e.printStackTrace(); } this.startService(myIntent); if (MyService.tt == 1){ img1.setEnabled(true); img2.setEnabled(true); } client.setCallback(new MqttCallback() { @Override public void connectionLost(Throwable cause) { } @Override public void messageArrived(String topic, MqttMessage message) throws Exception { 83 PHỤ LỤC 2: CODE ANDROID dulieu = new String(message.getPayload()); //subText.setText(dulieu); if ( dulieu.equals("CO KHACH")){ img1.setEnabled(true); img2.setEnabled(true); } else if (dulieu.equals("da dong")){ img1.setImageResource(R.drawable.doorclose); img1.setEnabled(false); img2.setEnabled(false); MyService.tt = 0; //dulieu= " "; //subText.setText(dulieu); } else if (dulieu.equals("khong cho phep")){ img1.setImageResource(R.drawable.doorclose); img1.setEnabled(false); img2.setEnabled(false); MyService.tt = 0; //dulieu= " "; //subText.setText(dulieu); } //vibrator.vibrate(500); //myRingtone.play(); } @Override public void deliveryComplete(IMqttDeliveryToken token) { } }); } 84 PHỤ LỤC 2: CODE ANDROID public void onClick( View view){ / get data from EditText components / store the input data SharedPreferences sp = this.getPreferences( MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.putString( KEY_HOSTNAME, STREAMHOST); editor.putString( KEY_PORTNUM, "5000"); editor.putString( KEY_WIDTH, "640"); editor.putString( KEY_HEIGHT, "480"); editor.commit(); // set the image size MjpegView.setImageSize( Integer.parseInt( "640"), Integer.parseInt("480")); // launch MjpegActivity Intent intent = new Intent( this, MjpegActivity.class); intent.putExtra( KEY_HOSTNAME, STREAMHOST); intent.putExtra( KEY_PORTNUM, "5000"); this.startActivity( intent); } public void on(View v){ String topic = topicStr; String message = "cua mo"; try { client.publish(topic, message.getBytes(),0,false); } catch (MqttException e) { e.printStackTrace(); } img1.setImageResource(R.drawable.dooropen); } public void off(View v){ String topic = topicStr; 85 PHỤ LỤC 2: CODE ANDROID String message = "cua dong"; try { client.publish(topic, message.getBytes(),0,false); } catch (MqttException e) { e.printStackTrace(); } } private void setSub(){ try{ client.subscribe(topicStr,0); } catch (MqttException e) { e.printStackTrace(); } } } CHƯƠNG TRÌNH CON APP CHẠY NGẦM: package com.camera.simplemjpeg; import android.app.Notification; import android.app.NotificationManager; import android.support.v7.app.NotificationCompat; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.media.Ringtone; import android.media.RingtoneManager; import android.net.Uri; import android.os.IBinder; import android.os.Vibrator; 86 PHỤ LỤC 2: CODE ANDROID import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import org.eclipse.paho.android.service.MqttAndroidClient; import org.eclipse.paho.client.mqttv3.IMqttActionListener; import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.client.mqttv3.IMqttToken; import org.eclipse.paho.client.mqttv3.MqttCallback; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; public class MyService extends Service { static String MQTTHOST = "tcp://14.169.61.229:1883"; static String USERNAME = "doantotnghiep"; static String PASSWORD = "baobao"; String topicStr = "A301"; private static final int MY_NOTIFICATION_ID = 12345; private static final int MY_REQUEST_CODE = 200; private static ImageView img1; private static ImageView img2; MqttAndroidClient client; public static int tt; MqttConnectOptions options; Vibrator vibrator; Ringtone myRingtone; private NotificationCompat.Builder notBuilder; 87 PHỤ LỤC 2: CODE ANDROID TextView subText; String dulieu=" "; public MyService() { } @Override public IBinder onBind(Intent intent) { / TODO: Return the communication channel to the service return null; } @Override public void onCreate(){ super.onCreate(); //this.setContentView( R.layout.preference); this.notBuilder = new NotificationCompat.Builder(this); // Thông báo tự động bị hủy người dùng click vào Panel this.notBuilder.setAutoCancel(true); vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); options = new MqttConnectOptions(); Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); myRingtone = RingtoneManager.getRingtone(getApplicationContext(), uri); String clientId = MqttClient.generateClientId(); client = new MqttAndroidClient(this.getApplicationContext(), MQTTHOST, clientId); options.setUserName(USERNAME); options.setPassword(PASSWORD.toCharArray()); // Tạo đối tượng MediaPlayer, chơi file nhạc bạn 88 PHỤ LỤC 2: CODE ANDROID } @Override public int onStartCommand(Intent intent, int flags, int startId){ try { IMqttToken token = client.connect(options); token.setActionCallback(new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { //Toast.makeText(MyService.this,"Connected",Toast.LENGTH_LONG).show( ); setSub(); } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { Toast.makeText(MyService.this,"Connection failed",Toast.LENGTH_LONG).show(); } }); } catch (MqttException e) { e.printStackTrace(); } client.setCallback(new MqttCallback() { @Override public void connectionLost(Throwable cause) { } @Override public void messageArrived(String topic, MqttMessage message) throws Exception { thongbao(); 89 PHỤ LỤC 2: CODE ANDROID tt=1; } @Override public void deliveryComplete(IMqttDeliveryToken token) { } }); return START_STICKY; } // Hủy bỏ dịch vụ @Override public void onDestroy() { // Giải phóng nguồn nguồn phát nhạc super.onDestroy(); } public void thongbao(){ this.notBuilder.setSmallIcon(R.drawable.bell); this.notBuilder.setTicker("THONG BAO"); / Sét đặt thời điểm kiện xẩy / Các thông báo Panel xếp thời gian this.notBuilder.setWhen(System.currentTimeMillis()+ 10* 1000); this.notBuilder.setContentTitle("THONG BAO"); this.notBuilder.setContentText("CO KHACH"); // Tạo Intent Intent intent1 = new Intent(this, PreferenceActivity.class); 90 PHỤ LỤC 2: CODE ANDROID trả / PendingIntent.getActivity( ) start Activity / đối tượng PendingIntent / Nó tương đương với gọi Context.startActivity(Intent) PendingIntent pendingIntent = PendingIntent.getActivity(this, MY_REQUEST_CODE, intent1, PendingIntent.FLAG_UPDATE_CURRENT); this.notBuilder.setContentIntent(pendingIntent); // Lấy dịch vụ thông báo (Một dịch vụ có sẵn hệ thống) NotificationManager notificationService = (NotificationManager)this.getSystemService(Context.NOTIFICATION_SERV ICE); // Xây dựng thông báo gửi lên hệ thống Notification notification = notBuilder.build(); notificationService.notify(MY_NOTIFICATION_ID, notification); vibrator.vibrate(500); myRingtone.play(); } private void setSub(){ try{ client.subscribe(topicStr,0); } catch (MqttException e) { e.printStackTrace(); } } } 91 ... ? ?Thi? ??t kế thi cơng mơ hình giám sát chung cư thông qua internet? ?? 1.3 Mục tiêu: Thi? ??t kế thi công luận văn cung cấp cho người sử dụng giao diện điện thoại android để thấy người vào chung cư thông. .. dụng giám sát chung cư: 56 3.7.2 Thi? ??t kế ứng dụng giám sát chung cư: 57 CHƯƠNG 4: KẾT QUẢ NGHIÊN CỨU 60 4.1 Ứng dụng giám sát chung cư SmartPhone: 60 4.2 Thi? ??t kế mơ hình: ... camera Thi? ??t kế, thi cơng lập trình khối giao tiếp Raspberry pi wifi Thi? ??t kế, thi cơng lập trình khối giao tiếp app android với Raspberry qua wifi Thi? ??t kế, thi cơng mơ hình giám sát chung cư qua