STM32---WIFI模块ESP8266
文章目录
- 模块介绍
- 模块连接
- WIFI模块的模式
- WIFI模块常用AT指令
- 透传模式理解
- 代码实现
- 代码介绍
- 实现步骤
- .c文件
- .h文件
- main.c文件
- 数据接收讲解
模块介绍
模块连接
模块连接时基于串口方式连接,其模块与电脑(服务器)之间数据的发送与接收也是基于串口。
WIFI模块的模式
- mode=1 :Station模式(连接到WIFI)
- mode=2:AP模式(自己作为WIFI源供其他连接)
- mode=3:AP+Station模式(以上两者模式的合并)
WIFI模块常用AT指令
透传模式理解
透传模式就是单片机通过串口形式与模块连接,而模块与上位机之间的数据交互的具体不用考虑。
-
如果不开启透传模式,在每次发送数据前都必须先发送指令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十六进制数据
根据代码和接受的数据,可知,其最后在物理层连接部分,只是串口的应用。
-
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...