AT指令
在使用串口通信与电脑通信(usb转TTL),对esp8266模块发送数据。格式AT指令不区分大小写,均以回车换行结尾:
常用AT指令
注:
1.esp8266有三种模式:
AP模式:讲模块作为热点,让其他设备发现并进行连接。
单STA模式:连接其他设备的wifi热点。
混合模式:上两种结合;
2.在发送连续数据时建议打开透传模式
配置好设备后我们发送数据都是连续的,如果不开启透传,每次都要发送一条指令AT+CIPSEND=<param>才能发送或接收数据,这对其他设备的接受数据协议等其他影响较大。
进入透传肯定也会有退出的情况:可以发送“+++”就可以退出模式。
我使用的是STM32f103c8t6单片机进行配置:
使用usart1(引脚PA10、PA9)配置、波特率:115200
首先配置串口:
注:这里为了后期方便对8266发送数据,我这里使用了printf函数,加入头文件stdio重新对c库函数数据进行重新定义。
//头文件
#include "usart.h"
#include "stm32f10x_usart.h"
#include <string.h>
#include "stm32f10x_tim.h"
#include <stdio.h>
//=============================================================================
//函数名称:USART1_Config
//功能概要:USART1 GPIO 配置,工作模式配置。115200 8-N-1
//参数说明:无
//函数返回:无
//=============================================================================
void USART1_Config(void)
{
GPIO_InitTypeDef GPIO_InitStrue;
USART_InitTypeDef USART_InitStrue;
NVIC_InitTypeDef NVIC_InitStrue;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //GPIO端口使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //串口使能
GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP; //推挽输出
GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9; //PA9
GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz; //翻转速度
GPIO_Init(GPIOA,&GPIO_InitStrue); //GPIO端口初始化
GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10; //PA10
GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz; //翻转速度
GPIO_Init(GPIOA,&GPIO_InitStrue); //GPIO端口初始化
USART_InitStrue.USART_BaudRate = 115200 ; //波特率
USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None; //无流控制
USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx; //输入输出模式
USART_InitStrue.USART_Parity=USART_Parity_No; //无校验
USART_InitStrue.USART_StopBits=USART_StopBits_1; //停止位
USART_InitStrue.USART_WordLength=USART_WordLength_8b; //数据位
USART_Init(USART1,&USART_InitStrue); //串口参数初始化
USART_Cmd(USART1,ENABLE); //使能串口1
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //开启接收中断
NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn; //指定IRQ通道
NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE; //中断使能
NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1; //指定优先级
NVIC_InitStrue.NVIC_IRQChannelSubPriority=1; //
NVIC_Init(&NVIC_InitStrue); //中断初始化
}
//串口中断函数
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
num_1=USART_ReceiveData(USART1);
wait_ok1();
check_data_ok();
wait_ok();
check_data_closed();
accept_data();
}
}
//=============================================================================
//函数名称:fputc
//功能概要:重定向c库函数printf到USART
//参数说明:无
//函数返回:无
//注意 :由printf调用
//=============================================================================
int fputc(int ch, FILE *f)
{
//将Printf内容发往串口
USART_SendData(USART1, (unsigned char) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
return (ch);
}
前期的发送配置工作准备好后,现在就可以对wifi模块设备进行配置:
主设备配置:
//主设备的配置
void ESP8266_Config(void)
{
//检测设备是否在线
printf("AT\r\n");
while(flag != 2);
flag = 0;
Delay(0xfffff);Delay(0xfffff);Delay(0xfffff);
//设置工作模式 1:station模式 2:AP模式 3:兼容 AP+station模式
printf("AT+CWMODE=2\r\n");
while(flag != 2);
flag = 0;
Delay(0xfffff);Delay(0xfffff);Delay(0xfffff);
//让Wifi模块重启的命令
printf("AT+RST\r\n");
while(l_QI != 7);
l_QI = 0;
Delay(0xfffff);Delay(0xfffff);Delay(0xfffff);
//=0:单路连接模式 =1:多路连接模式
printf("AT+CIPMUX=1\r\n");
while(flag != 2);
flag = 0;
Delay(0xfffff);Delay(0xfffff);Delay(0xfffff);
//设置设备网络端口 8080
printf("AT+CIPSERVER=1,8080\r\n");
while(flag != 2);
flag = 0;
Delay(0xfffff);Delay(0xfffff);Delay(0xfffff);
//设置wifi名称密码
printf("AT+CWSAP=\"mechanical\",\"a1234567\",11,3\r\n");
while(flag != 2);
flag = 0;
Delay(0xfffff);Delay(0xfffff);Delay(0xfffff);
while(l_IN != 7);
l_IN = 0;
flag_connect = 1;
}
从设备配置:
void ESP8266_Config(void)
{
//测试设备是否在线
printf("AT\r\n");
while(flag != 2);
flag = 0;
Delay(0xfffff);Delay(0xfffff);
//设置工作模式 1:station模式 2:AP模式 3:兼容 AP+station模式
printf("AT+CWMODE=1\r\n");
while(flag != 2);
flag = 0;
Delay(0xfffff);Delay(0xfffff);
//让Wifi模块重启的命令
printf("AT+RST\r\n");
while(l_QI != 7);
l_QI = 0;
Delay(0xfffff);Delay(0xfffff);
flag = 0;
//连接WiFi
printf("AT+CWJAP=\"mechanical\",\"a1234567\"\r\n");
while(flag != 2);
flag = 0;
Delay(0xfffff);Delay(0xfffff);
建立TCP连接 连接类型 远程服务器IP地址 远程服务器端口号
printf("AT+CIPSTART=\"TCP\",\"192.168.4.1\",8080\r\n");
while(l_IN != 7);
l_IN = 0;
while(flag != 2);
flag = 0;
Delay(0xfffff);Delay(0xfffff);
//是否开启透传模式 0:表示关闭 1:表示开启透传
printf("AT+CIPMODE=1\r\n");
while(flag != 2);
flag = 0;
Delay(0xfffff);Delay(0xfffff);
//透传模式下 首先发指令 就可以直接发数据
printf("AT+CIPSEND\r\n");
while(flag != 2);
flag = 0;
Delay(0xfffff);Delay(0xfffff);
flag_connect = 1;
}