1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu giao thức MQTT ứng dụng cho giải pháp tưới nước thông minh

110 4 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 110
Dung lượng 4,25 MB

Nội dung

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN - Nguyễn Hữu Bắc NGHIÊN CỨU GIAO THỨC MQTT ỨNG DỤNG CHO GIẢI PHÁP TƯỚI NƯỚC THÔNG MINH LUẬN VĂN THẠC SĨ KHOA HỌC Hà Nội – 2021 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN - Nguyễn Hữu Bắc NGHIÊN CỨU GIAO THỨC MQTT ỨNG DỤNG CHO GIẢI PHÁP TƯỚI NƯỚC THƠNG MINH Chun ngành: Vật lý vơ tún điện tử Mã số: 8440130.03 LUẬN VĂN THẠC SĨ KHOA HỌC NGƯỜI HƯỚNG DẪN KHOA HỌC TS LÊ QUANG THẢO Hà Nội – 2021 LỜI CAM ĐOAN Tôi xin cam đoan nội dung luận văn: “Nghiên cứu giao thức MQTT ứng dụng cho giải pháp tưới nước thông minh” Là thực hiện hướng dẫn TS Lê Quang Thảo Các số liệu, kết nêu luận văn trung thực chưa cơng bố cơng trình khác Tác giả Nguyễn Hữu Bắc LỜI CẢM ƠN Để hoàn thiện luận văn, tơi xin bày tỏ lịng biết ơn sâu sắc đến thầy hướng dẫn tôi, TS Lê Quang Thảo Trong suốt trình thực hiện luận văn, thầy tận tình hướng dẫn, giúp đỡ để tơi hồn thành luận văn Tiếp đến, tơi xin chân thành cảm ơn thầy cô giáo Bộ môn Vật lý Vô tuyến, Khoa Vật lý, Trường Đại học Khoa học Tự nhiên - Đại học Quốc gia Hà Nội truyền đạt cho kiến thức kinh nghiệm quý báu trình học tập nghiên cứu Tơi bày tỏ lịng biết ơn đến gia đình tơi Bố mẹ, anh chị em bạn bè, bạn khóa cao học 2018-2020, người ủng hộ, giúp đỡ động viên thời gian làm luận văn Hà Nội, tháng 11 năm 2020 Nguyễn Hữu Bắc MỤC LỤC MỞ ĐẦU .1 CHƯƠNG TỔNG QUAN VỀ MẠNG CẢM BIẾN KHÔNG DÂY .3 1.1 Khái niệm 1.2 Các thành phần node cảm biến 1.3 Kiến trúc giao thức mạng WSN .5 1.3.1 Lớp ứng dụng 1.3.2 Lớp liên kết liệu 1.3.3 Lớp truyền tải 1.3.4 Lớp mạng 1.3.5 Lớp vật lý 1.3.6 Phần quản lý công suất, quản lý di động, quản lý nhiệm vụ 1.4 Các đặc điểm mạng cảm biến khơng dây 1.4.1 Kích thước vật lý, lượng tiêu thụ .9 1.4.2 Khả chịu lỗi, khả thích nghi 10 1.4.3 Hoạt động đồng thời với độ tập trung cao, tin cậy 10 1.4.4 Đa dạng thiết kế, chi phí sản xuất thấp 11 1.5 IoT giao thức thường sử dụng IoT 11 1.5.1 Giao thức CoAP 12 1.5.2 Giao thức XMPP .13 1.5.3 Giao thức MQTT 13 1.6 Ứng dụng mạng cảm biến không dây 14 1.6.1 Mạng cảm biến không dây y tế giám sát sức khoẻ 15 1.6.2 Mạng cảm biến không dây quân .15 1.6.3 Mạng cảm biến không dây ứng dụng tự động hố gia đình 16 1.6.4 Mạng cảm biến không dây ứng dụng công nghiệp 17 1.6.5 Mạng cảm biến không dây ứng dụng vào môi trường 17 1.6.6 Mạng cảm biến không dây ứng dụng nông nghiệp .19 CHƯƠNG GIAO THỨC MQTT 21 2.1 Khái niệm MQTT 21 2.2 Vị trí MQTT mơ hình IoT 22 2.3 Lịch sử hình thành 22 2.4 Các thành phần lõi kiến trúc MQTT 23 2.5 Mơ hình Pub/Sub chế hoạt động MQTT theo mơ hình Pub/Sub 23 2.5.1 Mơ hình Pub/Sub 23 2.5.2 Cơ chế hoạt động MQTT theo mơ hình Pub/Sub 25 2.6 Các gói tin quan trọng giao thức MQTT 27 2.6.1 Định dạng thông điệp .27 2.6.2 Gói CONNECT .30 2.6.3 Gói CONNACK 31 2.6.4 Gói PUBLISH 31 2.6.5 Gói SUBSCRIBE 32 2.6.6 Gói PINGREQ 33 2.6.7 Gói PINGRESP .33 2.6.8 Gói DISCONNECT 33 2.7 Quy trình truyền nhận liệu MQTT 33 2.7.1 Kết nối đăng ký 33 2.7.2 Xuất thông điệp 35 2.8 Ưu điểm, tính bật giao thức MQTT 37 2.9 Một số giao thức cạnh tranh với giao thức MQTT 38 2.10 Một số ứng dụng MQTT triển khai 38 CHƯƠNG MƠ HÌNH TƯỚI NƯỚC THƠNG MINH SỬ DỤNG CẢM BIẾN KHÔNG DÂY SỬ DỤNG GIAO THỨC MQTT 41 3.1 Bản thiết kế sơ đồ mạng cảm biến 41 3.2 Kiến trúc node cảm biến 42 3.3 Phần cứng node cảm biến .43 3.3.1 Cảm biến ánh sáng CdS 43 3.3.2 Độ ẩm đất cảm biến độ ẩm MEC10 44 3.3.2.1 Độ ẩm đất .44 3.3.2.2 Giới thiệu số cảm biến độ ẩm đất 47 3.3.2.3 Cảm biến độ ẩm đất MEC10 50 3.3.3 Chuẩn giao tiếp dây cảm biến nhiệt độ - độ ẩm DHT11 51 3.3.3.1 Chuẩn giao tiếp dây 51 3.3.3.2 Cảm biến nhiệt độ - độ ẩm DHT11 52 3.3.4 Bộ truyền sóng vơ tún nRF24L01 .55 3.3.5 Bộ xử lý trung tâm sử dụng Atmega8 .56 3.3.6 Sơ đồ mạch điện khối thu thập liệu 57 3.3.7 Thuật toán hoạt động node thu thập liệu .57 3.4 Kiến trúc node trung tâm 59 3.5 Phần cứng node trung tâm 59 3.5.1 Bộ xử lý trung tâm Atmega128 .59 3.5.2 Sơ đồ mạch điện khối xử lý trung tâm 60 3.5.3 Thuật toán hoạt động trạm trung tâm .61 3.6 Một số hình ảnh triển khai thực tế mạng cảm biến 62 CHƯƠNG KẾT QUẢ THỰC NGHIỆM VÀ THẢO LUẬN 64 4.1 Khảo sát thay đổi môi trường node center theo ngày 64 4.1.1 Dữ liệu ánh sáng theo ngày .65 4.1.2 Dữ liệu nhiệt độ theo ngày 67 4.1.3 Dữ liệu độ ẩm môi trường theo ngày 69 4.1.4 Dữ liệu độ ẩm đất theo ngày 71 4.2 Khảo sát thay đổi môi trường node theo ngày tuần 73 4.2.1 Dữ liệu ánh sáng theo ngày tuần 73 4.2.2 Dữ liệu nhiệt độ theo ngày tuần 74 4.2.3 Dữ liệu độ ẩm môi trường theo ngày tuần .75 4.2.4 Dữ liệu độ ẩm đất theo ngày tuần 76 KẾT LUẬN CHUNG 78 TÀI LIỆU THAM KHẢO 80 PHỤ LỤC 82 DANH MỤC CÁC KÍ HIỆU VÀ CHỮ VIẾT TẮT Từ viết tắt Cụm từ Nghĩa tiếng Việt IPv6 over 6LowPAN Low-Power Wireless Networks Personal Area Tín hiệu sử dụng ACK truyền thơng số để đảm bảo acknowledgement liệu nhận ADC Analog Digital Convert Bộ chuyển đổi tương tự - số AD HOC Wireless ad-hoc network Mạng tùy biến không dây AI Artificial Intelligence Trí tuệ nhân tạo ALU Arithmetic Logic Unit Đơn vị logic số học ARQ Automatic Repeat-reQuest Yêu cầu tự động lặp lại AVR Automatic Regulator Điều chỉnh điện áp tự động CISC Voltage Complex Instruction Set Computer CMOS Complementary MetalOxide-Semiconductor thuật ngữ loại công nghệ dùng để chế tạo mạch tích hợp CoAP Constrained Protocol Giao thức CoAP CRC Cyclic Redundancy Check CSMA/CA Carier Sense Applications Multiple Access/ Collision Avoidance DDS Data Distribution Service EEPROM Electrically Programmable Memory FEC Forward Error Correction Giao thức DDS Erasable Read-Only Chuyển tiếp trình sửa lỗi GENSEN Generic Sensor Architecture for Network Wireless Kiến trúc mạng cảm biến chung cho Tự động hóa Khơng dây Automation Packet Radio Dịch vụ vơ tún gói tổng hợp GPRS General Service ID Identification Địa mạng IEEE Institute of Electrical and Electronics Engineers Viện kỹ sư điện, điện tử quốc tế IoT Internet of Things Internet vạn vật IP Internet Protocol Giao thức Internet ISM Industrial, Medical LCD Liquid Crystal Display Màn hình tinh thể lỏng LDR Light-dependent resistor Điện trở quang LR-WPANs low-rate wireless personal area networks M2M Machine to machine Máy để truyền thông máy MAC Media Access Control Điều khiển truy cập đường truyền MCU Microcontroller unit MEMS Micro Electro Mechanical Systems Hệ vi điện tử MQTT Message Queue Telemetry Transport Giao thức MQTT NACK Negative acknowledgement OASIS Organization for the Tổ chức phát triển tiêu Advancement of Structured chuẩn thơng tin có cấu trúc Information Standards OSI Open Interconnection QoS Quanlity of Service Scientific and Systems Mơ hình tham chiếu hệ thống mở Định tuyến theo chất lượng dịch vụ RF RISC Bộ thu phát sóng vơ tún Radio frequency Reduced Instruction Set Computer RTOS Real-time Operating System Sensor sensor SMP SPI SQDDP Cảm biến Sensor Management Protocol giao thức quản lí mạng cảm biến Serial Peripheral Interface Sensor Query and Data giao thức phân phối liệu truy vấn cảm biến Dissemination Static memory SurfNet Su TADAP Task Assignment and Data Advertisement giao thức quảng bá liệu định nhiệm vụ cho sensor Transmission giao thức điều khiển truyền TCP random-access Bộ nhớ truy cập ngẫu nhiên tĩnh SRAM Control Protocol tải internet Thường làmột mạch tích hợp UART Universal Asynchronous Receiver – Transmitter UDP User Datagram Protocol UWASA Utilization of XMPP Extensible Messaging and Presence Protocol sử dụng việc truyền dẫn liệu nối tiếp máy tính thiết bị ngoại vi giao thức gói người dùng Giao thức XMPP Wireless sensor networking technology based WirelessHART on the Highway Addressable Remote Transducer Protocol WSN Wireless Sensor Network Mạng cảm biến không dây PHỤ LỤC 1-Thư viện MQTT static inline uint16_t htons(uint16_t x) { #if BYTE_ORDER == ORDER_LITTLE_ENDIAN return ((x & 0xff) > 8); #else return x; #endif } #define umqtt_insert_messageid(conn, ptr) \ { \ ptr[0] = conn->message_id >> 8; ptr[1] = conn->message_id & 0xff; conn->message_id++; \ \ \ } while (0) #define umqtt_build_header(type, dup, qos, retain) \ (((type) 0) digit |= 0x80; data[i] = digit; i++; } while (len); return i; /* Return the amount of bytes used */ } 83 void umqtt_circ_init(struct umqtt_circ_buffer *buff) { buff->pointer = buff->start; buff->datalen = 0; } int umqtt_circ_push(struct uint8_t *data, int len) umqtt_circ_buffer *buff, { uint8_t *bend = buff->start + buff->length - 1; uint8_t *dend buff->datalen) = (buff->pointer - buff->start + % buff->length + buff->start; /* This points to new byte */ for (; len > 0; len ) { if (dend > bend) dend = buff->start; if (buff->datalen != && dend == >pointer) break; *dend = *data; dend++; data++; buff->datalen++; } return len; /* Return amount of bytes left */ } 84 buff- int umqtt_circ_peek(struct uint8_t *data, int len) umqtt_circ_buffer *buff, { uint8_t *ptr = buff->pointer; uint8_t *bend = buff->start + buff->length - 1; int i; for (i = 0; i < len && i < buff->datalen; i++) { data[i] = ptr[i]; if (ptr > bend) ptr = buff->start; } return i; /* Return the amount of bytes actually peeked */ } int umqtt_circ_pop(struct uint8_t *data, int len) umqtt_circ_buffer *buff, { uint8_t *bend = buff->start + buff->length - 1; int i; for (i = 0; i < len && buff->datalen > 0; i++) { data[i] = *buff->pointer; buff->pointer++; buff->datalen ; 85 if (buff->pointer > bend) buff->pointer = buff->start; } return i; /* Return the amount of bytes actually popped */ } void umqtt_connect(struct umqtt_connection *conn) { int cidlen = strlen(conn->clientid); uint8_t fixed; uint8_t remlen[4]; uint8_t variable[12]; uint16_t paylen; umqtt_circ_init(&conn->rxbuff); umqtt_circ_init(&conn->txbuff); conn->state = UMQTT_STATE_INIT; conn->nack_ping = 0; conn->nack_publish = 0; conn->nack_subscribe = 0; conn->message_id = 1; fixed = umqtt_build_header(UMQTT_CONNECT, 0, 0, 0); variable[0] = 0; /* UTF Protocol name */ variable[1] = 6; 86 variable[2] = 'M'; variable[3] = 'Q'; variable[4] = 'I'; variable[5] = 's'; variable[6] = 'd'; variable[7] = 'p'; variable[8] = 3; /* Protocol version */ variable[9] = 0b00000010; /* Clean session flag */ variable[10] = conn->kalive >> 8; /* Keep Alive timer */ variable[11] = conn->kalive & 0xff; paylen = htons(cidlen); umqtt_circ_push(&conn->txbuff, &fixed, 1); umqtt_circ_push(&conn->txbuff, remlen, umqtt_encode_length(sizeof(variable) sizeof(paylen) + cidlen, remlen)); umqtt_circ_push(&conn->txbuff, sizeof(variable)); + variable, umqtt_circ_push(&conn->txbuff, (uint8_t *) &paylen, sizeof(paylen)); umqtt_circ_push(&conn->txbuff, cidlen); conn->clientid, conn->state = UMQTT_STATE_CONNECTING; 87 if (conn->new_packet_callback) conn->new_packet_callback(conn); } void umqtt_subscribe(struct umqtt_connection *conn, char *chủ đề) { uint16_t chủ đềlen = strlen(chủ đề); uint8_t fixed; uint8_t remlen[4]; uint8_t messageid[2]; uint16_t paylen; uint8_t qos = 0; fixed = umqtt_build_header(UMQTT_SUBSCRIBE, 0, 1, 0); umqtt_insert_messageid(conn, messageid); paylen = htons(chủ đềlen); umqtt_circ_push(&conn->txbuff, &fixed, 1); umqtt_circ_push(&conn->txbuff, remlen, umqtt_encode_length( sizeof(messageid) + sizeof(paylen) + chủ đềlen + sizeof(qos), remlen)); umqtt_circ_push(&conn->txbuff, sizeof(messageid)); 88 messageid, umqtt_circ_push(&conn->txbuff, (uint8_t *) &paylen, sizeof(paylen)); umqtt_circ_push(&conn->txbuff, chủ đề, chủ đềlen); umqtt_circ_push(&conn->txbuff, &qos, sizeof(qos)); conn->nack_subscribe++; if (conn->new_packet_callback) conn->new_packet_callback(conn); } void umqtt_publish(struct umqtt_connection *conn, char *chủ đề, uint8_t *data, int datalen) { int toplen = strlen(chủ đề); uint8_t fixed; uint8_t remlen[4]; uint8_t len[2]; fixed = umqtt_build_header(UMQTT_PUBLISH, 0, 0, 0); umqtt_circ_push(&conn->txbuff, &fixed, 1); umqtt_circ_push(&conn->txbuff, remlen, umqtt_encode_length(2 + toplen + datalen, remlen)); len[0] = toplen >> 8; len[1] = toplen & 0xff; 89 umqtt_circ_push(&conn->txbuff, len, sizeof(len)); umqtt_circ_push(&conn->txbuff, (uint8_t *) chủ đề, toplen); umqtt_circ_push(&conn->txbuff, data, datalen); if (conn->new_packet_callback) conn->new_packet_callback(conn); } void umqtt_ping(struct umqtt_connection *conn) { uint8_t packet[] = umqtt_build_header(UMQTT_PINGREQ, 0, 0, 0), }; umqtt_circ_push(&conn->txbuff, sizeof(packet)); { packet, conn->nack_ping++; if (conn->new_packet_callback) conn->new_packet_callback(conn); } static void umqtt_handle_publish(struct umqtt_connection *conn, uint8_t *data, int len) { uint16_t toplen = (data[0] message_callback(conn, sizeof(payload)); } static void umqtt_packet_arrived(struct umqtt_connection *conn, uint8_t header, int len) { uint8_t data[len]; umqtt_circ_pop(&conn->rxbuff, data, len); switch (umqtt_header_type(header)) { case UMQTT_CONNACK: if (data[1] == 0x00) { conn->state = UMQTT_STATE_CONNECTED; if (conn->connected_callback) conn->connected_callback(conn); } else { conn->state = UMQTT_STATE_FAILED; } 91 break; case UMQTT_SUBACK: conn->nack_subscribe ; break; case UMQTT_PINGRESP: conn->nack_ping ; break; case UMQTT_PUBLISH: umqtt_handle_publish(conn, data, len); break; } } void umqtt_process(struct umqtt_connection *conn) { uint8_t buf[5]; unsigned int i = 2; while (conn->rxbuff.datalen >= 2) { /* We have the fixed header */ umqtt_circ_pop(&conn->rxbuff, buf, 2); for (i sizeof(buf); i++) = 2; buf[i - 1] & 0x80 umqtt_circ_pop(&conn->rxbuff, 1); umqtt_packet_arrived(conn, buf[0], 92 && i < &buf[i], umqtt_decode_length(&buf[1])); } } 2-Mã nguồn chương trình thu thập số liệu node cảm biến #include #include #include #include "mqtt.c" #include "dht.c" #define CE PORTC.3 #define CSN PORTD.4 #define SCK PORTD.2 #define MOSI PORTB.6 #define MISO PIND.1 #define IRQ PIND.7 unsigned char buff[20]; unsigned char dht_nhiet_do,dht_do_am; int light.sm; void main(void) { Init_system(); Common_Config(); umqtt_connect(conn); delay_ms(1000); while (1) { if(DHT_GetTemHumi(&dht_nhiet_do,&dht_do_am)) { sprintf(buff, "%u", (unsigned int)dht_do_am); sprintf(buff, "%u", (unsigned int)dht_nhiet_do); 93 } light=(int)read_adc(6)/4; sm= (int)read_adc(7)*2048/5; umqtt_publish(conn,"tram1/thongso/nhietdo",dht_nhiet_do,1); umqtt_publish(conn,"tram1/thongso/doam",dht_do_am,1); umqtt_publish(conn,"tram1/thongso/light",light,1); umqtt_publish(conn,"tram1/thongso/sm",sm,1); delay_ms(200); } } Mã nguồn chương trình Node trung tâm #include #include #include #include #include #include #include #include #define ON 0; #define OFF 1; typedef struct { int temp; int humi; int light; int sm; 94 } station_info; station_info station_receive; char buf[20],order[6] int max_sm_limit = 80, min_sm_limit=60, node; void main(void) { init_system(); Address1 = 0xA1; Address2 = 0xA2; Address3 = 0xA3; Address4 = 0xA4; mqtt_init(); umqtt_connect(conn); Common_Config(); umqtt_subscribe(conn,"/1/thongso"); umqtt_subscribe(conn,"/2/thongso"); umqtt_subscribe(conn,"/3/thongso"); while (1) { nethandler_umqtt_appcall() while( umqtt_packet_arrived() = true) { station_receive=umqtt_process(); uint16_t toplen = (data[0] message_callback(conn, sizeof(station_receive)); chủ đề, int temp = station_receive.temp; int humi = station_receive.humi; int light = station_receive.light; int sm = station_receive.sm; umqtt_circ_push(&conn->txbuff, &fixed, 1); for(i=0;inew_packet_callback; umqtt_insert_messageid(conn, station_receive); } } order=chủ đề.Split('/'); node= int(order[1]); if(smmax_sm_limit) { relay[node] = OFF; } } } 96 station_receive, ... TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN - Nguyễn Hữu Bắc NGHIÊN CỨU GIAO THỨC MQTT ỨNG DỤNG CHO GIẢI PHÁP TƯỚI NƯỚC THÔNG MINH Chuyên ngành: Vật lý vô tuyến điện tử Mã số: 8440130.03... Hà Nội – 2021 LỜI CAM ĐOAN Tôi xin cam đoan nội dung luận văn: ? ?Nghiên cứu giao thức MQTT ứng dụng cho giải pháp tưới nước thông minh? ?? Là thực hiện hướng dẫn TS Lê Quang Thảo Các số liệu, kết... thức, luận văn tác giả xây dựng, đề xuất giải pháp để ứng dụng mạng cảm biến không dây sử dụng giao thức MQTT ứng dụng vào nông nghiệp, giải pháp tác giả cho có nhiều điểm thuận lợi phù hợp với

Ngày đăng: 31/03/2021, 20:50

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w