Hệ thống giám sát online và đảm bảo thông số nước nuôi trồng thủy sản

104 15 0
Hệ thống giám sát online và đảm bảo thông số nước nuôi trồng thủy sản

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI LUẬN VĂN THẠC SĨ Hệ thống giám sát online đảm bảo thông số nước nuôi trồng thủy sản Phan Thành Nam Nam.PTCB180005@sis.hust.edu.vn Ngành Kỹ thuật Cơ điện tử Giảng viên hướng dẫn: TS Đặng Thái Việt Viện: Cơ khí Chữ ký GVHD HÀ NỘI, 10/2020 ĐỀ TÀI LUẬN VĂN Đề tài: “Hệ thống giám sát online đảm bảo thông số nước nuôi trồng thủy sản” Tên tiếng anh: “Online monitoring system and ensure aquaculture water parameters” Giáo viên hướng dẫn Ký ghi rõ họ tên LỜI CẢM ƠN Em xin chân thành cảm ơn Thầy giáo, Tiến sĩ Đặng Thái Việt, người hướng dẫn tận tình cho em suốt thời gian tìm hiểu, nghiên cứu hồn thành luận văn Sự hướng dẫn tận tình thầy giúp em có thêm nhiều kiến thức liên quan đến thực tiễn ứng dụng thực tế ngành nông nghiệp Đồng thời tác giả xin cảm ơn quý thầy, cô viện khí, đặc biệt thầy mơn Cơ điện tử - Trường Đại học Bách khoa Hà Nội, trang bị cho tác giả nhiều kiến thức cần thiết suốt thời gian học tập, nghiên cứu trường để tác giả hồn thiện tốt luận văn Trong trình học tập thời gian nghiên cứu, thực để hoàn thành luận văn không tránh khỏi vấn đề thiếu sót cải tiến, em mong nhận đóng góp ý kiến từ thầy, để luận văn trở nên hoàn thiện Em xin chân thành cảm ơn! Tóm tắt nội dung luận văn Nội dung luận văn nhằm giải toán xây dựng lựa chọn giải pháp phù hợp để triển khai hệ thống giám sát điều khiển từ xa thiết bị môi trường nuôi trồng thủy sản với tiêu chí đáp ứng thời gian tốt, sử dụng hiệu tài nguyên phần cứng, đảm bảo tính tin cậy giá thành thấp Phương pháp thực hiện: Kết hợp nghiên cứu lý thuyết, làm mạch phần cứng lập trình phần mềm để hình thành hệ thống gồm cụm trung tâm Master trạm đo Slave có tính giám sát thơng số mơi trường nước điều khiển từ xa qua internet, phản hồi trạng thái thiết bị Công cụ sử dụng: Arduino IDE, Raspian Linux, Docker, HTTP, PHP,… Kết luận văn: Phù hợp yêu cầu đặt ra, hệ thống hoạt động với mục đích đề Định hướng phát triển: Ứng dụng vào hệ thống rộng IoT, cải thiện độ xác trình đo cải tiến giao diện quản lý người dùng Hà Nội, ngày tháng năm 2020 Học viên thực LỜI MỞ ĐẦU Trong năm qua, nuôi trồng thuỷ sản Việt Nam có bước phát triển mạnh mẽ, thu thành tựu to lớn, góp phần xóa đói giảm nghèo, tạo thu nhập việc làm cho phận lao động khơng nhỏ, đóng góp tích cực cho kinh tế nơng nghiệp nói riêng kinh tế đất nước nói chung Bên cạnh thành tựu quan trọng, nuôi trồng thủy sản nước ta phải đối mặt với số vấn đề tồn môi trường dịch bệnh Hiện dịch bệnh thủy sản môi trường ni thủy sản bị suy thối có chiều hướng gia tăng, khó kiểm sốt Vì lượng kháng sinh sử dụng lên đối tượng thuỷ sản nuôi gia tăng làm giảm chất lượng tôm, cá đủ tiêu chuẩn xuất vụ nuôi Những vấn đề cho thấy việc tăng cường quản lý để kiểm sốt mơi trường dịch bệnh cấp bách Công tác quan trắc môi trường nước cịn giúp người ni chủ động cơng tác quản lý chất lượng nước ao ni phịng ngừa dịch bệnh có hiệu Do quan trắc mơi trường ni trồng thủy sản đóng vai trị quan trọng để nuôi trồng thủy sản hiệu quả, giảm thiểu nguy dịch bệnh, đảm bảo phát triển bền vững Từ thực tế đó, để giải tốn đồng thời hồn thiện ý tưởng hệ thống giám sát thông minh nuôi trồng thủy sản, thầy hướng dẫn định hướng giao nhiệm vụ nghiên cứu đề tài: “Hệ thống giám sát online đảm bảo thông số nước nuôi trồng thủy sản” Mục đích luận văn tập trung nghiên cứu, tìm hiểu phương pháp giải phép đo đạt thông số môi trường nước, giao thức truyền thơng ứng dụng hệ thống đo gồm nhiều trạm đo, đồng thời lên phương án hệ thống mơ hồn thiện từ khâu giám sát thông số trực tuyến đến khâu điều khiển trạm đo Các bước tiến hành: - Thu thập tài liệu liên quan đến đề tài, tương đương với đề tài - Lên phương án thiết kế mạch cho hệ thống Sử dụng code lập trình để thực thi thuật tốn mong muốn nạp vào arduino raspberry pi - Nghiên cứu cách thu chuyển đổi liệu analog cho cảm biến to, pH, DO, … - Tìm hiểu giao thức MQTT cách thức truyền, nhận tin với MQTT - Tìm hiểu giao thức truyền nhận qua Zigbee Gateway Zigbee Router Zigbee - Chạy thử nghiệm truyền, nhận điều khiển theo sơ đồ đề - Xây dựng giao diện truyền, nhận để đánh giá sơ kết - Đề xuất phương án cải tiến, phát triển thêm cho hệ thống Luận văn tổ chức thành chương với nội dung cụ thể sau: Chương 1: Tổng quan Internet vạn vật vấn đề cấp thiết quan trắc mơi trường thủy sản Chương 2: Mơ hình mạng, truyền thông giao thức MQTT, Zgbee Chương 3: Thiết kế thi cơng hệ thống, xử lý tín hiệu cảm biến Chương 4: Kết thực nghiệm hướng phát triển đề tài Luận văn có tham khảo nguồn tài liệu từ báo, tạp chí khoa học, cơng trình nghiên cứu public, sở luận văn trường đại học trình bày chi tiết mục tài liệu tham khảo luận văn Dù cố gắng hoàn thành đề tài với cường độ làm việc cao, kỹ lưỡng hướng dẫn cụ thể, nhiệt tình thầy hướng dẫn hiểu biết hạn chế nên chắn luận văn không tránh khỏi khả thiết sót Vì vậy, tác giả mong nhận góp ý hội đồng, quý thầy cô để tác giả rút kinh nghiệm bổ sung thêm kiến thức cho thân Cuối tác giả xin chân thành cảm ơn quan tâm, bảo thầy cô môn Cơ Điện Tử trường Đại học Bách khoa Hà Nội đặc biệt hướng dẫn tận tình TS Đặng Thái Việt giúp tác giả hoàn thành luận văn Hà Nội, ngày tháng năm 2020 Học viên thực MỤC LỤC CHƯƠNG TỔNG QUAN 13 1.1 Internet vạn vật – Cuộc cách mạng công nghệ 13 1.1.1 Internet vạn vật (IoT) gì? 13 1.1.2 Khả định danh độc 14 1.1.3 Xu hướng tính chất IoT 15 1.1.4 Làm để IoT hoạt động? 16 1.1.5 Ứng dụng IoT 17 1.1.6 Những tác nhân ngăn cản phát triển IoT 18 1.1.7 Cuộc cách mạng nông nghiệp 4.0 20 1.2 Tính cấp thiết việc quan trắc ni trồng thủy sản 1.2.1 Sự cần thiết phải có hệ thống quan trắc môi trường nuôi trồng thủy 21 sản 21 1.2.2 Kinh nghiệm quan trắc môi trường nuôi trồng thủy sản số quốc gia giới 23 1.2.3 Hiện trạng quan trắc môi trường nuôi trồng thủy sản Việt Nam 24 1.3 Tính cấp thiết hệ thống quan trắc IoT nuôi trồng thủy sản 25 1.4 Kết luận chương 26 CHƯƠNG MƠ HÌNH MẠNG VÀ GIAO THỨC KẾT NỐI 26 2.1 Mơ hình mạng 26 2.1.1 Mơ hình OSI 26 2.1.2 Mơ hình TCP/IP 28 2.2 Giao thức MQTT 29 2.2.1 Các khái niệm 29 2.2.2 Mơ hình giao thức MQTT 30 2.2.3 Cấu trúc MQTT 31 2.2.4 Các gói tin quan trọng giao thức MQTT 32 2.2.5 Quy trình truyền nhận liệu MQTT 34 2.3 Giao thức Zigbee 36 2.3.1 Các khái niệm 36 2.3.2 Mơ hình giao thức Zigbee 36 2.3.3 Cấu trúc Zigbee 37 2.4 Kết luận chương 38 CHƯƠNG THIẾT KẾ VÀ THI CƠNG HỆ THỐNG, XỬ LÝ TÍN HIỆU 39 CẢM BIẾN 39 3.1 Xây dựng sơ đồ hệ thống 39 3.2 Sơ đồ nguyên lý tổng quan chức khối mạch hệ thống 41 3.2.1 Khối xử lý trung tâm cho cụm – Arduino UNO 41 3.2.2 Khối giao tiếp internet – Node MCU ESP8266 47 3.2.3 Khối giao tiếp trung gian – Module Zigbee CC2531 48 3.2.4 Khối điều khiển qua rơ le 49 3.2.5 Khối cảm biến 50 3.3 Hệ thống giao diện Web quản lý 58 3.3.1 Tổng quan website 58 3.3.2 Thiết kế website gì? 59 3.3.3 Thiết kế website cho hệ thống quan trắc 59 3.3.4 Giao diện quản lý web thực tế 63 3.3.5 Cơ sở liệu 64 3.4 Tổng quan cảm biến 65 3.4.1 Cảm biến 65 3.4.2 Lựa chọn thiết bị phần cứng cảm biến 67 3.5 Hiệu chuẩn cảm biến 71 3.5.1 Dung dịch hiệu chuẩn 71 3.5.2 Định nghĩa hiệu chuẩn: 71 3.5.3 Đường cong chuẩn 72 3.5.4 Xử lý sai số cảm biến 74 3.6 Kết luận chương 78 CHƯƠNG KẾT QUẢ THỰC NGHIỆM VÀ HƯỚNG PHÁT TRIỂN ĐỀ 79 TÀI 79 4.1 Kết thu 79 4.2 Quá trình hoạt động hệ thống đo lường 79 4.3 Quá trình chạy thử 81 4.3.1 Kiểm tra phần cứng 81 4.3.2 Kiểm tra phần mềm 81 4.3.3 Quá trình kết nối MQTT Broker trạm Client trạm đo con: 82 4.3.4 Quá trình kết nối qua Zigbee trạm đóng vai trị Router Gateway (Coordinator): 83 4.3.5 Các cảm biến hệ thống thực tế 83 4.3.6 Xây dựng giao diện web người dùng trực quan: 85 4.3.7 Kết đo hệ thống thiết kế so với đo từ cảm biến dùng tay sử dụng cảm biến HANNA: 86 4.4 Kết luận chương 87 KẾT LUẬN 89 TÀI LIỆU THAM KHẢO 90 PHỤ LỤC CODE 91 10 TÀI LIỆU THAM KHẢO [1] Joel Lee, “What Is The Internet Of Things & How Will It Affect Out Future”, June 28 2013 [2] Brian Proffitt, “What’s Holding Up The Internet Of Things”, June 14 2013 [3] Wikipedia, “Internet of things”, last edited on 26 May 2018 [4] Wikipedia, “Digital filter”, last edited on 24 May 2018 [5] the U.S Geological Survey (USGS) , “Office of Water Quality Technical Memorandum 2011.03” [6] “Using a Thermistor” [7]” Conductivity, Salinity & Total Dissolved Solids” [8] YSI guide, “The Dissolved Oxygen Handbook” [9] Mettler-Toledo Thornton Inc, “Conductivity Sensor Calibrations to Meet Water Industry Requirements” [10] Bộ Nông Nghiệp Và Phát Triển Nông Thôn, “Dự án quan trắc môi trường phục vụ nuôi trồng thủy sản”, tháng 10 năm 2014 [11] Chao Yang, Jianying Zheng, Xiaoqiang Ren, Wen Yang, Hongbo Shi, and Ling Shi, “Multi-Sensor Kalman Filtering With Intermittent Measurements”, May 2018 [12] Bozic, S M, “Digital and Kalman filtering”, 1979 [13] PGS.TS Nguyễn Quốc Trung, “Giáo trình Xử lý tín hiệu số”, NXB giáo dục, 2007 [14] Wikipedia, “PHP”, last edited on June 2018 [15] Wikipedia, “MySQL”, last edited on 18 May 2018 [16] Wikipedia, “HTML”, last edited on 14 May 2018 [17] Wikipedia, “CSS”, last edited on 30 May 2018 [18] Wikipedia, “JavaScript”, last edited on June 2018 90 PHỤ LỤC CODE //Code Arduino #include #include #include #include "pH.h" #include //Thư viện Zigbee #include //Chan noi DB18B20 voi Arduino #define ONE_WIRE_BUS OneWire oneWire(ONE_WIRE_BUS); DallasTemperature nhietdo(&oneWire); float t1; byte pH_Pin = A0; float pH1; char data1[6]; //TEMP nhiet char data2[6]; //TEMP pH int c = 10; //c = 10 trang thai tat, c = 11 trang thai bat ro le String data_nhan; String data; String data3; //t2 String data4; //pH2 const int switchPin1 = 9; //Zigbee #define ZCL_CLUSTER_ID_GEN_BASIC 0x0000 SoftwareSerial znp_serial(2, 3); zb_znp zigbee_network(&znp_serial); /* Biến xử lý điều khiển switch */ uint16_t control_switch_address = 0; void zigbee_send_msg(uint8_t data); int zb_znp::zigbee_message_handler(zigbee_msg_t& zigbee_msg) { /* zigbee start debug message */ Serial.print("[ZB msg] len: "); Serial.print(zigbee_msg.len); Serial.print(" cmd0: "); Serial.print(zigbee_msg.cmd0, HEX); Serial.print(" cmd1: "); 91 Serial.print(zigbee_msg.cmd1, HEX); Serial.print(" data: "); for (int i = 0; i < zigbee_msg.len; i++) { Serial.print(zigbee_msg.data[i], HEX); Serial.print(" "); } Serial.println(""); /* zigbee stop debug message */ uint16_t zigbee_cmd zigbee_msg.cmd0); = BUILD_UINT16(zigbee_msg.cmd1, switch (zigbee_cmd) { case AF_INCOMING_MSG: { afIncomingMSGPacket_t* st_af_incoming_msg (afIncomingMSGPacket_t*)zigbee_msg.data; Serial.println("AF_INCOMING_MSG"); switch (st_af_incoming_msg->cluster_id) { /* Router gửi data điều khiển đến CLUSTER */ case ZCL_CLUSTER_ID_GEN_BASIC: Serial.println("ZCL_CLUSTER_ID_GEN_BASIC"); = /* control_switch_address biến lưu địa Router Router gửi data đến Gateway qua CLUSTER Khi có địa Router Gateway gửi data ngược lại đến Router */ control_switch_address = st_af_incoming_msg->src_addr; /* data biến truy xuất để lấy byte từ Router */ data_nhan = st_af_incoming_msg->payload[st_af_incoming_msg->len 1]; //Lay du lieu cam bien tu cum gui den data3 = data_nhan.substring(0, 6); //Tách chuỗi liệu data4 = data_nhan.substring(7, 13); default: break; } } break; } } void setup() { 92 Serial.begin( 115200); /* start serial for debug */ nhietdo.begin (); //Khoi dong cam bien Wire.begin(8 ); znp_serial.begin(115200); //Khoi znp_serial.setTimeout(100); /* Khởi động coodinatior */ Serial.println("\nstart_coordinator(1)"); if (zigbee_network.start_coordinator(1) == 0) { Serial.println("OK"); } else { Serial.println("NG"); } pinMode(switchPin1, OUTPUT); // digitalWrite(switchPin1, HIGH); //Kich muc } Relay dong Zigbee Switch void loop() { //Gui du lieu toi ESP8266(MQTT Broker) pH1 = pH_Avg(pH_Pin); Serial.println(pH1); // // -Do nhiet -nhietdo.requestTemperatures(); Serial.print("Nhiet do: "); t1 = nhietdo.getTempCByIndex(0); //Su dung sensor nhiet DS18B20 Serial.println(t1); // Wire.onRequest(requestEvent); /* register request event */ //Nhan du lieu tu ESP8266 (MQTT Broker) Wire.onReceive(receiveEvent); /* register receive event */ // -Gui du lieu qua Zigbee zigbee_send_msg(data1+data2); //Lenh gui di data 93 // delay(1000); } // function that executes whenever data is received from master void receiveEvent(int howMany) { while (0 < Wire.available()) { c = Wire.read(); /* receive byte as a character */ Serial.println(c); } if (c == 11) { digitalWrite(switchPin1, LOW); //Kich muc Serial.println("Ro le bật"); } else if (c == 10) { digitalWrite(switchPin1, HIGH); Serial.println("Ro le tắt"); } } //Ham phan hoi lai yeu cau cua ESP8266 //Gui lenh sang ESP8166 void requestEvent() { dtostrf(t1, 6, 2, data1); Wire.write(data1); /*send string on request */ Wire.write(","); dtostrf(pH1, 6, 2, data2); delay(1000); Wire.write(data2); /*send string on request */ Wire.write("\n"); } void zigbee_send_msg(uint8_t data) { uint8_t st_buffer[1] = {data}; // data muốn gửi af_data_request_t st_af_data_request; st_af_data_request.cluster_id = ZCL_CLUSTER_ID_GEN_BASIC; st_af_data_request.dst_address = 0x0000; st_af_data_request.dst_endpoint = 0X01; st_af_data_request.src_endpoint = 0X01; st_af_data_request.trans_id = 0x00; st_af_data_request.options = 0X10; st_af_data_request.radius = 0x0F; st_af_data_request.len = sizeof(st_buffer); 94 st_af_data_request.data = st_buffer; zigbee_network.send_af_data_req(st_af_data_request); } //Code Arduino #include #include #include #include “pH.h" #include //Thư viện Zigbee #include //Chan noi DB18B20 voi Arduino #define ONE_WIRE_BUS OneWire oneWire(ONE_WIRE_BUS); DallasTemperature nhietdo(&oneWire); float t2; byte pH_Pin = A0; float pH2; char data1[6]; //TEMP nhiet char data2[6]; //TEMP pH int c = 10; //c = 10 trang thai tat, c = 11 trang thai bat ro le String data_nhan; String data; String data3; //t1 String data4; //pH1 const int switchPin2 = 9; //Zigbee #define ZCL_CLUSTER_ID_GEN_BASIC 0x0000 SoftwareSerial znp_serial(2, 3); zb_znp zigbee_network(&znp_serial); void zigbee_send_msg(uint8_t data); //Thong tin Zigbee int zb_znp::zigbee_message_handler(zigbee_msg_t& zigbee_msg) { Serial.print("[ZB msg] len: "); /* zigbee start debug message */ Serial.print(zigbee_msg.len); Serial.print(" cmd0: "); Serial.print(zigbee_msg.cmd0, HEX); 95 Serial.print(" cmd1: "); Serial.print(zigbee_msg.cmd1, HEX); Serial.print(" data: "); for (int i = 0; i < Serial.print(zigbee_msg.data[i], HEX); Serial.print(" "); } Serial.println(""); /* zigbee stop debug message */ uint16_t zigbee_cmd = zigbee_msg.cmd0); zigbee_msg.len; i++) { BUILD_UINT16(zigbee_msg.cmd1, switch (zigbee_cmd) { case ZDO_MGMT_LEAVE_REQ: { Serial.println("ZDO_MGMT_LEAVE_REQ"); } break; case ZB_RECEIVE_DATA_INDICATION: { Serial.println("ZB_RECEIVE_DATA_INDICATION"); } break; case ZDO_MGMT_PERMIT_JOIN_RSP: { Serial.println("ZDO_MGMT_PERMIT_JOIN_RSP"); ZdoMgmtPermitJoinRspInd_t* ZdoMgmtPermitJoinRspInd (ZdoMgmtPermitJoinRspInd_t*)zigbee_msg.data; Serial.print("\tsrcaddr: "); Serial.println(ZdoMgmtPermitJoinRspInd->srcaddr); Serial.print("\tstatus: "); Serial.println(ZdoMgmtPermitJoinRspInd->status); } break; = case ZDO_TC_DEV_IND: { Serial.println("ZDO_TC_DEV_IND"); } break; case AF_DATA_REQUEST_IND: { Serial.println("AF_DATA_REQUEST_IND"); uint8_t* status = (uint8_t*)zigbee_msg.data; 96 Serial.print("\tstatus: "); Serial.println(*status); } break; case AF_DATA_CONFIRM: { Serial.println("AF_DATA_CONFIRM"); afDataConfirm_t* afDataConfirm = (afDataConfirm_t*)zigbee_msg.data; Serial.print("\tstatus: "); Serial.println(afDataConfirm->status); Serial.print("\tendpoint: "); Serial.println(afDataConfirm->endpoint); Serial.print("\ttransID: "); Serial.println(afDataConfirm->transID); } break; case AF_INCOMING_MSG: { afIncomingMSGPacket_t* st_af_incoming_msg (afIncomingMSGPacket_t*)zigbee_msg.data; Serial.println("AF_INCOMING_MSG"); = #if defined (DBG_ZB_FRAME) Serial.print("group_id: "); Serial.println(st_af_incoming_msg->group_id, HEX); Serial.print("cluster_id: "); Serial.println(st_af_incoming_msg->cluster_id, HEX); Serial.print("src_addr: "); Serial.println(st_af_incoming_msg->src_addr, HEX); Serial.print("src_endpoint: >src_endpoint, HEX); Serial.print("dst_endpoint: >dst_endpoint, HEX); Serial.print("was_broadcast: >was_broadcast, HEX); Serial.print("link_quality: >link_quality, HEX); Serial.print("security_use: >security_use, HEX); Serial.print("time_stamp: >time_stamp, HEX); "); Serial.println(st_af_incoming_msg- "); Serial.println(st_af_incoming_msg- "); Serial.println(st_af_incoming_msg- "); Serial.println(st_af_incoming_msg- "); Serial.println(st_af_incoming_msg- "); Serial.println(st_af_incoming_msg97 Serial.print("trans_seq_num: "); Serial.println(st_af_incoming_msg>trans_seq_num, HEX); /* data biến truy xuất để lấy byte từ Router */ data_nhan = st_af_incoming_msg->payload[st_af_incoming_msg->len 1]; //Lay du lieu cam bien tu cum gui den data3 = data_nhan.substring(0, 6); //Tách chuỗi liệu data4 = data_nhan.substring(7, 13); } Serial.println(""); #endif } break; case ZDO_MGMT_LEAVE_RSP: { Serial.println("ZDO_MGMT_LEAVE_RSP"); } break; }} void setup() { Serial.begin(115200); /* start serial for debug */ nhietdo.begin(); //Khoi dong cam bien Wire.begin(8); znp_serial.begin(115200); //Khoi dong znp_serial.setTimeout(100); Zigbee /* Khởi động coodinator */ Serial.println("\nstart_coordinator(0)"); if (zigbee_network.start_coordinator(0) == 0) { Serial.println("OK"); } else { Serial.println("Khong khoi dong duoc Zigbee"); } pinMode(switchPin2, OUTPUT); digitalWrite(switchPin2, HIGH); } // Relay Switch void loop() { //Gui du lieu toi ESP8266(MQTT Broker) // Do pH pH2 = pH_Avg(pH_Pin); Serial.println(pH2); 98 // // -Do nhiet -nhietdo.requestTemperatures(); Serial.print("Nhiet do: "); t2 = nhietdo.getTempCByIndex(0); //Su dung sensor nhiet DS18B20 Serial.println(t2); // Wire.onRequest(requestEvent); /* register request event */ //Nhan du lieu tu ESP8266 (MQTT Broker) Wire.onReceive(receiveEvent); /* register receive event */ // -Gui du lieu qua Zigbee zigbee_send_msg(data1+data2); //Lenh gui di data // delay(1000); } // function that executes whenever data is received from master void receiveEvent(int howMany) { while (0 < Wire.available()) { c = Wire.read(); /* receive byte as a character */ Serial.println(c); } if (c == 11) { digitalWrite(switchPin2, LOW); Serial.println("Ro le bật"); } else if (c == 10) { digitalWrite(switchPin2, HIGH); Serial.println("Ro le tắt"); } } //Ham phan hoi lai yeu cau cua ESP8266 //Gui lenh sang ESP8166 void requestEvent() { dtostrf(t2, 6, 2, data1); Wire.write(data1); /*send string on request */ Wire.write(","); dtostrf(pH2, 6, 2, data2); delay(1000); Wire.write(data2); /*send string on request */ Wire.write("\n"); 99 } //Cau hinh de gui message qua Zigbee void zigbee_send_msg(uint8_t data) { uint8_t st_buffer[1] = {data}; // data muốn gửi af_data_request_t st_af_data_request; st_af_data_request.cluster_id = ZCL_CLUSTER_ID_GEN_BASIC; st_af_data_request.dst_address = 0x0000; st_af_data_request.dst_endpoint = 0X01; st_af_data_request.src_endpoint = 0X01; st_af_data_request.trans_id = 0x00; st_af_data_request.options = 0X10; st_af_data_request.radius = 0x0F; st_af_data_request.len = sizeof(st_buffer); st_af_data_request.data = st_buffer; zigbee_network.send_af_data_req(st_af_data_request); } //Code nodeMCU ESP8266 cụm tương tự cụm #include #include #include #include #define MQTT_VERSION MQTT_VERSION_3_1_1 //#define MQTT_SOCKET_TIMEOUT 10 // Wifi: SSID and password const char* WIFI_SSID = "namtuan"; const char* WIFI_PASSWORD = "0335861459"; // MQTT: ID, server IP, port, username and password const PROGMEM char* MQTT_CLIENT_ID = "ESP8266-T1"; const PROGMEM char* MQTT_SERVER_IP = "192.168.31.40"; const PROGMEM uint16_t MQTT_SERVER_PORT = 1883; const PROGMEM char* MQTT_USER = "hass"; const PROGMEM char* MQTT_PASSWORD = "hass"; // MQTT: topic 100 const PROGMEM char* MQTT_nhietdo_TOPIC = "hass1/temp"; const PROGMEM char* MQTT_pH_TOPIC = "hass1/pH"; char const* switchTopic1 = "/hass1/switch1/"; void callback(char* p_topic, byte* p_payload, unsigned int p_length); WiFiClient wifiClient; PubSubClient client(wifiClient); StaticJsonBuffer jsonBuffer; JsonObject& root = jsonBuffer.createObject(); //MQTT_SERVER_IP, MQTT_SERVER_PORT, callback, String t1; String pH1; int role1; const int switchPin1 = D7; String data, data1, data2; int x; void setup() { // init the serial Serial.begin(9600); Wire.begin(D1, D2); /* join i2c bus with SDA=D1 and SCL=D2 of NodeMCU */ // init the WiFi connection Serial.println(); Serial.println(); Serial.print("INFO: Connecting to "); WiFi.mode(WIFI_STA); Serial.println(WIFI_SSID); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("INFO: WiFi connected"); Serial.println("INFO: IP address: "); Serial.println(WiFi.localIP()); 101 // init the MQTT connection client.setServer(MQTT_SERVER_IP, MQTT_SERVER_PORT); client.setCallback(callback); client.setSocketTimeout(10); pinMode(switchPin1, OUTPUT); digitalWrite(switchPin1, LOW); } // Relay Switch void loop() { //Kiem tra ket noi Wifi de reconnect if (!client.connected()) { reconnect(); } client.loop(); Wire.requestFrom(8, 16); /* request & read data of size from slave */ //Bat dau nhan tu Arduino de gui len MQTT Broker receiveEvent(); t1 = data1; pH1 = data2; if ((t1 == "") || (t1 == "-127")) { Serial.println("ERROR: Failed to read from sensor nhiet do!"); t1 = "0.00"; publishData1(t1); // return; } else { publishData1(t1); } if (pH1 == "") { Serial.println("ERROR: Failed to read from sensor pH!"); pH1 = "0.00"; publishData2(pH1); // return; } else { publishData2(pH1); } delay(500); } void receiveEvent() { for (x = 0; x < 16; x++) { char c = Wire.read(); ký tự //Nhận 102 data = data + c; data1 = data.substring(0, 6); data2 = data.substring(7, 13); } } //Tách chuỗi liệu void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.println("INFO: Attempting MQTT connection "); // Attempt to connect if (client.connect(MQTT_CLIENT_ID, MQTT_PASSWORD)) { Serial.println("INFO: connected"); } else { Serial.print("ERROR: failed, rc="); Serial.print(client.state()); Serial.println("DEBUG: try again in seconds"); // Wait seconds before retrying delay(5000); } } client.subscribe(switchTopic1); } void publishData1(String p_temperature) root["temperature1"] = p_temperature; root.prettyPrintTo(Serial); Serial.println(""); MQTT_USER, { char datatemp1[200]; root.printTo(datatemp1, root.measureLength() + 1); client.publish(MQTT_nhietdo_TOPIC, datatemp1, true); yield(); } void publishData2(String p_pH) { root["pH1"] = p_pH; root.prettyPrintTo(Serial); Serial.println(""); 103 char datatemp2[200]; root.printTo(datatemp2, root.measureLength() + 1); client.publish(MQTT_pH_TOPIC, datatemp2, true); yield(); } // function called when a MQTT message arrived void callback(char* p_topic, byte * p_payload, unsigned int p_length) { String topicStr = p_topic; Serial.println("Callback update."); Serial.print("Topic: "); Serial.println(topicStr); if (topicStr == "/hass1/switch1/") { p_payload[p_length] = '\0'; String message = (char*)p_payload; if (message == "1") { //Bat dau gui lenh tu MQTT Broker sang Arduino Wire.beginTransmission(8); Wire.write(11); Wire.endTransmission(); digitalWrite(switchPin1, HIGH); client.publish("/hass1/switchConfirm1/", "1"); Serial.println("Bat role"); } //turn the switch off if the payload is '0' and publish to the MQTT server a confirmation message else if (message == "0") { //Bat dau gui lenh tu MQTT Broker sang Arduino Wire.beginTransmission(8); /* begin with device address */ Wire.write(10); /*send string on request */ Wire.endTransmission(); /* stop transmitting */ digitalWrite(switchPin1, LOW); client.publish("/hass1/switchConfirm1/", "0"); Serial.println("Tat role"); } } } 104 ... cứu đề tài: ? ?Hệ thống giám sát online đảm bảo thông số nước nuôi trồng thủy sản? ?? Mục đích luận văn tập trung nghiên cứu, tìm hiểu phương pháp giải phép đo đạt thông số môi trường nước, giao thức... người nuôi trồng thủy sản Vấn đề ô nhiễm nguồn nước nuôi trồng thủy sản nguyên nhân chủ chốt nước thải sinh hoạt, nước thải cơng nghiệp nước thải nơng nghiệp Và từ hoạt động nuôi trồng thủy sản. .. việc đảm bảo chất lượng môi trường nuôi trồng phát triển mạnh mẽ lợi ngành nuôi trồng thủy sản nước ta, đóng góp vào kinh tế đất nước 1.3 Tính cấp thiết hệ thống quan trắc IoT nuôi trồng thủy sản

Ngày đăng: 07/12/2021, 23:25

Mục lục

  • LỜI MỞ ĐẦU

  • MỤC LỤC

  • CHƯƠNG 1.

  • CHƯƠNG 2.

  • CHƯƠNG 3.

  • CHƯƠNG 4

  • KẾT LUẬN

  • TÀI LIỆU THAM KHẢO

  • PHỤ LỤC CODE

Tài liệu cùng người dùng

Tài liệu liên quan