STM32---WIFI模块ESP8266

今天 7084阅读 0评论

文章目录

  • 模块介绍
    • 模块连接
    • WIFI模块的模式
    • WIFI模块常用AT指令
    • 透传模式理解
    • 代码实现
      • 代码介绍
      • 实现步骤
      • .c文件
      • .h文件
      • main.c文件
      • 数据接收讲解

        模块介绍

        模块连接

        模块连接时基于串口方式连接,其模块与电脑(服务器)之间数据的发送与接收也是基于串口。

        STM32---WIFI模块ESP8266 第1张

        WIFI模块的模式

        • mode=1 :Station模式(连接到WIFI)
        • mode=2:AP模式(自己作为WIFI源供其他连接)
        • mode=3:AP+Station模式(以上两者模式的合并)

          WIFI模块常用AT指令

          STM32---WIFI模块ESP8266 第2张

          透传模式理解

          透传模式就是单片机通过串口形式与模块连接,而模块与上位机之间的数据交互的具体不用考虑。

          STM32---WIFI模块ESP8266 第3张

          • 如果不开启透传模式,在每次发送数据前都必须先发送指令AT+CIPSEND=

             AT+CIPSEND=4
              
             OK
             >                //在 > 后面输入要上传的数据
            
          • 但是开启了透传模式,我们就不需要在每次发送数据前都发送指令AT+CIPSEND=了,只需要发送一次AT+CIPSEND,之后发送的所有内容全部当成是数据了!

            代码实现

            代码介绍

            1、对串口的配置。

            串口初始化、串口中断接收数据,串口发送函数封装(模块发送数据)

            2、AT指令的发送,并发送AT指令时发送相关的数据:熟练运用spprintf()函数。

            实现步骤

            1. 重置模组为出厂模式:AT+RESTORE			示例:AT+RESTORE    		 OK 
            2. 设置工作模式:AT+CWMODE=		示例:AT+CWMODE=1	     OK
            3. 连接当前环境的WIFI热点:AT+CWJAP=,	
            		:字符串参数,当前WIFI的名字
            		 :字符串参数,连接密码
            		 示例:AT+CWJAP="TCP_Server","12345678" 
                 		  WIFI CONNECTED	      
                 		  WIFI GOT IP 
            4. 建立TCP连接通道	:AT+CIPSTART="TCP",,
            		 :字符串参数,IP地址
              		:字符串参数,服务器端口
            	示例: AT+CIPSTART="TCP","192.168.4.1",333
                 	 CONNECTED
            5. 开启透传模式:AT+CIPMODE=1
            6. 发送数据: AT+CIPSEND=
            		  发送数据的字节长度
            	示例: AT+CIPSEND=10
                  OK
                   >在此处填写要发送的内容
             注释:示例是在串口调试助手下的发送与返回。也是给代码编写提供示例。
            

            .c文件

            #include "delay.h"
            #include "wifi.h"
            #include "stdarg.h"	 	 
            #include "stdio.h"	
            #include "stdlib.h"
            #include "string.h"	 
            #include "usart.h"
            #include "stm32f10x.h"
            #include "sys.h" 
            #include "lcd.h"
            //串口接收缓存区 	
            char USART2_RX_BUF[USART2_MAX_RECV_LEN]; 				//接收缓冲,最大USART3_MAX_RECV_LEN个字节.
            //接收到的数据状态
            //[15]:0,没有接收到数据;1,接收到了一批数据.
            //[14:0]:接收到的数据长度
            vu16 USART2_RX_STA=0;   	
            void USART2_IRQHandler(void)
            {
            	u8 res;
            	if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//接收到数据
            	{	 
            			USART_ClearITPendingBit(USART2, USART_IT_RXNE);
            	  	res =USART_ReceiveData(USART2);		 
            			USART2_RX_BUF[USART2_RX_STA&0X3FFF]=res;	//记录接收到的值
            			USART2_RX_STA++;		
            			//USART_SendData(USART1,res);
            			//printf("%x",res);
            			USART2_RX_STA|=0x8000;			//标记接收完成
            	}
            }   
            //初始化IO 串口2
            //bound:波特率	  
            void wifi_usart2_init(u32 bound)
            {
            	NVIC_InitTypeDef NVIC_InitStructure;
            	GPIO_InitTypeDef GPIO_InitStructure;
            	USART_InitTypeDef USART_InitStructure;
            	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	// GPIOA时钟
            	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //串口2时钟使能
             	USART_DeInit(USART2);  //复位串口2
            		 //USART2_TX   PA2
              GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; 
              GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
              GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA2
               
                //USART2_RX	  PA3
              GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
              GPIO_Init(GPIOA, &GPIO_InitStructure);  //初始化PA3
            	
            	
            		//设置中断优先级
            	NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
            	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级2
            	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;		//子优先级2
            	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
            	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器
            	
            	USART_InitStructure.USART_BaudRate = bound;//波特率一般设置为9600;
            	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
            	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(USART2, &USART_InitStructure); //初始化串口	2
            	//使能接收中断
              USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启中断 
            	USART_Cmd(USART2, ENABLE);                    //使能串口 
            	USART2_RX_STA=0;		//清零
            }
            /******************************************************************************
                  函数说明:发送数据到串口2
                  入口数据:DATA_BUF  发送的数据           
                            len   发送的长度          
                  返回值:  无
            ******************************************************************************/
            void esp8266_send_data(u8 *DATA_BUF,u8 len)	//发送数据到串口2
            {
            	u16 j; 
            	if(len USART2_MAX_SEND_LEN)			//最多只能发MAX_LEN个数据
            	{
            		for(j=0;j PASS(192.168.1.177:18323)
             > [1,OnReceive] -> 192.168.1.177:18323 (5 bytes)
            -> HEX: 55 B1 00 00 AA 
            -> ASCII: U?
            

            其中最主要看HEX十六进制数据

            根据代码和接受的数据,可知,其最后在物理层连接部分,只是串口的应用。


免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,7084人围观)

还没有评论,来说两句吧...

目录[+]