Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 117 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
117
Dung lượng
7,63 MB
Nội dung
BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - ĐỒ ÁN TỐT NGHIỆP NGÀNH KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: HỆ THỐNG ỨNG DỤNG WEAR OS TRONG VIỆC HỖ TRỢ NGƯỜI GIÀ GVHD: ThS Nguyễn Văn Hiệp SVTH 1: Trần Văn Ba MSSV: 14141013 SVTH 2: Nguyễn Lê Trung Hiếu MSSV: 14141100 Tp Hồ Chí Minh – 06/2018 i TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC o0o -Tp HCM, ngày 29 tháng năm 2018 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Chuyên ngành: Hệ đào tạo: Khóa: Trần Văn Ba Nguyễn Lê Trung Hiếu Điện tử cơng nghiệp Đại học quy 2014 MSSV: 14141013 MSSV: 14141100 Mã ngành: 141 Mã hệ: Lớp: 14141DT3B I TÊN ĐỀ TÀI: HỆ THỐNG ỨNG DỤNG WEAR OS TRONG VIỆC HỖ TRỢ NGƯỜI GIÀ II NHIỆM VỤ Các số liệu ban đầu: - Sử dụng Asus ZenWatch - Sử dụng điện thoại hệ điều hành Android - Sử dụng Module wifi ESP8266 NodeMCU Mini D1 - Sử dụng Module Relay Nội dung thực hiện: - Tìm hiểu firebase để cập nhật liệu điều khiển, chia sẻ quyền điều khiển cho thiết bị - Tìm hiểu thiết kế giao diện cho ứng dụng chạy thiết bị android - Tìm hiểu cách điều khiển module ESP8266 NodeMCU Mini D1 thông qua firebase - Thi công mơ hình - Cân chỉnh, hồn thiện mơ hình - Đánh giá kết thực III NGÀY GIAO NHIỆM VỤ: 20/03/2018 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 27/06/2018 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS Nguyễn Văn Hiệp CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ii TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP – Y SINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC o0o -Tp HCM, ngày 27 tháng 03 năm 2018 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên 1: Trần Văn Ba Lớp:14141DT3B MSSV:14141013 Họ tên sinh viên 2: Nguyễn Lê Trung Hiếu Lớp:14141DT3B MSSV:14141100 Tên đề tài: HỆ THỐNG ỨNG DỤNG WEAR OS TRONG VIỆC HỖ TRỢ NGƯỜI GIÀ Tuần/ngày 1-2/ 20-03 đến 27-03 2-3/ 27-03 đến 03-04 3-4/ 03-04 đến 17-04 Xác nhận GVHD Nội dung Gặp GVHD trao đổi xác nhận đề tài Hoàn thành đề cương Liên kết firebase để điều khiển qua điện thoại thông minh đồng hồ thông minh 4-6/ 17-04 đến Kết nối module esp module relay, để điều 02-05 khiển đèn chuông, thông qua điện thoại đồng hồ thông minh 6-10/ 02-05 đến 30-05 10-12/ 30-05 đến 13-06 12-14/ 13-06 đến 27-06 Viết ứng dụng khẩn cấp Hoàn thành chạy thử nghiệm hệ thống Hoàn thiện hệ thống báo cáo đồ án tốt nghiệp GV HƯỚNG DẪN (Ký ghi rõ họ tên) iii LỜI CAM ĐOAN Đề tài nhóm tơi tự thực dựa vào số tài liệu trước khơng chép từ tài liệu hay cơng trình có trước Những người thực đề tài Trần Văn Ba Nguyễn Lê Trung Hiếu iv LỜI CẢM ƠN Em xin gởi lời cảm ơn sâu sắc đến Thầy Nguyễn Văn Hiệp _ Giảng viên môn Điện tử công nghiệp – y sinh trực tiếp hướng dẫn tận tình giúp đỡ tạo điều kiện để hoàn thành tốt đề tài Chúng em xin gởi lời chân thành cảm ơn thầy cô Khoa Điện-Điện Tử tạo điều kiện tốt cho chúng em hoàn thành đề tài Chúng gửi lời đồng cảm ơn đến bạn lớp 14141DT3B chia sẻ trao đổi kiến thức kinh nghiệm quý báu thời gian thực đề tài Cảm ơn đến cha mẹ, chỗ dựa tinh thần vững cho chúng con, an ủi động viên lúc chúng khó khăn suốt năm tháng học hành Xin chân thành cảm ơn! Những người thực đề tài Trần Văn Ba Nguyễn Lê Trung Hiếu v MỤC LỤC Trang bìa i Nhiệm vụ đồ án ii Lịch trình iii Cam đoan iv Lời cảm ơn v Mục lục vi Liệt kê hình vẽ viii Liệt kê bảng xi Tóm tắt xii CHƯƠNG TỔNG QUAN 1.1 Đặt vấn đề 1.2 Mục tiêu 1.3 Nội dung nghiên cứu 1.4 Giới hạn 1.5 Bố cục CHƯƠNG CƠ SỞ LÝ THUYẾT 2.1 Người cao tuổi 2.2 Lịch sử hệ điều hành Android 2.3 Giới thiệu Wear OS 2.4 Giới thiệu Wifi 2.5 Giới thiệu Bluetooth 11 2.6 Giới thiệu Google Firebase 13 CHƯƠNG TÍNH TỐN VÀ THIẾT KẾ 18 3.1 Giới thiệu 18 3.1.1 Thực trạng nhu cầu 18 3.1.2 Bài toán đặt 18 3.2 Tính tốn thiết kế mạch 18 3.2.1 Thiết kế đồng hồ 19 3.2.2 Thiết kế điện thoại 20 vi 3.2.3 Thiết kế mạch điều khiển đèn, chuông 22 a/ Vi điều khiển 22 b/ Module Relay 5V 24 c/ Nguồn nuôi mạch điều khiển 25 d/ Các thiết bị khác 26 CHƯƠNG THI CÔNG HỆ THỐNG 28 4.1 Giới thiệu 28 4.2 Xây dựng ứng dụng điều khiển đèn, chuông smartwatch 28 4.2.1 Giới thiệu phần mềm Android Studio 28 4.2.2 Lưu đồ lập trình ứng dụng 42 4.3 Xây dựng ứng dụng khẩn cấp SOS điện thoại 48 4.4 Thi công mạch điều khiển đèn, chuông 59 4.5 Hướng dẫn sử dụng thao tác 74 CHƯƠNG KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ 80 5.1 Kết 80 5.2 Nhận xét đánh giá 85 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 87 6.1 Kết luận 87 6.2 Hướng phát triển 87 TÀI LIỆU THAM KHẢO xiii PHU LỤC xv vii LIỆT KÊ HÌNH VẼ Hình Trang Hình 2.1: Các phiên hệ điều hành Android Hình 2.2: Thiết bị sử dụng Wear OS Hình 2.3: Hệ thống thiết bị kết nối wifi Hình 2.4: Hình ảnh ký hiệu Bluetooth 11 Hình 2.5: Thơng số loại Bluetooth 12 Hình 2.6: Các ứng dụng Google Firebase 14 Hình 3.1: Sơ đồ khối tổng quát hệ thống 19 Hình 3.2: Thiết kế ứng dụng đồng hồ 20 Hình 3.3: Giao diện bắt đầu ứng dụng điện thoại 21 Hình 3.4: Giao diện ứng dụng điện thoại khởi chạy thành công 21 Hình 3.5: Module ESP8266 23 Hình 3.6: Module Relay 24 Hình 3.7: Adapter 5V/2A 25 Hình 3.8: Đèn led 5W/220VAC - Đèn led 9W/220VAC 26 Hình 3.9: Chng điện 220VAC 27 Hình 3.10: Sơ đồ kết nối khối 27 Hình 4.1: Phần mềm Android Studio 28 Hình 4.2: Tải phần mềm Android Studio 30 Hình 4.3: Tiến hành trình cài đặt phần mềm Android Studio 30 Hình 4.4: Kết thúc trình cài đặt phần mềm Android Studio 31 Hình 4.5: Cửa sổ “Welcome to Android Studio” 32 Hình 4.6: Màn hình Create Android Project 33 Hình 4.7: Màn hình Target Android Devices 33 viii Hình 4.8: Màn hình Add an Activity to Wear 34 Hình 4.9: Màn hình Configure Activity 35 Hình 4.10: Màn hình thẻ MainActivity.java 35 Hình 4.11: Màn hình thẻ AndroidManifest.xml 36 Hình 4.12: Màn hình thẻ app 36 Hình 4.13: Màn hình thẻ Design 37 Hình 4.14: Màn hình thẻ Text 37 Hình 4.15: Giao diện hiển thị Firebase 38 Hình 4.16: Cửa sổ Add a project 39 Hình 4.17: Điền thơng tin package ứng dụng 39 Hình 4.18: Tải tập tin google-services.json 40 Hình 4.19: Các dòng lệnh cần thiết 41 Hình 4.20: Cửa sổ Security rules for Realtime Database 41 Hình 4.21: Giao diện làm việc Database 42 Hình 4.22: Lưu đồ ứng dụng khởi động 43 Hình 4.23: Giao diện ứng dụng 47 Hình 4.24: Giao diện nhập số điện thoại khẩn cấp 49 Hình 4.25: Giao diện xác nhận số điện thoại khẩn cấp 50 Hình 4.26: Giao diện thơng báo SOS hoạt động 51 Hình 4.27: Lưu đồ startActivity.java 52 Hình 4.28: Lưu đồ MainActivity.java 53 Hình 4.29: Lưu đồ xử lý handler 54 Hình 4.30: Lưu đồ hoạt động chương trình gửi tin nhắn 55 Hình 4.31: Lưu đồ khởi tạo số điện thoại khẩn cấp 56 Hình 4.32: Lưu đồ hoạt động chương trình vị trí 57 Hình 4.33: Thiết kế vẽ PCB sau thi công 58 ix Hình 4.34: Mạch điều khiển hoàn chỉnh 60 Hình 4.35: Cửa sổ lập trình Arduino 62 Hình 4.36: Cửa sổ tính hành cài đặt Driver Arduino 63 Hình 4.37: Cửa sổ hồn thành q trình cài đặt Driver Arduino 64 Hình 4.38: Thêm thư viện cho Arduino 64 Hình 4.39: Cửa sổ Library Manager 65 Hình 4.40: Lưu đồ điều khiển vi điều khiển 65 Hình 4.41: Lưu đồ xử lý hàm void setup() 67 Hình 4.42: Giao diện Database 69 Hình 4.43: Lấy authCode Firebase 69 Hình 4.44: Lưu đồ hàm voidloop() 71 Hình 4.45: Giao diện firebase thực tế 74 Hình 4.46: Màn hình ứng dụng 75 Hình 4.47: Màn hình thứ hai ứng dụng 75 Hình 4.48: Màn hình ứng dụng đồng hồ 76 Hình 4.49: Giao diện Firebase 77 Hình 4.50: Cửa sổ đăng nhập tài khoản Google 78 Hình 4.51: Giao diện project Firebase 78 Hình 4.52: Giao diện làm việc Database 79 Hình 5.1: Hình ảnh thực tế đồng hồ 81 Hình 5.2: Giao diện gửi tin nhắn, nội dung tin nhắn 81 Hình 5.3: Cuộc gọi tự tạo 82 Hình 5.4: Điều khiển chưa cấp nguồn phần cứng 82 Hình 5.5: Điều khiển cấp nguồn phần cứng 83 Hình 5.6: Thiết bị tắt 84 Hình 5.7: Thiết bị bật 84 x PHỤ LỤC } }); myswitch3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) {myfirebase.child("den13").child("trangthai").setValue("sang");} else {myfirebase.child("den13").child("trangthai").setValue("tat");} } }); setAmbientEnabled(); } } Activity_main.xml BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP xvii PHỤ LỤC androidManifest.xml BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP xix PHỤ LỤC Build.gradle(App) apply plugin: 'com.android.application' android { compileSdkVersion 27 defaultConfig { applicationId "com.example.s46c.dongho3" minSdkVersion 25 targetSdkVersion 27 versionCode versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguardrules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.google.android.support:wearable:2.3.0' implementation 'com.google.android.gms:play-services-wearable:12.0.1' implementation 'com.android.support:percent:27.1.0' implementation 'com.android.support:support-v4:27.1.0' implementation 'com.android.support:recyclerview-v7:27.1.0' implementation 'com.android.support:wear:27.1.0' compileOnly 'com.google.android.wearable:wearable:2.3.0' compile 'com.google.firebase:firebase-database:12.0.1' compile 'com.google.firebase:firebase-core:12.0.1' compile 'com.firebase:firebase-client-android:2.5.2' } apply plugin: 'com.google.gms.google-services' BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP xx PHỤ LỤC Code điện thoại: startActivity: package com.example.s46c.sos_firebase; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; public class startActivity extends AppCompatActivity { Button btn; private EditText edt_sdt; public static final String SDT = "SDT"; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_start); btn = findViewById(R.id.btnstart); edt_sdt = findViewById(R.id.edt_nhap); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String sdt = edt_sdt.getText().toString(); byExtras(sdt); } }); } public void byExtras(String sdt) { Intent intent = new Intent(startActivity.this, MainActivity.class); intent.putExtra(SDT, sdt); startActivity(intent); finish(); } } MainActivity: package com.example.s46c.sos_firebase; import android.content.ActivityNotFoundException; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP xxi PHỤ LỤC import android.content.Intent; import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.net.Uri; import android.os.Handler; import android.provider.Settings; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.telephony.SmsManager; import android.util.Log; import android.view.View; 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; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; public class MainActivity extends AppCompatActivity { Firebase myfirebase; private LocationManager locationManager; private LocationListener locationListener; private TextView TVSDT; private DatabaseReference mData; private String message ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TVSDT = (TextView) findViewById(R.id.tvsdt); Intent intent = getIntent(); //lay du lieu tu startActivity qua BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP xxii PHỤ LỤC final String sdt = intent.getStringExtra(startActivity.SDT); TVSDT.setText(sdt); Firebase.setAndroidContext(this); myfirebase = new Firebase("https://android-vanba.firebaseio.com"); mData = FirebaseDatabase.getInstance().getReference(); location(); myfirebase.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if(((String)dataSnapshot.child("toa do").getValue()) != null){ String toado = dataSnapshot.child("toa do").getValue().toString(); message = "Tôi cần giúp đỡ! Tôi vị trí"+toado; } if (((String) dataSnapshot.child("SENT").getValue()).equals("yes")) { sendSMSMessage(sdt); Handler j = new Handler(); j.postDelayed(new Runnable() { @Override public void run() { myfirebase.child("SENT").setValue("no"); call(sdt); } }, 5000); } } @Override public void onCancelled(FirebaseError firebaseError) { Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_LONG).show(); } }); } private void sendSMSMessage(String sdt) { Log.i("Send SMS", ""); String phoneNo = sdt; try { SmsManager smsManager = SmsManager.getDefault(); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP xxiii PHỤ LỤC smsManager.sendTextMessage(phoneNo, null, message, null, null); Toast.makeText(getApplicationContext(), "SMS sent.", Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(getApplicationContext(), "SMS faild, please try again.", Toast.LENGTH_LONG) show(); e.printStackTrace(); } } private void call(String sdt) { try { String phoneNumber = sdt; Intent it = new Intent(Intent.ACTION_CALL); it.setData(Uri.parse("tel:" + phoneNumber)); startActivity(it); } catch (ActivityNotFoundException e) { // Exceptions } } private void location() { locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); locationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { myfirebase.child("toa do").setValue((+location.getLatitude() + " ," + location.getLongitude())); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { Intent intent = new BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP xxiv PHỤ LỤC Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(intent); } }; if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission See the documentation // for ActivityCompat#requestPermissions for more details return; } locationManager.requestLocationUpdates("gps", 60000, 0, locationListener); } } Activity_start.xml: Activity_main.xml: Androidmanifest.xml: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP xxvi PHỤ LỤC Build.gradle(App): apply plugin: 'com.android.application' android { compileSdkVersion 27 defaultConfig { applicationId "com.example.s46c.sos_firebase" minSdkVersion 22 targetSdkVersion 27 versionCode versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguardrules.pro' } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP xxvii PHỤ LỤC } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.2' implementation 'com.google.firebase:firebase-database:11.8.0' compile 'com.google.firebase:firebase-core:11.8.0' compile 'com.firebase:firebase-client-android:2.5.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espressocore:3.0.2' } apply plugin: 'com.google.gms.google-services' Code vi điều khiển: #include #include #define wifiName "KTX SV" //Đây SSID mạng wifi bạn muốn ESP kết nối tới #define wifiPass "67896789" //Đây password #define DEN1 D4 #define DEN2 D3 #define DEN3 D2 #define BELL D1 String IDden1 = "den11"; String IDden2 = "den12"; String IDden3 = "den13"; String IDbell = "bell"; #define firebaseURl "android-vanba.firebaseio.com" //https://androidvanba.firebaseio.com/ #define authCode "0a4VRqqXeo7r9BaWJ3beDMbJy1w00gwVYcQrf8hf" int onlyt1=1,onlys1=1; int onlyt2=1,onlys2=1; int onlyt3=1,onlys3=1; int onlyt4=1,onlys4=1; void setupFirebase() { Firebase.begin(firebaseURl, authCode); } void setupWifi() { //kết nối wifi với tên mật từ hai mảng lưu BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP xxviii PHỤ LỤC WiFi.begin(wifiName, wifiPass); Serial.println("Hey i 'm connecting "); while (WiFi.status() != WL_CONNECTED) { Serial.println("."); delay(500); } Serial.println(); Serial.println("I 'm connected and my IP address: "); Serial.println(WiFi.localIP()); } void setup() { pinMode(DEN1, OUTPUT); pinMode(DEN2, OUTPUT); pinMode(DEN3, OUTPUT); pinMode(BELL, OUTPUT); WiFi.mode(WIFI_OFF); delay(50); Serial.begin(115200); delay(10); setupWifi(); setupFirebase(); } void getData() { FirebaseObject object = Firebase.get(IDden1); String trangthai = object.getString("trangthai"); Serial.println("TRANG THAI DEN: "); Serial.println(trangthai); if(trangthai!="\0") { if(trangthai=="sang") { if(onlys1==1) { Firebase.setString(IDden1+"/TT","sang"); onlys1=0; onlyt1=1; }; digitalWrite(DEN1,LOW); }else { if(onlyt1==1) { Firebase.setString(IDden1+"/TT","tat"); onlyt1=0; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP xxix PHỤ LỤC onlys1=1; }; digitalWrite(DEN1,HIGH); } } FirebaseObject object2 = Firebase.get(IDden2); String trangthai2 = object2.getString("trangthai"); Serial.println("TRANG THAI DEN 2: "); Serial.println(trangthai2); if(trangthai2!="\0") { if(trangthai2=="sang") { if(onlys2==1) { Firebase.setString(IDden2+"/TT","sang"); onlys2=0; onlyt2=1; }; digitalWrite(DEN2,LOW); }else { if(onlyt2==1) { Firebase.setString(IDden2+"/TT","tat"); onlyt2=0; onlys2=1; }; digitalWrite(DEN2,HIGH); } } FirebaseObject object3 = Firebase.get(IDden3); String trangthai3 = object3.getString("trangthai"); Serial.println("TRANG THAI DEN 3: "); Serial.println(trangthai3); if(trangthai3!="\0") { if(trangthai3=="sang") { if(onlys3==1) { Firebase.setString(IDden3+"/TT","sang"); onlys3=0; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP xxx PHỤ LỤC onlyt3=1; }; digitalWrite(DEN3,LOW); }else { if(onlyt3==1) { Firebase.setString(IDden3+"/TT","tat"); onlyt3=0; onlys3=1; }; digitalWrite(DEN3,HIGH); } } FirebaseObject object4 = Firebase.get(IDbell); String trangthai4 = object4.getString("trangthai"); Serial.println("TRANG THAI BELL :"); Serial.println(trangthai4); if(trangthai4!="\0") { if(trangthai4=="sang") { if(onlys4==1) { Firebase.setString(IDbell+"/TT","sang"); onlys4=0; onlyt4=1; }; digitalWrite(BELL,LOW); }else { if(onlyt4==1) { Firebase.setString(IDbell+"/TT","tat"); onlyt4=0; onlys4=1; }; digitalWrite(BELL,HIGH); } } } void loop() { getData(); } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP xxxi ... LG, HTC Asus cơng bố đối tác thức Trong năm 2014, có 720.000 thiết bị Android Wear bán hãng LG, Motorola Samsung[3] Hình 2.2: Thiết bị sử dụng Wear OS Wear OS dựa core Linux người anh em smartphone... Wear OS by Google Wear OS phiên hệ điều hành mở Android Google thiết kế cho đồng hồ thông minh thiết bị đeo khác Bằng cách kết nối với điện thoại thông minh chạy Android phiên 4.3+, Android Wear. .. VỀ WEAR OS Google mắt hệ điều hành riêng cho smartwatch Android Wear vào năm 2014 Android Wear có mã nguồn mở Android thúc đẩy phát triển hãng sản xuất phụ kiện đeo Tháng 3/2018, Android Wear