Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 119 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
119
Dung lượng
8,63 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM KHOA ĐÀO TẠO CHẤT LƯỢNG CAO ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT MÁY TÍNH THIẾT KẾ VÀ THI CƠNG BỘ ÐIỀU KHIỂN THIẾT BỊ ÐIỆN CHO GIA ÐÌNH GVHD: ThS NGUYỄN ÐÌNH PHÚ SVTH : NGUYỄN DUY HÙNG MSSV : 13119087 SVTH : VŨ CHUNG HIẾU MSSV : 13119194 SKL 0 Tp Hồ Chí Minh, tháng 06/2017 an BỘ GIÁO DỤC VÀ ĐÀO TẠO 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 BỘ ĐIỀU KHIỂN THIẾT BỊ ĐIỆN CHO GIA ĐÌNH GVHD: SVTH : MSSV : SVTH : MSSV : Khóa : Ngành : ThS NGUYỄN ĐÌNH PHÚ NGUYỄN DUY HÙNG 13119087 VŨ CHUNG HIẾU 13119194 2013 CƠNG NGHỆ KỸ THUẬT MÁY TÍNH Tp Hồ Chí Minh, tháng năm 2017 an BỘ GIÁO DỤC VÀ ĐÀO TẠO 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 BỘ ĐIỀU KHIỂN THIẾT BỊ ĐIỆN CHO GIA ĐÌNH GVHD: SVTH : MSSV : SVTH : MSSV : Khóa : Ngành : Th.S NGUYỄN ĐÌNH PHÚ NGUYỄN DUY HÙNG 13119087 VŨ CHUNG HIẾU 13119194 2013 CÔNG NGHỆ KỸ THUẬT MÁY TÍNH Tp Hồ Chí Minh, tháng năm 2017 an CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** Tp Hồ Chí Minh, ngày 21 tháng năm 2017 NHIỆM VỤ ĐỒ ÁN MÔN HỌC Họ tên sinh viên: Nguyễn Duy Hùng Vũ Chung Hiếu Ngành: Cơng Nghệ Kỹ Thuật Máy Tính Giảng viên hướng dẫn: Th.S Nguyễn Đình Phú Ngày nhâ ̣n đề tài: 22/2/2017 MSSV: 13119087 MSSV: 13119194 Lớp: 13119CL2 ĐT: 0903982443 Ngày nộp đề tài: 11/7/2017 Tên đề tài: Thiết Kế Và Thi Công Bộ Điều Khiển Thiết Bị Điện Cho Gia Đình Các số liệu, tài liệu ban đầu: Tài liệu Vi điều khiển ARM STM32 Cortex M4, Giáo trình Vi điều khiển PIC, Đồ án mơn học 2: Thiết Kế Và Thi Cơng Mơ Hình Nhà Thông Minh Nội dung thư ̣c hiê ̣n đề tài: Thiết kế xây dựng điều khiển thiết bị điện cho nhà Với điều khiển trung tâm phụ trách phân tích, tính tốn tín hiệu vào từ module khác module công suất (dùng để điều khiển thiết bị điện dân dụng gia đình), module cảm biến (dùng để cảnh báo rị rỉ khí gas, cảnh báo q nhiệt, báo cháy, ) module mở rộng cần giám sát an ninh qua hình ảnh, chống trộm, điều khiển từ xa qua internet Sản phẩm: Nhóm hồn thành sản phẩm mạch điều khiển trung tâm, mạch điều khiển công suất cho thiết bị điện dân dụng mạch cảm biến nhiệt độ khí gas Tất kết nối liệu với thông qua mạng không dây nội GIẢNG VIÊN HƯỚNG DẪN an CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Họ tên Sinh viên: Nguyễn Duy Hùng MSSV: 13119087 Vũ Chung Hiếu MSSV: 13119194 Ngành: Cơng Nghệ Kỹ Thuật Máy Tính Tên đề tài: Thiết Kế Và Thi Công Bộ Điều Khiển Thiết Bị Điện Cho Gia Đình Họ tên Giáo viên hướng dẫn: Th.S Nguyễn Đình Phú NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Ưu điểm: Khuyết điểm: Đề nghị cho bảo vệ hay không? Đánh giá loại: Điểm:……………….(Bằng chữ: ) Tp Hồ Chí Minh, ngày tháng năm 2017 Giáo viên hướng dẫn an CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Họ tên Sinh viên: Nguyễn Duy Hùng MSSV: 13119087 Vũ Chung Hiếu MSSV: 13119194 Ngành: Cơng Nghệ Kỹ Thuật Máy Tính Tên đề tài: Thiết Kế Và Thi Công Bộ Điều Khiển Thiết Bị Điện Cho Gia Đình Họ tên Giáo viên phản biện: NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Ưu điểm: Khuyết điểm: Đề nghị cho bảo vệ hay không? Đánh giá loại: Điểm:……………….(Bằng chữ: ) Tp Hồ Chí Minh, ngày tháng năm 2017 Giáo viên phản biện an ĐỒ ÁN TỐT NGHIỆP _ LỜI CAM ĐOAN Nhóm sinh viên thực đề tài xin cam đoan cơng trình nghiên cứu nhóm 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 Tp Hồ Chí Minh, ngày 20 tháng 07 năm 2017 (Ký tên) _ THIẾT KẾ VÀ THI CÔNG BỘ ĐIỀU KHIỂN THIẾT BỊ ĐIỆN TRONG GIA ĐÌNH an Trang i ĐỒ ÁN TỐT NGHIỆP _ LỜI CẢM ƠN Nhóm sinh viên thực xin gửi lời cảm ơn chân thành đến quý thầy cô khoa Đào Tạo Chất Lượng Cao giảng dạy chúng suốt bốn năm học tạo điều kiện thuận lợi để chúng em thực tốt đề tài Cảm ơn gia đình, cha mẹ nguồn động viên to lớn vật chất tinh thần suốt thời gian học hành, để em có tương lai, theo đuổi ước mơ nghiệp Đặc biệt cảm ơn thầy Nguyễn Đình Phú đã tâ ̣n tı̀nh hướng dẫn và ta ̣o điề u kiêṇ thuâ ̣n lơ ̣i cho chúng em suốt thời gian thực đồ án tốt nghiệp Chúng em xin phép gửi đến thầy lòng biết ơn lời cảm ơn chân thành sâu sắc Kiến thức, kinh nghiệm tâm nghề nghiệp thầy giúp đỡ chúng em hồn thành tốt đề tài mà cịn gương để chúng em học tập noi theo đường sau Bên cạnh đó, chúng em xin cảm ơn các anh, chị khóa trước cũng các ba ̣n sinh viên lớp 13119CL2 đã nhiê ̣t tın ̀ h đóng góp ý kiế n và chia sẽ kinh nghiê ̣m để giúp chúng em hoàn thành đề tài này Cuối cùng, đề tài hoàn thành kế hoạch và đảm bảo thời ̣n kiến thức hạn hẹp chắ c chắ n sẽ không tránh khỏi những thiế u sót, mong Thầ y/Cô và các ba ̣n sinh viên thông cảm Nhóm mong nhâ ̣n đươ ̣c những ý kiế n nhận xét đóng góp của Thầ y/Cơ và các ba ̣n sinh viên Chúng em xin chân thành cảm ơn! Nhóm thực đề tài _ THIẾT KẾ VÀ THI CÔNG BỘ ĐIỀU KHIỂN THIẾT BỊ ĐIỆN TRONG GIA ĐÌNH an Trang ii ĐỒ ÁN TỐT NGHIỆP _ MỤC LỤC LỜI CAM ĐOAN i LỜI CẢM ƠN ii MỤC LỤC iii DANH MỤC CÁC TỪ VIẾT TẮT v DANH MỤC CÁC HÌNH ẢNH vi DANH MỤC CÁC BẢNG BIỂU .viii LỜI MỞ ĐẦU ix Chương 1: GIỚI THIỆU TỔNG QUAN ĐỀ TÀI 1.1 Đặt vấn đề 1.2 Tính cấp thiết đề tài 1.3 Mu ̣c tiêu nghiên cứu 1.4 Nhiệm vu ̣ nghiên cứu 1.5 Đối tượng phạm vi nghiên cứu 1.6 Phương pháp nghiên cứu 1.7 Bố cục đề tài Chương 2: CƠ SỞ LÝ THUYẾT LIÊN QUAN 2.1 Internet Of Things 2.1.1 Giới thiệu 2.1.2 Mô hình .5 2.2 Vi điều khiển STM32F407VET6 2.2.1 Giới thiệu dòng vi điều khiển STM32 2.2.2 Thông số kĩ thuật 2.3 Module LCD TFT Inch 10 2.4 Module Wifi Esp 8266 12 2.4.1 Giới thiệu 12 2.4.2 Firmware cách nạp 14 2.4.3 Các tập lệnh AT .15 2.5 Adrunio nano 17 2.6 Module sim 800L 18 2.7 Module thời gian thực RTC 21 2.8 Giới thiệu giao thức TCP/IP 22 2.8.1 Khái niệm TCP/IP 22 _ THIẾT KẾ VÀ THI CÔNG BỘ ĐIỀU KHIỂN THIẾT BỊ ĐIỆN TRONG GIA ĐÌNH an Trang iii ĐỒ ÁN TỐT NGHIỆP _ 2.8.2 Chức TCP/IP: 22 2.8.3 Cấu trúc TCP/IP 23 2.8.4 Phương thức hoạt động giao thức TCP/IP 24 2.8.5 Quá trình đóng mở gói liệu TCP/IP .24 2.8.6 So sánh TCP/IP với OSI 25 2.9 Hướng dẫn mở Port Modem Wifi nhà dùng dịch vụ để cấu hình DNS tự động cho IP động 26 2.9.1 Mở port modem wifi .26 2.9.2 Cấu hình 29 Chương 3: THIẾT KẾ VÀ THI CÔNG HỆ THỐNG 30 3.1 Thiết kế và thi công mạch điều khiển 30 3.1.1 Sơ đồ khối mạch .30 3.1.2 Thiết kế mạch module cảm biến .39 3.2 Thiế t kế phầ n mề m và giải thuâ ̣t 43 3.2.1 Ý tưởng 43 3.2.2 Lưu đồ giải thuâ ̣t .44 3.2.3 Thiế t kế phầ n mề m điều khiể n nề n tảng android 46 Chương 4: VẬN HÀNH VÀ KIỂM TRA KẾT QUẢ 51 4.1 Kết đạt lý thuyết 51 4.2 Kết đạt thực hành 51 4.3 Kết chạy thực tế 56 Chương 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 57 5.1 Kết luận 57 5.2 Hướng phát triển 57 PHỤ LỤC 58 CODE CCS DÀNH CHO ARM: 58 CODE DÀNH CHO ADRUNIO NANO: 79 TÀI LIỆU THAM KHẢO 102 _ THIẾT KẾ VÀ THI CƠNG BỘ ĐIỀU KHIỂN THIẾT BỊ ĐIỆN TRONG GIA ĐÌNH an Trang iv ĐỒ ÁN TỐT NGHIỆP _ void MX_I2C3_Init(void) { hi2c3.Instance = I2C3; hi2c3.Init.ClockSpeed = 100000; hi2c3.Init.DutyCycle = I2C_DUTYCYCLE_2; hi2c3.Init.OwnAddress1 = 0; hi2c3.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c3.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; hi2c3.Init.OwnAddress2 = 0; hi2c3.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c3.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; HAL_I2C_Init(&hi2c3); } /* SDIO init function */ void MX_SDIO_SD_Init(void) { hmsd.Instance = SDIO; hmsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; hmsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; hmsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; hmsd.Init.BusWide = SDIO_BUS_WIDE_1B; hmsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE; hmsd.Init.ClockDiv = 0; } /* TIM2 init function */ void MX_TIM2_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig; TIM_MasterConfigTypeDef sMasterConfig; htim2.Instance = TIM2; htim2.Init.Prescaler = 42000; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 3999; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_Base_Init(&htim2); sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig); sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig); } _ THIẾT KẾ VÀ THI CƠNG BỘ ĐIỀU KHIỂN THIẾT BỊ ĐIỆN TRONG GIA ĐÌNH an Trang 90 ĐỒ ÁN TỐT NGHIỆP _ /* TIM3 init function */ void MX_TIM3_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig; TIM_MasterConfigTypeDef sMasterConfig; htim3.Instance = TIM3; htim3.Init.Prescaler = 42000; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 1999; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_Base_Init(&htim3); sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig); sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig); } /* USART1 init function */ void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; HAL_UART_Init(&huart1); } /* USART2 init function */ void MX_USART2_UART_Init(void) { huart2.Instance = USART2; huart2.Init.BaudRate = 115200; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; huart2.Init.Mode = UART_MODE_TX_RX; huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; _ THIẾT KẾ VÀ THI CÔNG BỘ ĐIỀU KHIỂN THIẾT BỊ ĐIỆN TRONG GIA ĐÌNH an Trang 91 ĐỒ ÁN TỐT NGHIỆP _ huart2.Init.OverSampling = UART_OVERSAMPLING_16; HAL_UART_Init(&huart2); } /* USART3 init function */ void MX_USART3_UART_Init(void) { huart3.Instance = USART3; huart3.Init.BaudRate = 115200; huart3.Init.WordLength = UART_WORDLENGTH_8B; huart3.Init.StopBits = UART_STOPBITS_1; huart3.Init.Parity = UART_PARITY_NONE; huart3.Init.Mode = UART_MODE_TX_RX; huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart3.Init.OverSampling = UART_OVERSAMPLING_16; HAL_UART_Init(&huart3); } void MX_USART6_UART_Init(void) { huart6.Instance = USART6; huart6.Init.BaudRate = 115200; huart6.Init.WordLength = UART_WORDLENGTH_8B; huart6.Init.StopBits = UART_STOPBITS_1; huart6.Init.Parity = UART_PARITY_NONE; huart6.Init.Mode = UART_MODE_TX_RX; huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart6.Init.OverSampling = UART_OVERSAMPLING_16; HAL_UART_Init(&huart6); } /** Configure pins as * Analog * Input * Output * EVENT_OUT * EXTI */ void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; /* GPIO Ports Clock Enable */ HAL_RCC_GPIOE_CLK_ENABLE(); HAL_RCC_GPIOH_CLK_ENABLE(); HAL_RCC_GPIOA_CLK_ENABLE(); HAL_RCC_GPIOB_CLK_ENABLE(); _ THIẾT KẾ VÀ THI CÔNG BỘ ĐIỀU KHIỂN THIẾT BỊ ĐIỆN TRONG GIA ĐÌNH an Trang 92 ĐỒ ÁN TỐT NGHIỆP _ HAL_RCC_GPIOC_CLK_ENABLE(); HAL_RCC_GPIOD_CLK_ENABLE(); /*Configure GPIO pins : PE3 PE4 */ // GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4; // GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; // GPIO_InitStruct.Pull = GPIO_PULLUP; // HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); /*Configure GPIO pins : PA6 PA7 */ GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_RESET); GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0); /* EXTI interrupt init*/ // HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0); // HAL_NVIC_EnableIRQ(EXTI3_IRQn); // HAL_NVIC_SetPriority(EXTI4_IRQn, 6, 0); // HAL_NVIC_EnableIRQ(EXTI4_IRQn); } void MX_ADC1_Init(void) { ADC_ChannelConfTypeDef sConfig; /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) */ hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; hadc1.Init.Resolution = ADC_RESOLUTION_10B; hadc1.Init.ScanConvMode = DISABLE; hadc1.Init.ContinuousConvMode = ENABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; _ THIẾT KẾ VÀ THI CÔNG BỘ ĐIỀU KHIỂN THIẾT BỊ ĐIỆN TRONG GIA ĐÌNH an Trang 93 ĐỒ ÁN TỐT NGHIỆP _ hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DMAContinuousRequests = DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; HAL_ADC_Init(&hadc1); /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time */ sConfig.Channel = ADC_CHANNEL_10; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_144CYCLES; HAL_ADC_ConfigChannel(&hadc1, &sConfig); } /* ADC2 init function */ void MX_ADC2_Init(void) { ADC_ChannelConfTypeDef sConfig; /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) */ hadc2.Instance = ADC2; hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; hadc2.Init.Resolution = ADC_RESOLUTION_12B; hadc2.Init.ScanConvMode = DISABLE; hadc2.Init.ContinuousConvMode = ENABLE; hadc2.Init.DiscontinuousConvMode = DISABLE; hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc2.Init.NbrOfConversion = 1; hadc2.Init.DMAContinuousRequests = DISABLE; hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV; HAL_ADC_Init(&hadc2); /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time */ sConfig.Channel = ADC_CHANNEL_12; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_144CYCLES; HAL_ADC_ConfigChannel(&hadc2, &sConfig); } /** * Enable DMA controller clock */ void MX_DMA_Init(void) _ THIẾT KẾ VÀ THI CÔNG BỘ ĐIỀU KHIỂN THIẾT BỊ ĐIỆN TRONG GIA ĐÌNH an Trang 94 ĐỒ ÁN TỐT NGHIỆP _ { /* DMA controller clock enable */ HAL_RCC_DMA1_CLK_ENABLE(); /* DMA interrupt init */ /* DMA1_Stream2_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn); } #ifdef USE_FULL_ASSERT void assert_failed(uint8_t* file, uint32_t line) { /* USER CODE BEGIN */ /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* USER CODE END */ } #endif _ THIẾT KẾ VÀ THI CƠNG BỘ ĐIỀU KHIỂN THIẾT BỊ ĐIỆN TRONG GIA ĐÌNH an Trang 95 ĐỒ ÁN TỐT NGHIỆP _ CODE DÀNH CHO MODULE CẢM BIẾN: #include SoftwareSerial esp8266(2, 3); // RX | TX #include "DHT.h" const int DHTPIN = 16; //Đọc liệu từ DHT11 chân mạch Arduino const int DHTTYPE = DHT11; //Khai báo loại cảm biến, có loại DHT11 DHT22 DHT dht(DHTPIN, DHTTYPE); int val,gasval,cel,mv; int gasPin = 21; float h,t; #define TIMEOUT 5000 // mS void cauhinhesp(); String recieve,gui,nhietdo,gas; char recieve2[128]; String IncomingString=""; boolean StringReady = false; int time=0; void setup() { pinMode(13, OUTPUT); pinMode(14, OUTPUT); pinMode(15, OUTPUT); pinMode(12, INPUT); pinMode(7, OUTPUT); // RESET ESP digitalWrite(7,HIGH); Serial.begin(115200); // communication with the host computer //while (!Serial) { ; } // Start the software serial for communication with the ESP8266 esp8266.begin(115200); dht.begin(); // Khởi động cảm biến Serial.println(""); Serial.println("Remember to to set Both NL & CR in the serial monitor."); Serial.println("Ready"); Serial.println(""); // esp8266.println("AT"); _ THIẾT KẾ VÀ THI CÔNG BỘ ĐIỀU KHIỂN THIẾT BỊ ĐIỆN TRONG GIA ĐÌNH an Trang 96 ĐỒ ÁN TỐT NGHIỆP _ delay(30); cauhinhesp(); // esp8266.write("AT"); // esp8266.write("\r"); // esp8266.write("\n"); } void cauhinhesp() { esp8266.println("AT\r"); //SendCommand("AT+RST", "Ready"); delay(5000); SendCommand("AT","OK"); SendCommand("AT+CWMODE=1","OK"); SendCommand("AT+CWJAP=\"Pen Kun 3\",\"h032212101995\"","OK"); SendCommand("AT+CIFSR", "OK"); SendCommand("AT+CIPMUX=0","OK"); SendCommand("AT+CIPMODE=0", "OK"); delay(1000); SendCommand("AT+CIPSTART=\"TCP\",\"192.168.1.100\",80","OK"); delay(2000); SendCommand("AT+CIPSTART=\"TCP\",\"192.168.1.100\",80","OK"); delay(2000); gui="SEN1"; send(gui); } String esprecieve () { delay(1000); while (esp8266.available()) { recieve+=(char)esp8266.read(); } return recieve; } void loop() _ THIẾT KẾ VÀ THI CÔNG BỘ ĐIỀU KHIỂN THIẾT BỊ ĐIỆN TRONG GIA ĐÌNH an Trang 97 ĐỒ ÁN TỐT NGHIỆP _ { StringReady = false; while(esp8266.available()) { IncomingString=esp8266.readString(); // char c = esp8266->read(); // if (c == '\0') continue; // tmpData += c; StringReady= true; //donhietdogas(); if (StringReady){ Serial.println("Received String: " + IncomingString); } if (IncomingString.indexOf("DO") != -1) { digitalWrite(13,HIGH); donhietdogas(); delay(1000); send(nhietdo); break; } if (IncomingString.indexOf("D8") != -1) { digitalWrite(13,HIGH); digitalWrite(14,LOW); break; } if (IncomingString.indexOf("D9") != -1) { digitalWrite(13,HIGH); digitalWrite(15,LOW); break; } IncomingString=" "; } // IncomingString=" "; donhietdogas(); if(digitalRead(12)==0) { delay(500); if(digitalRead(12)==0) _ THIẾT KẾ VÀ THI CÔNG BỘ ĐIỀU KHIỂN THIẾT BỊ ĐIỆN TRONG GIA ĐÌNH an Trang 98 ĐỒ ÁN TỐT NGHIỆP _ Serial.println("Nut da nhan"); Serial.println("AT+CWSTARTSMART\r"); esp8266.println("AT+CWSTARTSMART\r"); delay(20000); //=============== ket noi voi sever SendCommand("AT+CIFSR", "OK"); SendCommand("AT+CIPMUX=0","OK"); SendCommand("AT+CIPMODE=0", "OK"); delay(1000); SendCommand("AT+CIPSTART=\"TCP\",\"192.168.1.100\",80","OK"); delay(2000); SendCommand("AT+CIPSTART=\"TCP\",\"192.168.1.100\",80","OK"); delay(2000); } if(Serial.available()) { // the following delay is required because otherwise the arduino will read the first letter of the command but not the rest // In other words without the delay if you use AT+RST, for example, the Arduino will read the letter A send it, then read the rest and send it // but we want to send everything at the same time delay(1000); String command=""; while(Serial.available()) // read the command character by character { // read one character command+=(char)Serial.read(); } command+=('\r'); esp8266.println(command); // send the read character to the esp8266 } digitalWrite(13,LOW); } void donhietdogas() { // for (time=0;time