基于STM32F1单片机、ESP8266WIFI模块、DHT11温湿度传感的WIFI网络温湿度传输系统

您所在的位置:网站首页 物联网温湿度传感器实验报告 基于STM32F1单片机、ESP8266WIFI模块、DHT11温湿度传感的WIFI网络温湿度传输系统

基于STM32F1单片机、ESP8266WIFI模块、DHT11温湿度传感的WIFI网络温湿度传输系统

2024-07-13 22:49| 来源: 网络整理| 查看: 265

基于STM32F1单片机、ESP8266WIFI模块、DHT11温湿度传感的WIFI网络温湿度传输系统 功能说明温湿度采集端温湿度监控端 硬件材料硬件连接 主要代码温湿度采集端温湿度监控端 测试

基于STM32F1单片机、ESP8266WIFI模块、DHT11温湿度传感的WIFI网络温湿度传输系统完整工程

功能说明

基于嵌入式的温湿度网络传输系统包含:温湿度采集端与温湿度监控端。 温湿度采集端可实时采集温度与湿度数据,通过WIFI透传技术,将温湿度数据传送到温度监控端。温度监控端实时接收温湿度采集端所发送的温湿度数据,显示在网站上。 注:目前只是在局域网下测试。

温湿度采集端 嵌入式STM32微控制器实时读取DHT11温湿度传感器采集的温湿度数据。嵌入式STM32微控制器通过ESP8266WIFI模块连接WIFI。通过TCP协议连接到电脑服务器,将温湿度数据传输到服务器。 温湿度监控端 通过建立Serversocket监听指定端口,获得温湿度采集端的温湿度数据。将获取的数据通过WebSocket建立与客户端web页面的实时连接,将数据传送到web页面web页面可实时显示温湿度数据、查询温湿度数据、将数值图形化用动态柱形图的形式展现。

在这里插入图片描述

硬件材料

温湿度采集端STM32F1单片机、DHT11温湿度传感器、ESP8266WIFI模块

硬件连接

ESP8266与STM32F103连接图: 在这里插入图片描述 DHT11与STM32F103连接图: 在这里插入图片描述

温湿度监控端普通电脑需要JAVA环境

主要代码 温湿度采集端 /************************************************************************************/ @file main.c @function 初始化各模块 *************************************************************************************/ #include "stm32f10x.h" #include "bsp_usart1.h" #include "bsp_SysTick.h" #include "bsp_esp8266.h" #include "test.h" #include "bsp_dht11.h" int main ( void ) { USARTx_Config (); SysTick_Init (); ESP8266_Init (); DHT11_Init (); ESP8266_StaTcpClient_UnvarnishTest (); while ( 1 ); } /****************************END OF FILE***************************/ /************************************************************************************/ @file stm32f10x_conf.h @function 调用库包含 *************************************************************************************/ #ifndef __STM32F10x_CONF_H #define __STM32F10x_CONF_H #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_tim.h" #include "stm32f10x_usart.h" #include "misc.h" #ifdef USE_FULL_ASSERT #else #define assert_param(expr) ((void)0) #endif #endif /****************************END OF FILE***************************/ /************************************************************************************/ @file stm32f10x_it.h @function 中断头文件 *************************************************************************************/ #ifndef __STM32F10x_IT_H #define __STM32F10x_IT_H #ifdef __cplusplus extern "C" { #endif void NMI_Handler(void); void HardFault_Handler(void); void MemManage_Handler(void); void BusFault_Handler(void); void UsageFault_Handler(void); void SVC_Handler(void); void DebugMon_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); #ifdef __cplusplus } #endif #endif /****************************END OF FILE***************************/ /************************************************************************************/ @file stm32f10x_it.c @function 中断服务程序 *************************************************************************************/ #include "stm32f10x_it.h" #include #include #include "bsp_SysTick.h" #include "bsp_esp8266.h" #include "test.h" void macESP8266_USART_INT_FUN ( void ) { uint8_t ucCh; if ( USART_GetITStatus ( macESP8266_USARTx, USART_IT_RXNE ) != RESET ) { ucCh = USART_ReceiveData( macESP8266_USARTx ); if(strEsp8266_Fram_Record.InfBit.FramLengthCTRL &= ~ SysTick_CTRL_ENABLE_Msk; } void Delay_us( __IO u32 nTime ) { TimingDelay = nTime; SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; while( TimingDelay != 0 ); } void TimingDelay_Decrement(void) { if ( TimingDelay != 0x00 ) { TimingDelay --; } } /**********************************END OF FILE*******************/ /************************************************************************************/ @file bsp_esp8266.h @function WIFI模块头文件 *************************************************************************************/ #ifndef __BSP_ESP8266_H #define __BSP_ESP8266_H #include "stm32f10x.h" #include "common.h" #include #include #if defined ( __CC_ARM ) #pragma anon_unions #endif typedef enum{ STA, AP, STA_AP } ENUM_Net_ModeTypeDef; typedef enum{ enumTCP, enumUDP, } ENUM_NetPro_TypeDef; typedef enum{ Multiple_ID_0 = 0, Multiple_ID_1 = 1, Multiple_ID_2 = 2, Multiple_ID_3 = 3, Multiple_ID_4 = 4, Single_ID_0 = 5, } ENUM_ID_NO_TypeDef; typedef enum{ OPEN = 0, WEP = 1, WPA_PSK = 2, WPA2_PSK = 3, WPA_WPA2_PSK = 4, } ENUM_AP_PsdMode_TypeDef; #define RX_BUF_MAX_LEN 1024 extern struct STRUCT_USARTx_Fram { char Data_RX_BUF [ RX_BUF_MAX_LEN ]; union { __IO u16 InfAll; struct { __IO u16 FramLength :15; __IO u16 FramFinishFlag :1; } InfBit; }; } strEsp8266_Fram_Record; #define macESP8266_CH_PD_APBxClock_FUN RCC_APB2PeriphClockCmd #define macESP8266_CH_PD_CLK RCC_APB2Periph_GPIOB #define macESP8266_CH_PD_PORT GPIOB #define macESP8266_CH_PD_PIN GPIO_Pin_8 #define macESP8266_RST_APBxClock_FUN RCC_APB2PeriphClockCmd #define macESP8266_RST_CLK RCC_APB2Periph_GPIOB #define macESP8266_RST_PORT GPIOB #define macESP8266_RST_PIN GPIO_Pin_9 #define macESP8266_USART_BAUD_RATE 115200 #define macESP8266_USARTx USART3 #define macESP8266_USART_APBxClock_FUN RCC_APB1PeriphClockCmd #define macESP8266_USART_CLK RCC_APB1Periph_USART3 #define macESP8266_USART_GPIO_APBxClock_FUN RCC_APB2PeriphClockCmd #define macESP8266_USART_GPIO_CLK RCC_APB2Periph_GPIOB #define macESP8266_USART_TX_PORT GPIOB #define macESP8266_USART_TX_PIN GPIO_Pin_10 #define macESP8266_USART_RX_PORT GPIOB #define macESP8266_USART_RX_PIN GPIO_Pin_11 #define macESP8266_USART_IRQ USART3_IRQn #define macESP8266_USART_INT_FUN USART3_IRQHandler #define macESP8266_Usart( fmt, ... ) USART_printf ( macESP8266_USARTx, fmt, ##__VA_ARGS__ ) #define macPC_Usart( fmt, ... ) printf ( fmt, ##__VA_ARGS__ ) //#define macPC_Usart( fmt, ... ) #define macESP8266_CH_ENABLE() GPIO_SetBits ( macESP8266_CH_PD_PORT, macESP8266_CH_PD_PIN ) #define macESP8266_CH_DISABLE() GPIO_ResetBits ( macESP8266_CH_PD_PORT, macESP8266_CH_PD_PIN ) #define macESP8266_RST_HIGH_LEVEL() GPIO_SetBits ( macESP8266_RST_PORT, macESP8266_RST_PIN ) #define macESP8266_RST_LOW_LEVEL() GPIO_ResetBits ( macESP8266_RST_PORT, macESP8266_RST_PIN ) void ESP8266_Init ( void ); void ESP8266_Rst ( void ); bool ESP8266_Cmd ( char * cmd, char * reply1, char * reply2, u32 waittime ); void ESP8266_AT_Test ( void ); bool ESP8266_Net_Mode_Choose ( ENUM_Net_ModeTypeDef enumMode ); bool ESP8266_JoinAP ( char * pSSID, char * pPassWord ); bool ESP8266_BuildAP ( char * pSSID, char * pPassWord, ENUM_AP_PsdMode_TypeDef enunPsdMode ); bool ESP8266_Enable_MultipleId ( FunctionalState enumEnUnvarnishTx ); bool ESP8266_Link_Server ( ENUM_NetPro_TypeDef enumE, char * ip, char * ComNum, ENUM_ID_NO_TypeDef id); bool ESP8266_StartOrShutServer ( FunctionalState enumMode, char * pPortNum, char * pTimeOver ); uint8_t ESP8266_Get_LinkStatus ( void ); uint8_t ESP8266_Get_IdLinkStatus ( void ); uint8_t ESP8266_Inquire_ApIp ( char * pApIp, uint8_t ucArrayLength ); bool ESP8266_UnvarnishSend ( void ); void ESP8266_ExitUnvarnishSend ( void ); bool ESP8266_SendString ( FunctionalState enumEnUnvarnishTx, char * pStr, u32 ulStrLength, ENUM_ID_NO_TypeDef ucId ); char * ESP8266_ReceiveString ( FunctionalState enumEnUnvarnishTx ); #endif /**********************************END OF FILE*******************/ /************************************************************************************/ @file bsp_esp8266.c @function WIFI模块功能文件 *************************************************************************************/ #include "bsp_esp8266.h" #include "common.h" #include #include #include #include "bsp_SysTick.h" static void ESP8266_GPIO_Config ( void ); static void ESP8266_USART_Config ( void ); static void ESP8266_USART_NVIC_Configuration ( void ); struct STRUCT_USARTx_Fram strEsp8266_Fram_Record = { 0 }; void ESP8266_Init ( void ) { ESP8266_GPIO_Config (); ESP8266_USART_Config (); macESP8266_RST_HIGH_LEVEL(); macESP8266_CH_DISABLE(); } static void ESP8266_GPIO_Config ( void ) { GPIO_InitTypeDef GPIO_InitStructure; macESP8266_CH_PD_APBxClock_FUN ( macESP8266_CH_PD_CLK, ENABLE ); GPIO_InitStructure.GPIO_Pin = macESP8266_CH_PD_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init ( macESP8266_CH_PD_PORT, & GPIO_InitStructure ); macESP8266_RST_APBxClock_FUN ( macESP8266_RST_CLK, ENABLE ); GPIO_InitStructure.GPIO_Pin = macESP8266_RST_PIN; GPIO_Init ( macESP8266_RST_PORT, & GPIO_InitStructure ); } static void ESP8266_USART_Config ( void ) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; macESP8266_USART_APBxClock_FUN ( macESP8266_USART_CLK, ENABLE ); macESP8266_USART_GPIO_APBxClock_FUN ( macESP8266_USART_GPIO_CLK, ENABLE ); GPIO_InitStructure.GPIO_Pin = macESP8266_USART_TX_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(macESP8266_USART_TX_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = macESP8266_USART_RX_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(macESP8266_USART_RX_PORT, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = macESP8266_USART_BAUD_RATE; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No ; USART_InitStructure.USART_HardwareFlowControl USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(macESP8266_USARTx, &USART_InitStructure); USART_ITConfig ( macESP8266_USARTx, USART_IT_RXNE, ENABLE ); USART_ITConfig ( macESP8266_USARTx, USART_IT_IDLE, ENABLE ); ESP8266_USART_NVIC_Configuration (); USART_Cmd(macESP8266_USARTx, ENABLE); } static void ESP8266_USART_NVIC_Configuration ( void ) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig ( macNVIC_PriorityGroup_x ); NVIC_InitStructure.NVIC_IRQChannel = macESP8266_USART_IRQ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void ESP8266_Rst ( void ) { #if 0 ESP8266_Cmd ( "AT+RST", "OK", "ready", 2500 ); #else macESP8266_RST_LOW_LEVEL(); Delay_ms ( 500 ); macESP8266_RST_HIGH_LEVEL(); #endif } bool ESP8266_Cmd ( char * cmd, char * reply1, char * reply2, u32 waittime ) { strEsp8266_Fram_Record .InfBit .FramLength = 0; macESP8266_Usart ( "%s\r\n", cmd ); if ( ( reply1 == 0 ) && ( reply2 == 0 ) ) return true; Delay_ms ( waittime ); strEsp8266_Fram_Record.Data_RX_BUF[strEsp8266_Fram_Record.InfBit .FramLength ]='\0'; macPC_Usart ( "%s", strEsp8266_Fram_Record .Data_RX_BUF ); if ( ( reply1 != 0 ) && ( reply2 != 0 ) ) return((bool)strstr strEsp8266_Fram_Record .Data_RX_BUF,reply1)|| (bool)strstr ( trEsp8266_Fram_Record .Data_RX_BUF, reply2 )); else if ( reply1 != 0 ) return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply1 ) ); else return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply2 ) ); } void ESP8266_AT_Test ( void ) { char count=0; macESP8266_RST_HIGH_LEVEL(); Delay_ms ( 1000 ); while ( count


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3