(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM

92 9 0
(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM

Đ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

(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM(Đồ án tốt nghiệp) Thiết kế và thi công hệ thống tưới cây thông minh trong khuôn viên trường ĐH SPKT TPHCM

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 TƯỚI CÂY THÔNG MINH TRONG KHUÔN VIÊN TRƯỜNG ĐH SPKT TPHCM SVTH : HOÀNG TRUNG KIÊN TRỊNH XUÂN HẬU MSSV : 15141031 MSSV : 16141027 Ngành : CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRÙN THƠNG GVHD: Ths Ngũn Ngơ Lâm Tp Hồ Chí Minh, tháng 01 năm 2021 LỜI CẢM ƠN Đồ án THIẾT KẾ HỆ THỐNG TƯỚI CÂY THÔNG MINH TRONG KHUÔN VIÊN TRƯỜNG ĐH SPKT TPHCM được thực theo yêu cầu Nhà trường không là cố gắng cá nhân chúng em mà là sự giúp đỡ, động viên, bảo thầy cơ, bạn bè và người thân gia đình, chúng em xin gửi lời cảm ơn chân thành đến tất người Đặc biệt, nhóm em xin phép cảm ơn Thầy Nguyễn Ngô Lâm là người trực tiếp hướng dẫn đề tài dạy, bảo ban tận tình và tạo điều kiện thuận lợi cho nhóm suốt thời gian thực đồ án tốt nghiệp Sự tâm huyết, kiến thức và kinh nghiệm thầy khơng giúp cho nhóm em hoàn thành tốt đề tài mà là gương để nhóm học tập và noi theo đường sau Bên cạnh đó, nhóm cũng xin cảm ơn thầy cô khoa Đào tạo chất lượng cao, mơn Điện tử cơng nghiệp, anh/chị khóa trước cũng bạn sinh viên khóa nhiệt tình đóng góp ý kiến và chia sẽ kinh nghiệm để giúp nhóm hoàn thành đề tài này Cuối cùng, dù cố gắng hoàn thành nhiệm vụ đề tài đặt và đảm bảo thời hạn kiến thức cịn hạn hẹp, khả kinh tế khơng nhiều, chắn sẽ khơng tránh khỏi thiếu sót, sai lầm, mong Thầy/Cô và bạn sinh viên thơng cảm bỏ qua và đóng góp ý kiến để nhóm tiếp thu và sửa chữa Nhóm em xin chân thành cảm ơn! i LỜI NÓI ĐẦU Sự thay đổi mạnh mẽ khoa học kỹ thuật có ảnh hưởng sâu sắc đến người từ công việc đời sống ngày, và cũng khơng ngừng tìm hiểu, nghiên cứu, chế tạo, phát triển công nghệ nhằm thay tối đa sức người hoạt động chân tay và trí óc Ngành công nghệ kỹ thuật điện tử truyền thông đời đóng vai trị quan trọng việc hình thành, xây dựng và phát triển ứng dụng công nghệ vào thực tiễn đời sống, giúp cho thiết bị trở nên thông minh và thân thiện với người Trên sở kiến thức học từ chuyên ngành kết hợp với sự tư vấn từ giáo viên hướng dẫn ThS NGUYỄN NGƠ LÂM, nhóm thực đề tài: HỆ THỐNG TƯỚI CÂY THÔNG MINH TRONG KHUÔN VIÊN TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TPHCM Đề tài là sự kết hợp công nghệ truyền thông không dây LoRa, WiFi, truyền thông nối tiếp UART, sử dụng board vi điều khiển Bluepill-Arm STM32F103C8T6, NodeMCU-ESP8266 truyền-nhận tín hiệu từ cảm biến, hiển thị lên màn hình TFT HMI app Blynk, qua điều khiển hoạt động động máy bơm nước khuôn viên nhà trường ii MỤC LỤC Trang phụ bìa TRANG NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP II PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN III PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN IV LỜI CẢM ƠN i LỜI NÓI ĐẦU ii MỤC LỤC iii DANH MỤC CÁC TỪ VIẾT TẮT vi DANH MỤC CÁC BIỂU ĐỒ VÀ HÌNH ẢNH vii CHƯƠNG 1: TỔNG QUAN .1 1.1 GIỚI THIỆU TÌNH HÌNH NGHIÊN CỨU HIỆN NAY 1.1.1 Đặt vấn đề 1.1.2 Tính cấp thiết đề tài .1 1.2 MỤC TIÊU NGHIÊN CỨU 1.3 ĐỐI TƯỢNG NGHIÊN CỨU 1.4 PHẠM VI NGHIÊN CỨU .2 1.5 NHIỆM VỤ ĐỀ TÀI Đề tài được thực gồm có nội dung sau: .2 • Nội dung 1: Tham khảo tài liệu, đọc tóm tắt tài liệu đưa hướng đề tài • Nội dung 2: Thiết kế sơ đồ khối, sơ đồ nguyên lí • Nội dung 3: Kết nối vi điều khiển trung tâm Arm STM32F103C8T6 với nguồn, module ESP8266, module LoRa, cảm biến .2 • Nội dung 4: Viết chương trình điều khiển cho vi điều khiển • Nội dung 5: Chạy thử, kiểm tra, đánh giá, hiệu chỉnh • Nội dung 6: Thiết kế giao diện lưu trữ thơng tin và điều khiển • Nội dung 7: Viết báo cáo thực .2 • Nội dung 8: Bảo vệ luận văn 1.6 BỐ CỤC ĐỒ ÁN .2 Chương 2: CƠ SỞ LÝ THUYẾT .4 iii 2.1 GIỚI THIỆU MỘT SỐ CHUẨN TRUYỀN THÔNG PHỔ BIẾN .4 2.1.1 TRÙN THƠNG CĨ DÂY 2.1.1.1 Chuẩn giao tiếp SPI 2.1.1.2 Chuẩn giao tiếp I2C 2.1.1.3 Chuẩn giao tiếp UART 2.1.2 TRUYỀN THÔNG KHÔNG DÂY 2.1.2.1 Bluetooth 2.1.2.2 Zigbee .8 2.1.2.3 NFC 2.1.2.4 WiFi 2.1.2.5 LORA .9 2.2 GIỚI THIỆU MODULE RF UART LORA SX1278 433MHZ (E32-TTL100) 10 2.3 GIỚITHIỆU KIT NODEMCU 16 2.4 TRUYỀN THÔNG UART 21 2.4.1 Tìm hiểu UART: 22 2.4.2 Ưu, nhược điểm UART: 23 2.5 GIỚI THIỆU PHẦN CỨNG HỆ THỐNG 24 2.5.1 Kit BluePill STM32F103C8T6 24 2.5.2 Màn hình cảm ứng UART HMI TFT 7.0 inch 26 2.5.3 Các thiết điện tử khác .27 2.5.3.1 Module Relay 27 2.5.3.2 Các loại cảm biến 28  Cảm biến độ ẩm đất 28  Cảm biến mưa .29  Cảm biến rung .30  Cảm biến ánh sáng 31 2.5.4 Ứng dụng Blynk .32 Chương 3: THIẾT KẾ HỆ THỐNG 34 3.1 YÊU CẦU VÀ SƠ ĐỒ KHỐI HỆ THỐNG 34 3.1.1 Yêu cầu hệ thống: 34 3.1.2 Sơ đồ khối chức khối 35 3.2 THIẾT KẾ HỆ THỐNG PHẦN CỨNG 37 iv 3.2.1 Khối cảm biến 37  Cảm biến độ ẩm đất (Soil moiture sensor) .37  Cảm biến mưa (Rain sensor) 37 3.2.2 Khối giao tiếp thiết bi .38 3.2.3 Khối WiFi kết nối Internet .39 3.2.4 Khối điều khiển hiển thị 39 3.2.5 Khối LoRa 433 MHz 40 3.2.5 Khối xử lý trung tâm 41 3.2.6 Khối nguồn .43 3.3 THIẾT KẾ PHẦN MỀM .44 3.3.1 Yêu cầu phần mềm: 44 3.3.2 Lưu đồ giải thuật hệ thống 44 3.3.2.1 Lưu đồ giải thuật trạm Master .45 3.3.2.2 Lưu đồ giải thuật trạm Slave 47 3.3.2.3 Lưu đồ giải thuật nút nhấn tổ máy .48 3.3.2.4 Lưu đồ giải thuật nút nhấn bật tắt tổ máy 48 3.3.2.5 Lưu đồ giải thuật nút nhấn thoát 50 3.3.2.6 Lưu đồ giải thuật nút nhấn app Blynk 51 3.3.2.7 Lưu đồ giải thuật nhận gói tin LoRa 52 3.3.2.8 Lưu đồ giải thuật gửi gói tin LoRa 53 Chương 4: THI CÔNG HỆ THỐNG .55 4.1 Thi công phần cứng 55 4.2 Lập trình phần mềm .57 4.2.1 Giới thiệu phần mềm lập trình 57 Chương 5: KẾT QUẢ THỰC HIỆN .61 Chương 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .63 6.1 Kết luận 63 6.2 Hướng phát triển 63 TÀI LIỆU THAM KHẢO 64 Phụ lục .65 PCB 65 Code lập trình 65 2.1 Lập trình Arm STM32 65 v IC IoT LoRa SPI I2C OS NFC CSS PHP I/O MCU UART LCD HTML HTTP ADC ĐATN DANH MỤC CÁC TỪ VIẾT TẮT Integrated Circuit Mạch tích hợp Internet of Things Mạng lưới thơng minh kết nối máy tính và mạng Long Range Radio Truyền thơng tầm xa Serial Peripheral Interface Giao diện ngoại vi nối tiếp Inter-Integrated Circuit Vi mạch tích hợp truyền thơng nối tiếp Operating System Hệ điều hành Near-Field Communications Công nghệ giao tiếp tầm ngắn Cascading Style Sheets Một dạng file text với phần tên mở rộng là css Hypertext Preprocessor Ngơn ngữ lập trình kịch Input/Output Ngõ vào/ngõ Microprocessor Control Unit Khối vi điều khiển Universal Asynchronous Receiver Truyền liệu nối tiếp bất – Transmitter đồng Liquid Crystal Display Màn hình tinh thể lỏng Hyper Text Markup Language Ngôn ngữ đánh dấu siêu văn Hyper Text Transfer Protocol Giao thức truyền siêu văn Analog Digital Converter Chuyển đổi tín hiệu tương tự sang tín hiệu số Đồ án tốt nghiệp HMI Humman Machine Interface TFT Thin Film Transistor Wireless Fidelity WiFi Màn hình giao tiếp người dùng và thiết bị Màn hình bóng bán dẫn Mạng vô tuyến không dây vi DANH MỤC CÁC BIỂU ĐỒ VÀ HÌNH ẢNH Hình 2- Giao tiếp SPI .4 Hình 2- Sơ đồ kết nối I2C Hình 2- Kết nối UART .5 Hình 2- Khung truyền UART Hình 2- Nghe nhạc qua tai nghe Bluetooth Hình 2- Truyền khơng dây qua Zigbee Hình 2- Truyền NFC thiết bị di động Hình 2- Các thiết bị kết nối qua Wifi .9 Hình 2- Mơ hình mạng LoRa Hình 2- 10 Biểu tượng LoRa Error! Bookmark not defined Hình 2- 11 Module Lora SX1278 433MHz 10 Hình 2- 12 Mô tả hoạt động chân AUX việc truyền liệu .12 Hình 2- 13 Mơ tả hoạt động chân AUX cấu hình 13 Hình 2- 14 Chế độ truyền điểm- điểm 13 Hình 2- 15 Chế độ truyền cố định 14 Hình 2- 16 Chọn chế độ Target để truyền 14 Hình 2- 17 Cấu hình module LoRa chế độ Target 15 Hình 2- 18 Mơ tả hình thức truyền Boardcast 15 Hình 2- 19 ESP-01 17 Hình 2- 20 Sơ đồ chân ESP-01 18 Hình 2- 21 Hình ảnh Module ESP-07 .18 Hình 2- 22 Sơ đồ chân ESP-07 19 Hình 2- 23 Hình ảnh ESP-12E 19 Hình 2- 24 Sơ đồ chân ESP-12E 20 Hình 2- 25 Kit NodeMCU V3 20 Hình 2- 26 Sơ đồ chân Kit NodeMCU V3 21 Hình 2- 27 Kết nối UART 22 Hình 2- 28 Khung truyền UART 22 Hình 2- 29 Kit BluePill ARM STM32F103C8T6 24 Hình 2- 30 Sơ đồ chân kit BluePill 24 Hình 2- 31 Màn hình cảm ứng LCD TFT 7.0 UART HMI 26 Hình 2- 32 Module Relay kênh 5V 27 Hình 2- 33 Module Relay kênh 5V 28 Hình 2- 34 Cảm biến độa ẩm đất 29 Hình 2- 35 Cảm biến mưa 30 Hình 2- 36 Module cảm biến rung SW-420 31 Hình 2- 37 Cảm biến ánh sáng 32 Hình 2- 38 Ứng dụng Blynk 33 vii Hình 3- Sơ đồ khối hệ thống 35 Hình 3- Sơ đồ nối chân cảm biến 37 Hình 3- Sơ đồ nối chân khối thiết bị .38 Hình 3- Sơ đồ nối chân khối WiFi 39 Hình 3- Sơ đồ nối chân điều khiển hiển thị 40 Hình 3- Sơ đồ nối chân khối LoRa 433MHz 40 Hình 3- Sơ đồ nối dây khối xử lý trung tâm Master 41 Hình 3- Sơ đồ nối dây truyền thông UART 42 Hình 3- Sơ đồ nối dây khối xử lý trung tâm Slave 42 Hình 3- 10 Sơ đồ nguyên lý khối nguồn 43 Hình 3- 11 Adapter 12V-2A 5V-1A 44 Hình 3- 12 Lưu đồ giải thuật trạm Master 45 Hình 3- 13 Lưu đồ giải thuật trạm Slave 47 Hình 3- 14 Lưu đồ giải thuật nút nhấn chọn tổ máy 48 Hình 3- 15 Lưu đồ giải thuật nút nhấn bật-tắt 49 Hình 3- 16 Lưu đồ giải thuật nút nhấn 50 Hình 3- 17 Lưu đồ giải thuật nhận gói tin LoRa 52 Hình 3- 18 Lưu đồ giải thuật gửi gói tin qua LoRa Error! Bookmark not defined Hình 4- Sơ đồ khối toàn hệ thống .55 Hình 4- Phần mềm Keil uVision 58 Hình 4- Mạch nạp STLink V2 mini 58 Hình 4- Phần mềm Arduino IDE 59 Hình 4- Ứng dụng Blynk .59 Hình 4- Phần mềm USART HMI editor 60 Hình 5- Khối xử lí trung tâm Master .61 Hình 5- Giao diện hình HMI 62 Hình 5- Giao diện hình HMI tổ máy Error! Bookmark not defined Hình 5- Màn hình HMI điều khiển Error! Bookmark not defined Hình 5- Điều khiển tổ máy hoạt động HMI Error! Bookmark not defined Hình 5- Giao diện app Blynk điện thoại Error! Bookmark not defined Hình 5- Khối giao tiếp thiết bị qua Relay Error! Bookmark not defined Hình 5- Máy bơm DC và cảm biến rung Error! Bookmark not defined Hình 5- Khối cảm biến mưa + độ ẩm Error! Bookmark not defined Hình 5- 10 Giao diện điều khiển app Blynk điện thoại Error! Bookmark not defined vii i CHƯƠNG 1: TỔNG QUAN 1.1 GIỚI THIỆU TÌNH HÌNH NGHIÊN CỨU HIỆN NAY 1.1.1 Đặt vấn đề Trong khứ, hầu hết thiết bị điện, điện tử được kết nối với dây dẫn: Điện thoại bàn, máy tính Desktop kết nối mạng qua dây cáp đồng, thiết bị điện (bóng đèn, máy bơm nước…) điều khiển khoảng cách xa phải sử dụng dây dài tương ứng dễ gây sụt áp, thất thoát nguồn điện chí dây đứt, gãy gây nguy hiểm đến tính mạng người Ngày nay, cơng nghệ kết nối không dây ngày càng được phát triển và sử dụng rộng rãi nhờ ưu điểm trội so với kết nối có dây truyền thống: sự gọn nhẹ, đơn giản, dễ dàng bảo trì, sửa chữa và được ưu tiên nâng cấp tốc độ và bảo mật Hai số được nhóm em sử dụng đề tài tốt nghiệp là công nghệ Wifi (Wireless Fidelity) LoRa (Long Range) Wifi được ưa chuộng nhờ khả hoạt động hiệu phạm vi vài chục đến vài trăm mét, được tích hợp nhiều thiết bị di động điện thoại thơng minh, máy tính xách tay hay thiết bị gia đình Tivi thông minh, máy giặt thông minh…LoRa là công nghệ Việt Nam có ưu điểm WiFi phạm vi hoạt động lên đến hàng Km với mức tiêu thụ điện thấp nhiên tốc độ truyền tải không cao Đề tài THIẾT KẾ HỆ THỐNG TƯỚI CÂY THÔNG MINH TRONG KHUÔN VIÊN TRƯỜNG ĐH SPKT TPHCM ứng dụng hai công nghệ truyền thông không dây tiên tiến WiFi và LoRa kết hợp công nghệ truyền thông nối tiếp UART để tạo nên hệ thống tưới tiện ích giúp dễ dàng quản lý và điều khiển máy bơm nước nhà trường khoảng cách xa 1.1.2 Tính cấp thiết đề tài Sự an toàn, tiện lợi là yếu tố tiên sự phát triển ngành kỹ thuật điện tử và công nghệ không dây sinh giải triệt để vấn đề Ngồi ra, sử dụng cơng nghệ khơng dây việc điều khiển thiết bị bơm nước khn viên trường đảm bảo mặt thẩm mỹ, hiệu và chi phí vận hành thấp, đặc biệt thích hợp mơi trường giáo dục đầy sáng tạo trường Đại Học Sư Phạm Kỹ Thuật TPHCM 1.2 MỤC TIÊU NGHIÊN CỨU  Áp dụng được công nghệ LoRa việc truyền- nhận liệu thiết bị, WiFi để kết nối hệ thống với internet, kết nối đến BlynkCloud nhằm điều DMA_ITConfig(UART2_TX_DMA_Channel, DMA_IT_TC, ENABLE); DMA_ITConfig(UART2_RX_DMA_Channel, DMA_IT_TC, ENABLE); /*************************/ USART_Cmd(USART2, ENABLE); /*************************************/ DMA_Cmd(UART2_RX_DMA_Channel, ENABLE); } /*******************************************/ void UART2_TX_DMA_SendData(uint16_t Counter) { DMA_SetCurrDataCounter(UART2_TX_DMA_Channel, Counter); DMA_Cmd(UART2_TX_DMA_Channel, ENABLE); } /*******************************************/ void UART3_TX_RX_DMA_Init(uint32_t BaudRate) { GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef USART_InitStruct; DMA_InitTypeDef DMA_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; /***********************************************************/ NVIC_InitStruct.NVIC_IRQChannel = UART3_TX_DMA_Channel_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); /***********************************************************/ NVIC_InitStruct.NVIC_IRQChannel = UART3_RX_DMA_Channel_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); /*************************************************/ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); /********************************/ 69 DMA_DeInit(UART3_TX_DMA_Channel); DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)(&(USART3->DR)); DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)UART3_TX_Buff; DMA_InitStruct.DMA_BufferSize = (uint32_t)UART3_TX_DMA_Buff_Size; DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralDST; DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStruct.DMA_Mode = DMA_Mode_Normal; DMA_InitStruct.DMA_Priority = DMA_Priority_VeryHigh; DMA_InitStruct.DMA_M2M = DMA_M2M_Disable; DMA_Init(UART3_TX_DMA_Channel, &DMA_InitStruct); DMA_Cmd(UART3_TX_DMA_Channel, DISABLE); /********************************/ DMA_DeInit(UART3_RX_DMA_Channel); DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)(&(USART3->DR)); DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)UART3_RX_Buff; DMA_InitStruct.DMA_BufferSize = (uint32_t)UART3_RX_DMA_Buff_Size; DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStruct.DMA_Mode = DMA_Mode_Circular; DMA_InitStruct.DMA_Priority = DMA_Priority_VeryHigh; DMA_InitStruct.DMA_M2M = DMA_M2M_Disable; DMA_Init(UART3_RX_DMA_Channel, &DMA_InitStruct); DMA_Cmd(UART3_RX_DMA_Channel, DISABLE); /********************/ USART_DeInit(USART3); USART_InitStruct.USART_BaudRate = BaudRate; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; 70 USART_InitStruct.USART_HardwareFlowControl= USART_HardwareFlowControl_None; USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USART3, &USART_InitStruct); USART_Cmd(USART3, DISABLE); /**************************************/ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStruct); /**************************************/ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStruct); /*********************************************/ USART_DMACmd(USART3, USART_DMAReq_Tx, ENABLE); USART_DMACmd(USART3, USART_DMAReq_Rx, ENABLE); /*****************************************************/ DMA_ITConfig(UART3_TX_DMA_Channel, DMA_IT_TC, ENABLE); DMA_ITConfig(UART3_RX_DMA_Channel, DMA_IT_TC, ENABLE); /*************************/ USART_Cmd(USART3, ENABLE); /*************************************/ DMA_Cmd(UART3_RX_DMA_Channel, ENABLE); } /*******************************************/ void UART3_TX_DMA_SendData(uint16_t Counter) { DMA_SetCurrDataCounter(UART3_TX_DMA_Channel, Counter); DMA_Cmd(UART3_TX_DMA_Channel, ENABLE); } uint8_t uart1_buff[7], uart1_cnt; /***************************************/ void UART1_TX_RX_Init(uint32_t BaudRate) { 71 GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef USART_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; /*********************************************/ NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 5; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); /****************************************************/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); /********************/ USART_DeInit(USART1); USART_InitStruct.USART_BaudRate = BaudRate; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_HardwareFlowControl= USART_HardwareFlowControl_None; USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USART1, &USART_InitStruct); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_Cmd(USART1, ENABLE); /*************************************/ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); /**************************************/ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStruct); } 72 /*************************************************/ void UART_SendChar(USART_TypeDef* USARTx, char ch) { while (!(USARTx->SR & USART_SR_TC)); USARTx->DR = ch; } /**************************************************/ void UART_SendStr(USART_TypeDef* USARTx, char* str) { while (*str) UART_SendChar(USARTx, *str++); } c) Chương trình xử lý tác vụ ngắt, DMA #include "stm32f10x_it.h" #include "uart.h" /**********************************/ void DMA1_Channel7_IRQHandler(void) { DMA1->IFCR = DMA1_IT_TC7; DMA_Cmd(UART2_TX_DMA_Channel, DISABLE); } /**********************************/ void DMA1_Channel6_IRQHandler(void) { DMA1->IFCR = DMA1_IT_TC6; Node_RX2(); } /**********************************/ void DMA1_Channel2_IRQHandler(void) { DMA1->IFCR = DMA1_IT_TC2; DMA_Cmd(UART3_TX_DMA_Channel, DISABLE); } /**********************************/ void DMA1_Channel3_IRQHandler(void) { DMA1->IFCR = DMA1_IT_TC3; Node_RX(); } void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE)) { 73 USART_ClearITPendingBit(USART1, USART_IT_RXNE); uart1_buff[uart1_cnt++] = USART_ReceiveData(USART1); if (uart1_buff[0] == 0x65) { button =uart1_buff[1]; state = uart1_buff[2]; page = uart1_buff[3]; if (uart1_cnt==7) uart1_cnt = 0; }}} d) Chương trình xử lý liệu truyền-nhận #include "process.h" #include "nextion.h" void Node_TX(uint8_t Number, uint8_t State) { UART3_TX_Buff[0] = 0x0F; UART3_TX_Buff[1] = page; UART3_TX_Buff[2] = button; UART3_TX_Buff[3] = state; UART3_TX_DMA_SendData(UART3_TX_DMA_Buff_Size); } void Node_TX2(uint8_t Number, uint8_t State) { UART2_TX_Buff[0] = 0xFF; UART2_TX_Buff[1] = button; UART2_TX_Buff[2] = state; UART2_TX_Buff[3] = page; UART2_TX_Buff[4] = 36; UART2_TX_Buff[5] = 36; UART2_TX_DMA_SendData(6); } void Node_RX(void) { if (UART3_RX_Buff[0] == 0x0F) { Node = UART3_RX_Buff[1]; Temp = UART3_RX_Buff[2]; Humid= UART3_RX_Buff[3]; LED_TOGGLE; Soil = UART3_RX_Buff[4]; } else {}} a = UART3_RX_Buff[5]; void Node_RX2(void) 74 { if (UART2_RX_Buff[0]==0x0F) { button= UART2_RX_Buff[1]; state =UART2_RX_Buff[2]; page =UART2_RX_Buff[3]; if (page==17) { Nextion_Page(1); if (UART2_RX_Buff[1]==00){ if (UART2_RX_Buff[2]==1) { Nextion_Add_Value("bt0",1); Nextion_Add_Valuetm("tm0",1); } if (UART2_RX_Buff[2]==0) { Nextion_Add_Value("bt0",0); Nextion_Add_Valuetm("tm0",0); } } if (UART2_RX_Buff[1]==4) { if (UART2_RX_Buff[2]==1) { Nextion_Add_Value("bt1",1); Nextion_Add_Valuetm("tm1",1); } if (UART2_RX_Buff[2]==0) { Nextion_Add_Value("bt1",0); Nextion_Add_Valuetm("tm1",0); } } if (UART2_RX_Buff[1]==2) { if (UART2_RX_Buff[2]==1) { Nextion_Add_Value("bt2",1); Nextion_Add_Valuetm("tm2",1); } if (UART2_RX_Buff[2]==0) {Nextion_Add_Value("bt2",0); Nextion_Add_Valuetm("tm2",0); }} if (UART2_RX_Buff[1]==3) { if (UART2_RX_Buff[2]==1) {Nextion_Add_Value("bt3",1); Nextion_Add_Valuetm("tm3",1); } if (UART2_RX_Buff[2]==0) { Nextion_Add_Value("bt3",0); Nextion_Add_Valuetm("tm3",0); }} if (page==18) { Nextion_Page(2); if (UART2_RX_Buff[1]==5) { if (UART2_RX_Buff[2]==1) { Nextion_Add_Value("bt10",1); Nextion_Add_Valuetm("tm10",1) ; } if (UART2_RX_Buff[2]==0) { Nextion_Add_Value("bt10",0); Nextion_Add_Valuetm("tm10",0) ; 75 }} if (UART2_RX_Buff[1]==6) { if (UART2_RX_Buff[2]==1) {Nextion_Add_Value("bt11",1); Nextion_Add_Valuetm("tm11",1) ;} if (UART2_RX_Buff[2]==0){ Nextion_Add_Value("bt11",0); Nextion_Add_Valuetm("tm11",0) ; }} if (UART2_RX_Buff[1]==7) { if (UART2_RX_Buff[2]==1) { Nextion_Add_Value("bt12",1); Nextion_Add_Valuetm("tm12",1) ;} if (UART2_RX_Buff[2]==0) { Nextion_Add_Value("bt12",0); Nextion_Add_Valuetm("tm12",0) ; }} if (UART2_RX_Buff[1]==8) { if (UART2_RX_Buff[2]==1) { Nextion_Add_Value("bt13",1); Nextion_Add_Valuetm("tm13",1) ; } if (UART2_RX_Buff[2]==0) { Nextion_Add_Value("bt13",0); Nextion_Add_Valuetm("tm13",0) ; }}}} else {} } e) Chương trình (main) #include "main.h" #include "process.h" uint8_t Node, Temp, Humid, Soil, a; uint8_t node, state; uint8_t button, page; uint8_t temp; /*********/ int main() { SystemInit(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); Delay_Init(); GPIO_LED_Init(); Nextion_Config(); 76 UART3_TX_RX_DMA_Init(115200); UART2_TX_RX_DMA_Init(9600); /********/ while (1) { Node_TX2(node, state); Node_TX(node, state); Delay_Ms(1000); if (page == 17) { Nextion_Add_Value("cbmua1", Soil); Nextion_Add_Value("doamdat1", Temp); } if (page == 18) { Nextion_Add_Value("cbmua2", Soil); Nextion_Add_Value("doamdat2", Temp); }}} 2.2 Lập trình NodeMCU -ESP8266 #define BLYNK_PRINT Serial #include #include #include #include //#define BLYNK_DEFAULT_PORT 8080 char auth[] = "NS2rHkFa21U4OHz3atfP1vhG_VthXLD2"; char ssid[] = "Tang 1"; char pass[] = "phucan12345"; SimpleTimer timer; void myTimerEvent() { Blynk.virtualWrite(V1, millis() / 1000); } 77 uint8_t cam_bien_nhiet_do, cam_bien_do_am_khong_khi,page,state,button,newValue, buffer[6],counter; BLYNK_CONNECTED() { Blynk.syncAll(); } BLYNK_WRITE(V6) { int pinValue6 = param.asInt(); // assigning incoming value from pin V1 to a variable if (pinValue6==1){ Serial.write(15);Serial.write(0); Serial.write(1);Serial.write(17);} if (pinValue6==0){ Serial.write(15);Serial.write(0); Serial.write(0);Serial.write(17);} } BLYNK_WRITE(V7) { int pinValue7 = param.asInt(); // assigning incoming value from pin V1 to a variable if (pinValue7==1){ Serial.write(15);Serial.write(4); Serial.write(1); Serial.write(17);} if (pinValue7==0){Serial.write(15);Serial.write(4); Serial.write(0);Serial.write(17); } } BLYNK_WRITE(V8) { int pinValue8 = param.asInt(); // assigning incoming value from pin V1 to a variable if (pinValue8==1){Serial.write(15);Serial.write(2); Serial.write(1);Serial.write(17);} if (pinValue8==0){Serial.write(15);Serial.write(2); Serial.write(0);Serial.write(17); } } BLYNK_WRITE(V9) { int pinValue9 = param.asInt(); // assigning incoming value from pin V1 to a variable if (pinValue9==1){Serial.write(15);Serial.write(3); Serial.write(1);Serial.write(17); } 78 if (pinValue9==0){Serial.write(15);Serial.write(3); Serial.write(0);Serial.write(17); } } BLYNK_WRITE(V10) { int pinValue10= param.asInt(); // assigning incoming value from pin V1 to a variable if (pinValue10==1){ Serial.write(15);Serial.write(5); Serial.write(1);Serial.write(18);} if (pinValue10==0){ Serial.write(15);Serial.write(5); Serial.write(0);Serial.write(18);} } BLYNK_WRITE(V11) { int pinValue11 = param.asInt(); // assigning incoming value from pin V1 to a variable if (pinValue11==1){ Serial.write(15);Serial.write(6); Serial.write(1);Serial.write(18);} if (pinValue11==0){ Serial.write(15);Serial.write(6); Serial.write(0);Serial.write(18);} } BLYNK_WRITE(V12) { int pinValue12 = param.asInt(); // assigning incoming value from pin V1 to a variable if (pinValue12==1){ Serial.write(15);Serial.write(7); Serial.write(1);Serial.write(18);} if (pinValue12==0){ Serial.write(15);Serial.write(7); Serial.write(0);Serial.write(18);} } BLYNK_WRITE(V13) { int pinValue13 = param.asInt(); // assigning incoming value from pin V1 to a variable 79 if (pinValue13==1){ Serial.write(1);Serial.write(18);} if (pinValue13==0){ Serial.write(0);Serial.write(18);} } void response() { if (button==0) { if (state==1) Blynk.virtualWrite(V6,1); if(state==0) Blynk.virtualWrite(V6,0); } if (button==4) { if (state==1) Blynk.virtualWrite(V7,1); if(state==0) Blynk.virtualWrite(V7,0); } if (button==2) { if (state==1) Blynk.virtualWrite(V8,1); if(state==0) Blynk.virtualWrite(V8,0); } if (button==3){ if (state==1) Blynk.virtualWrite(V9,1); if(state==0) Blynk.virtualWrite(V9,0); } if (button==5){ if (state==1) Blynk.virtualWrite(V10,1); if(state==0) Blynk.virtualWrite(V10,0); } if (button==6){ if (state==1) Blynk.virtualWrite(V11,1); if(state==0) Blynk.virtualWrite(V11,0); } if (button==7){ Serial.write(15);Serial.write(8); Serial.write(15);Serial.write(8); 80 if (state==1) Blynk.virtualWrite(V12,1); if(state==0) Blynk.virtualWrite(V12,0); } if (button==8){ if (state==1) Blynk.virtualWrite(V13,1); if(state==0) Blynk.virtualWrite(V13,0); } } void setup() { Serial.begin(9600); Serial.swap(); Blynk.begin(auth, ssid, pass); timer.setInterval(1000L, sensorvalue1); timer.setInterval(1000L, sensorvalue2); timer.setInterval(100L, response); myTimerEvent(); } void RX(void) { while (Serial.available() > 0) { buffer[counter ++] = (uint8_t)Serial.read(); if (buffer[0] ==0xFF ) { button= buffer[1]; state= buffer[2]; page= buffer[3]; cam_bien_nhiet_do = buffer[4]; cam_bien_do_am_khong_khi = buffer[5]; if (counter == 6) counter = 0; }}} void loop() { if (Serial.available() == ) { Blynk.run(); timer.run(); // Initiates BlynkTimer } 81 RX(); } void sensorvalue1() { Blynk.virtualWrite(V2,cam_bien_nhiet_do); } void sensorvalue2() { Blynk.virtualWrite(V3,cam_bien_do_am_khong_khi); } 82

Ngày đăng: 29/01/2023, 17:06

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

  • Đang cập nhật ...

Tài liệu liên quan