ESP8266 AT指令配置

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;
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值