ỨNG DỤNG INTERNET OF THINGS XÂY DỰNG HỆ THỐNG HỖ TRỢ QUẢN LÝ NHÀ KÍNH

42 1 0
  • Loading ...
1/42 trang

Thông tin tài liệu

Ngày đăng: 27/03/2019, 14:43

BỘ GIÁO DỤC ĐÀO TẠO TRƢỜNG ĐẠI HỌC ĐÀ LẠT BÁO CÁO TỔNG KẾT ĐỀ TÀI KHOA HỌC SINH VIÊN NĂM 2018 ỨNG DỤNG INTERNET OF THINGS XÂY DỰNG HỆ THỐNG HỖ TRỢ QUẢN LÝ NHÀ KÍNH Chủ nhiệm đề tài: Võ Xuân Phong, CTK38, 1410349 Lâm Đồng, tháng 6/2018 BỘ GIÁO DỤC ĐÀO TẠO TRƢỜNG ĐẠI HỌC ĐÀ LẠT BÁO CÁO TỔNG KẾT ĐỀ TÀI KHOA HỌC SINH VIÊN NĂM 2018 ỨNG DỤNG INTERNET OF THINGS XÂY DỰNG HỆ THỐNG HỖ TRỢ QUẢN LÝ NHÀ KÍNH Giáo viên Hƣớng dẫn (ký, họ tên) Chủ nhiệm đề tài (ký, họ tên) Xác nhận quan chủ trì (Ký, họ tên,đóng dấu) Lâm Đồng, tháng 6/2018 Danh sách thành viên Sinh viên thực Họ tên STT MSSV Email 1410349 Võ Xuân Phong phongvxk38@gmail.com 1410183 Nguyễn Thanh Tùng ngthtung2805@gmail.com Giáo viên hướng dẫn: TS Trần Ngô Như Khánh MỤC LỤC CHƢƠNG 1: TỔNG QUAN .1 1.1 Phương pháp nghiên cứu 1.2 Nội dung kết nghiên cứu 1.3 Công nghệ Internet of Things (IoT) 1.4 Các mơ hình triển khai IoT 1.5 Một số giao thức truyền liệu sử dụng IoT CHƢƠNG 2: PHÂN TÍCH, THIẾT KẾ HỆ THỐNG 13 2.1 Ứng dụng máy chủ (Server) 13 2.2 Cơ sở liệu lưu trữ 14 2.3 Ứng dụng di động 14 2.4 Hệ thống thiết bị nhà kính 15 CHƢƠNG 3: TRIỂN KHAI HỆ THỐNG 17 3.1 Mô tả hệ thống 17 3.2 Một số kết xây dựng hệ thống 27 CHƢƠNG 4: KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 33 4.1 Kết luận 33 4.2 Hướng phát triển 33 TÀI LIỆU THAM KHẢO 34 DANH SÁCH HÌNH ẢNH Hình 1 Kiến trúc hệ thống IoT Hình Hình ảnh tổng quan IOT Hình Các thành phần sở IoT Hình Các mơ hình triển khai IOT Hình Mơ hình hoạt động MQTT Hình Mơ hình giao thức CoAP HTTP 10 Hình Mơ hình hoạt động Websocket 11 Hình Mơ hình tổng quan hệ thống 13 Hình 2 Mơ hình hoạt động RESTful API 15 Hình Mơ hình triển khai 18 Hình Bộ điều khiển nhà kính 19 Hình 3 Màn hình thống kê ứng dụng web 28 Hình Màn hình điều khiển ứng dụng web 28 Hình Màn hình cấu hình tự động 29 Hình Màn hình đăng nhập ứng dụng di động 29 Hình Màn hình điều khiển ứng dụng di động 30 Hình Màn hình xem thông số môi trường ứng dụng di động 31 Hình Màn hình thống kê thơng số môi trường ứng dụng di động 32 DANH SÁCH BẢNG BIỂU Bảng 1 Danh mục loại thiết bị nhà kính 16 Bảng Danh mục thiết bị nhà kính 21 MỞ ĐẦU Internet kết nối vạn vật – Internet of Things (IoT) mạng toàn cầu thiết bị truyền thơng kết nối với IoT tích hợp khái niệm truyền thơng lúc nơi, tính tốn tự động thông minh Trong môi trường IoT, “mọi thứ” (things), đặc biệt vật dụng hàng ngày đồ dùng gia dụng, quần áo, xe cộ, đường xá, vật liệu thơng minh,… đọc được, nhận dạng, định vị điều khiển thông qua internet [1] Điều tạo tảng cho nhiều ứng dụng ứng dụng giám sát điều khiển áp dụng cho nhiều lĩnh vực có nơng nghiệp Hiện nay, xu cách mạng công nghiệp 4.0, nông nghiệp công nghệ cao định hướng để phát triển kinh tế - xã hội nước ta Riêng Lâm Đồng, địa phương mạnh phát triển kinh tế nông nghiệp với điều kiện khí hậu, đất đai thích hợp với vùng sinh thái đặc trưng, có gần 209.000 đất đỏ bazan thuận lợi cho phát triển đa dạng, quanh năm nhiều chủng loại trồng rau, hoa, chè, cà phê, tiêu, điều, ăn trái, phát triển chăn ni bò sữa, ni cá nước lạnh, ứng dụng IoT sản xuất nông nghiệp trở thành nhu cầu cấp thiết Tồn tỉnh có 50.000ha đất sản xuất nơng nghiệp sản xuất theo mơ hình ứng dụng cơng nghệ cao, chiếm 18% tổng diện tích sản xuất nông nghiệp, tỷ trọng giá trị sản xuất nơng nghiệp cơng nghệ cao đạt 30% giá trị tồn ngành, 80% giá trị xuất tồn tỉnh Đã có nhiều mơ hình ứng dụng IoT nơng nghiệp triển khai thực Chẳng hạn mơ hình ứng dụng IoT vào trồng nhà lưới, nhà kính thơng qua hệ thống giám sát thơng số môi trường, như: độ pH, độ dẫn điện EC dung dịch thủy canh, nhiệt độ, độ ẩm không khí hay mơ hình điều khiển thơng minh cho vườn thông qua việc giám sát nhiệt độ độ ẩm khơng khí; thơng tin độ ẩm đất theo dõi ghi nhận; giảm chi phí nhân cơng, tăng suất giảm lượng nước tiêu thụ Hay mơ hình tăng suất kỹ thuật chiếu sáng hiệu nhằm rút ngắn thời gian canh tác, tăng sản lượng đến hai lần, cải thiện chất lượng rau (màu sắc, chất dinh dưỡng) Tuy nhiên, việc ứng dụng IoT nơng nghiệp cơng nghệ cao gặp nhiều khó khăn chi phí đầu tư ban đầu lớn; tồn tâm lý ngại thay đổi, ứng dụng giải pháp công nghệ, kỹ thuật mới; liên kết nghiên cứu - quản lý chuyển giao - ứng dụng rời rạc Theo thống kê năm 2017, địa bàn tỉnh có khoảng 15 trang trại/doanh nghiệp ứng dụng IoT tập trung doanh nghiệp lớn, chưa áp dụng rộng rãi mô hình cho nhiều trang trại hộ nơng dân khác [2] Mục tiêu đề tài nghiên cứu kiến trúc tảng IoT để ứng dụng xây dựng hệ thống mô hỗ trợ quản lý nhà kính, hướng tới việc tiếp cận phát triển ứng dụng nhà kính thơng minh có chi phí triển khai thấp ứng dụng rộng rãi Đề tài “Ứng dụng Internet of Things xây dựng hệ thống hỗ trợ quản lý nhà kính” thực góp phần giải vấn đề Hệ thống cung cấp chức hỗ trợ quản lý điều khiển thiết bị nhà kính theo thời gian thực, thu thập thơng số mơi trường, hệ thống tự động hóa dựa thơng số mơi trường gửi lên từ cảm biến người dùng lập lịch cho thiết bị bật tắt tự động theo thời gian, thống kê lập báo cáo CHƢƠNG 1: TỔNG QUAN 1.1 Phƣơng pháp nghiên cứu Hướng tiếp cận đề tài dựa việc tìm hiểu, nghiên cứu kiến trúc, công nghệ ứng dụng IoT, đặc biệt lĩnh vực nông nghiệp công nghệ cao để phát triển hệ thống IoT quản lý nhà kính Kiến trúc hệ thống IoT chia làm 05 tầng: tầng nhận thức (Perception Layer), tầng mạng (Network layer), tầng trung gian (Middleware layer), tầng ứng dụng (Application layer) tầng nghiệp vụ (Bussiness layer) [3] Tầng nhận thức gồm cảm biến thiết bị chấp hành sử dụng IoT Tầng mạng làm nhiệm vụ chuyển liệu tạo thiết bị vật lý tầng nhận thức đến tầng trung gian thông qua công nghệ RFID, ZigBee, WPAN, WSN, DSL, UMTS, GPRS, WiFi, WiMax, LAN, WAN, 3G LTE Tầng trung gian có chức quản lý dịch vụ, kết nối dịch vụ với nơi yêu cầu thông qua chế dùng địa tên để cung cấp khả độc lập với phần cứng Trong đó, tầng ứng dụng cung cấp dịch vụ yêu cầu người dùng Dựa thơng tin có từ tầng ứng dụng, tầng nghiệp vụ - có nhiệm vụ quản lý hoạt động tổng thể hệ thống IoT - xây dựng mơ hình nghiệp vụ, đồ thị, biểu đồ,… Hình 1 Kiến trúc hệ thống IoT TRANG Dựa kiến trúc này, đề tài tập trung vào tầng ứng dụng để xây dựng hệ thống hỗ trợ quản lý nhà kính Để minh họa cho hoạt động nhà kính, điều khiển khiển thiết kế phát triển dựa board mạch vi xử lý Ardunio Bộ điều khiển kết nối đến thiết bị thiết bị cảm biến, thiết bị chấp hành (actuator) Ứng dụng xây dựng dựa công nghệ điện toán đám mây, hỗ trợ tảng thiết bị di động 1.2 Nội dung kết nghiên cứu Hệ thống hỗ trợ quản lý nhà kính được xây dựng gồm chức quản lý điều khiển thiết bị thời gian thực, thu thập thơng số mơi trường, tự động hóa hoạt động thiết bị dựa thông số môi trường người dùng lập lịch, thống kê xem thông số theo nhiều khung thời gian 1.3 Công nghệ Internet of Things (IoT) 1.3.1 Khái niệm Mạng lưới vạn vật kết nối Internet Mạng lưới thiết bị kết nối Internet viết tắt IoT (tiếng Anh: Internet of Things) kịch giới, mà đồ vật, người cung cấp định danh riêng mình, tất có khả truyền tải, trao đổi thông tin, liệu qua mạng mà không cần đến tương tác trực tiếp người với người, hay người với máy tính IoT phát triển từ hội tụ công nghệ không dây, công nghệ vi điện tử Internet Nói đơn giản tập hợp thiết bị có khả kết nối với nhau, với Internet với giới bên để thu thập thông tin môi trường xung quanh để thực cơng việc TRANG Việc thu thập thơng số nhà kính từ cảm biến nhiệt độ, độ ẩm DHT11 cảm biến ánh sáng BH1750 chuyển cho chân Arduino Arduino chuyển cho ESP8266 V1 có kết nối Wifi để gửi tồn liệu thu thập lên máy chủ lưu trữ liệu xuống sở liệu Mơ hình có tính qn cao chức điều khiển thời gian thực giao cho ESP8266 NodeMCU thu thập liệu gửi lên giao cho Arduino ESP8266 Vì phải tách phần điều khiển phần thu thập liệu riêng biệt vậy? Câu trả lời giao nhiều nhiệm vụ cho vi điều khiển khơng đảm bảo hoạt động tốt liệu truyền nhận bị chậm trễ, lập trình cho vi điều khiển ngôn ngữ C++ đoạn lệnh chạy xử lý tuần gây chậm trễ lớn dùng vi điều khiển Bảng sau mô tả chi tiết thông số chức thiết bị sử dụng nhà kính: Tên thiết bị Thơng số Chức Tên: Module ESP8266 NodeMCU ESP8266 NodeMCU Giữ chức điều khiển bật tắt cơng tắc IC chính: ESP8266 Wifi SoC Chip nạp giao tiếp UART: CP2102 Cấp nguồn: 5VDC MicroUSB Vin Tên: Mạch Arduino Uno Arduino Uno Chíp: ATmega328 Cấp nguồn: 5V Tên: Module Wifi ESP8266 Version ESP8266 V1 Giao tiếp: UART Cấp nguồn: 3.3V Tên: Cảm biến nhiệt độ, độ ẩm DHT11 DHT11 Giữ chức thu thập liệu từ cảm biến gửi lên Server Hỗ trợ kết nối vào Wifi để đẩy thông số từ cảm biến mà Arduino thu thập lên Server Cảm biến thông số nhiệt độ, độ ẩm môi trường Cấp nguồn: - 5V Đo tốt dải nhiệt độ từ đến 50 độ C sai số +- độ C BH1750 Tên: Cảm biến cường độ ánh TRANG 20 Cảm biến thông số sáng BH1750 cường độ ánh sáng Cấp nguồn: – 5V Khoảng đo: -> 65535 lux Tên: Relay Relay Relay dùng để bất tắt thiết bị dựa vào thị ESP8266 NodeMCU Số Relay: Điện áp kích: 5VDC Bảng Danh mục thiết bị nhà kính Bộ điều khiển nhà kính sử dụng thư viện Socket.IO để truyền thông giao tiếp với Web server thiết lập Đoạn mã sau minh hoạ việc sửa dụng Arduino IDE để viết nạp mã cho điều khiển ngôn ngữ viết C++ #include #include #include SocketIOClient client; //Tên mạng Wifi để kết nối vào Wifi để Internet const char* ssid = "PhongVo"; const char* password = "123456789"; char host[] = "192.168.1.54"; //Địa Server int port = 3484; //Cổng dịch vụ socket server tạo! int D0 = 0, D1 = 1, D2 = 2; int leds[3] = { D0, D1, D2 }; //từ khóa extern: dùng để #include biến toàn cục số thư viện khác Trong thư viện SocketIOClient có hai biến tồn cục // mà cần quan tâm // RID: Tên hàm (tên kiện // Rfull: Danh sách biến (được đóng gói lại chuối JSON) extern String RID; extern String Rfull; void setup() { Serial.begin(115200); delay(10); //Thiết lập chân OUTPUT pinMode(leds[0], OUTPUT); pinMode(leds[1], OUTPUT); pinMode(leds[2], OUTPUT); //Kết nối vào mạng Wifi TRANG 21 WiFi.begin(ssid, password); //Chờ đến kết nối WIFI while (WiFi.status() != WL_CONNECTED) { //Thốt khỏi vòng delay(500); Serial.print('.'); } //Cố gắng kết nối đến Server if (!client.connect(host, port)) { Serial.println(F("Ket noi den socket server that bai!")); return; } //Khi kết nối thành cơng if (client.connected()) { //Thì gửi kiện ("connection") đến Socket server ahihi client.send("connection", "message", "Connected !!!!"); delay(1000); client.send("my-devices-state"); } } void loop() { //Khi bắt kiện có hai tham số: // +RID: Tên kiện // +RFull: Danh sách tham số nén thành chuỗi JSON! if (client.monitor()) { Serial.println(RID); Serial.println(Rfull); if (RID == "your-devices-state"){ //Chuyển đổi thông điệp nhận dạng JSON StaticJsonBuffer JSONBuffer; JsonObject& parsed = JSONBuffer.parseObject(Rfull); //Lấy thông tin trạng thái từ Server gửi //Sử dụng lệnh digitalWrite để bật tắt công tắc digitalWrite(leds[0], parsed["mydev"][0]); digitalWrite(leds[1], parsed["mydev"][1]); digitalWrite(leds[2], parsed["mydev"][2]); } } } 3.1.3 Ứng dụng di động Các API xây dựng để ứng dụng di động giao tiếp với server Trước hết cần tạo API để tạo token người dùng đăng nhập sau: // login TRANG 22 exports.login = function(req, res) { var username = req.body.email; var password = req.body.password; var dbname = req.body.dbname; mongoose.connect('mongodb://localhost:27017/'+dbname); User.findOne({ 'email': username }, function(err, user) { console.log(user); if (!user) { res.json({ error : 'User is not exist'}) } else if (user && user.comparePassword(password)) { var payload = { email: user.email, dbname:dbname }; var jwtToken = jwt.sign(payload, config.jwtSecret, { expiresIn: * 30000000 }); console.log('jwtToken: ' + jwtToken); Farm.find({},function (err, farm){ var farms = farm.map(function(item){ return item.name; }) res.json({ name:user.username, dbname:dbname, email:user.email, farms:farms, token:jwtToken }) }) } else { res.json({ error : 'Login Error'}) } }) }; API để xác thực token: exports.isAuthenticated = function(req, res, next) { if (req.headers && req.headers.authorization && req.headers.authorization.split(' ')[0] === 'JWT') { var jwtToken = req.headers.authorization.split(' ')[1]; jwt.verify(jwtToken, config.jwtSecret, function(err, payload) { if (err) { console.log(err); res.status(401).json( {success:false,message: 'Unauthorized user!'}); } else { TRANG 23 req.payload = payload; next(); } }); } else { res.status(401).json({ message: 'Unauthorized user!' }); } }; API để lấy trạng thái cảm biến: exports.get_real_time = function(req, res){ var payload = req.payload; var farm = req.params.farm; console.log(farm); mongoose.connect('mongodb://localhost:27017/'+payload.dbname); Model.findOne({"farm_name":farm},function(err,model){ if(err) res.send(err); res.json(model); }) sort({ "create_date": -1 }) limit(1) }; API nhận yêu cầu từ ứng dụng di động: 'use strict'; module.exports = function(app) { var auth = require(' /controllers/AuthController'); var device = require(' /controllers/DeviceController'); var temphumi = require(' /controllers/TempHumiController'); var user = require(' /controllers/UserController'); var microController = require(' /controllers/MicroController'); var farm = require(' /controllers/FarmController'); var controlType = require(' /controllers/ControlTypeController'); var automaticSchedule = require(' /controllers/AutomaticScheduleTimeController'); var automaticControl = require(' /controllers/AutomaticControlController'); app.route('/device') get(auth.isAuthenticated,device.get_all) post(auth.isAuthenticated,device.create); app.route('/devicefarm/:farm') get(auth.isAuthenticated, device.get_by_farm); TRANG 24 app.route('/device/:id') get(auth.isAuthenticated,device.single) put(auth.isAuthenticated,device.update) delete(auth.isAuthenticated,device.delete); app.route('/microcontroller') get(auth.isAuthenticated,microController.get_all) post(auth.isAuthenticated,microController.create); Đoạn mã minh họa xây dựng điều khiển đèn thời sử dụng API Socket.io ứng dụng di động: class DeviceScreen extends Component { constructor(props) { super(props); this.state= { ListDevice: new Array(), isLoading: false, isRefreshing:false, error:"", selectedFarm:"KV1" }; this.socket = io('http://35.185.177.64:3484', { transports: ['websocket']// you need to explicitly tell it to use websockets, }); console.log(props); this.onLedChange = this.onLedChange.bind(this); this.reloadListDevice = this.reloadListDevice.bind(this); this.handleRefreshData = this.handleRefreshData.bind(this); } onLedChange(data){ this.reloadListDevice(data); } async getListDevice(farm){ const {user} = this.props.user; const json = await AppWorker.getListDevice(user.token,farm); if (json === undefined) { this.setState({error:'Can\'t get data from server', isLoading:false, isRefreshing:false}); } else if (json.code) { this.setState({error:json.message}); } else { this.setState({ListDevice:json,isLoading:false,isRefreshing:false}); TRANG 25 } } reloadListDevice(data){ this.setState({ListDevice:data.led}); } componentDidMount() { const {user} =this.props.user; this.socket.on('connect',function(s){ this.socket.emit("request-from-client",{ client: user.dbname, farm_name: this.state.selectedFarm }); }.bind(this)); this.socket.on('LED_website', this.onLedChange); this.setState({selectedFarm:user.farms[0]}); this.getListDevice(user.farms[0]); } onSendLed(data){ var list = this.state.ListDevice; var index = list.findIndex(x=>x.id===data.id); list[index] = data; this.socket.emit("led-website-change-state",{ devices:list }); } handleSelectFarm(farm) { this.setState({ selectedFarm: farm }); this.getListDevice(farm); } handleRefreshData(){ this.setState({isRefreshing:true}); this.getListDevice(this.state.selectedFarm); } _renderItem(item) { return (this.onSendLed(item)}/>) } renderHeader(user) { return (); }; render() { const {isLoading,ListDevice, isRefreshing}=this.state; const {user} = this.props.user; return ( index} renderItem={({ item }) => this._renderItem(item) } scrollEventThrottle={1} refreshing={isRefreshing} numColumns={4} refreshControl={ } ListHeaderComponent={this.renderHeader(user)} onEndReachedThreshold={100} />); } } DeviceScreen.navigationOptions = { title: "Thiết bị", headerLeft: Menu(), headerRight: EmptyView(), headerTintColor: Color.headerTintColor, headerStyle: Styles.Common.toolbar, headerTitleStyle: Styles.Common.headerStyle, tabBarIcon: ({tintColor}) => , } const mapStateToProps = ({netInfo, user}) => ({netInfo, user}); export default connect(mapStateToProps)(DeviceScreen); 3.2 Một số kết xây dựng hệ thống Sau số hình ảnh minh họa kết triển khai phân hệ hệ thống TRANG 27 3.2.1 Ứng dụng web Hình 3 Màn hình thống kê ứng dụng web Hình Màn hình điều khiển ứng dụng web TRANG 28 Hình Màn hình cấu hình tự động 3.2.2 Ứng dụng di động Hình Màn hình đăng nhập ứng dụng di động TRANG 29 Hình Màn hình điều khiển ứng dụng di động TRANG 30 Hình Màn hình xem thông số môi trường ứng dụng di động TRANG 31 Hình Màn hình thống kê thơng số môi trường ứng dụng di động TRANG 32 CHƢƠNG 4: KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 4.1 Kết luận Thơng qua việc nghiên cứu, tìm hiểu kiến trúc IoT công nghệ, giao thức nổii bật dùng để xây dựng, phát triển ứng dụng IoT, đề tài xây dựng hệ thống mơ hỗ trợ số qui trình quản lý nhà kính Cụ thể:  Về mặt lý thuyết: Hiểu rõ khái niệm kiến trúc hệ thống IoT qui trình để xây dựng ứng dụng IoT  Về mặt thực nghiệm: Đã mô việc ứng dụng IoT nông nghiệp công nghệ cao thông qua việc xây dựng hệ thống hỗ trợ quản lý nhà kính với nhiều chức từ đến nâng cao Hệ thống phát triển có khả mở rộng tính khả thi cao, áp dụng vào thực tế kết hợp với thiết bị phần cứng chuyên dụng nhà kính 4.2 Hƣớng phát triển Với kết đạt được, đề tài dự kiến tiếp tục phát triển với định hướng sau: - Triển khai hệ thống vào thực tế (tại nhà kính thật) - Phát triển bổ sung chức bảo mật - Phát triển tính thơng minh nhận dạng giọng nói, cảnh cáo hoạt động thiết bị - Xây dựng qui trình áp dụng cho loại trồng cụ thể nhà kính, hệ thống tự động điều chỉnh hoạt động theo trình sinh trưởng cài đặt trước - Áp dụng máy học để phân tích, rút trích thơng tin dự báo từ liệu thu thập TRANG 33 TÀI LIỆU THAM KHẢO [1] Marques, G., Garcia, N., & Pombo, N (2017) A survey on IoT: architectures, elements, applications, QoS, platforms and security concepts In Advances in Mobile Cloud Computing and Big Data in the 5G Era (pp 115-130) Springer, Cham [2] Vũ Đình Đơng, Lâm Đồng coi trọng ứng dụng, phát triển nông nghiệp công nghệ cao, Nguồn: http://www.qdnd.vn/kinh-te/cac-van-de/lam-dong-coi-trong-ung-dungphat-trien-nong-nghiep-cong-nghe-cao-523910 [3] Al-Fuqaha, A., Guizani, M., Mohammadi, M., Aledhari, M., & Ayyash, M (2015) Internet of things: A survey on enabling technologies, protocols, and applications IEEE Communications Surveys & Tutorials, 17(4), 2347-2376 TRANG 34
- Xem thêm -

Xem thêm: ỨNG DỤNG INTERNET OF THINGS XÂY DỰNG HỆ THỐNG HỖ TRỢ QUẢN LÝ NHÀ KÍNH, ỨNG DỤNG INTERNET OF THINGS XÂY DỰNG HỆ THỐNG HỖ TRỢ QUẢN LÝ NHÀ KÍNH

Gợi ý tài liệu liên quan cho bạn

Nhận lời giải ngay chưa đến 10 phút Đăng bài tập ngay