stm32开发板下esp8266通信

前言

Esp8266算是一个傻瓜式的wifi通信模块,前前后后也用过好几次,这次隔了好久没用有些东西都忘了,所在这里记录一下,防止以后用的时候又忘了。

硬件电路连接

话不多说,先上电路连接图。本次使用的是ESP-01S,也适用于ESP-01。下面是使用手册的连接图:
esp8266-01s图
但实际上使用时,一般将此模块的EN和VCC接口都接上5V的电压上,能保证通信的稳定,不过有一个问题就是容易发热,此时可以参考使用手册上给EN和5V电压之间加上一个小电阻。

初始化ESP为TCP客户端

本次我们使用esp8266作为TCP通信的客户端,在局域网中连接主服务器,并实现通信。具体初始化步骤如下:

  1. AT+CWMODE=1 //配置为station模式
  2. AT+CWJAP_DEF=“热点名”,“密码” //连接局域网热点
  3. AT+CIPMUX=0 //开启单连接
  4. AT+CIPSTART=“TCP”,“服务器IP地址”,端口号 //连接TCP服务器
  5. AT+CIPMODE=1 //开启透传模式
  6. AT+CIPSEND //开始发送
    至此,esp8266作为客户端就配置完成,具体的stm32初始化代码如下:
_Bool ResetWifi = False;   //判断是否需要更改默认wifi连接
void ESP8266_Init(void)        
{
	u8 i ;
	u8 at_rst[] = "AT+RST\x0D\x0A";  	//重启esp
	u8 at_cwmode[] = "AT+CWMODE=1\0x0D\0x0A"; //配置为Station模式
	u8 at_cwjap[] = "AT+CWJAP_DEF=\"Mi20\",\"12345678\"\x0D\x0A"; //连接wifi      参数:热点名字+密码
	u8 at_cipmux[] = "AT+CIPMUX=0\x0D\x0A";                                   //设置单主机模式 参数:0
	u8 at_cipstart[] = "AT+CIPSTART=\"TCP\",\"192.168.43.1\",8080\x0D\x0A";  //连接到服务器   参数:ip地址+端口号
	u8 at_cipmode[] = "AT+CIPMODE=1\x0D\x0A";          //透传模式    参数:1
	u8 at_cipsend[] = "AT+CIPSEND\x0D\x0A";                                   			
	for(i = 0; at_rst[i]!='\0'; i++){
		USART2->DR = at_rst[i];//送出AT+RST(回车)
		while((USART2->SR & 0x40) == 0);//直到发送成功
		}
	delay_ms(3000);
	if(ResetWifi){       //重置wifi无线连接
		for(i = 0; at_cwmode[i]!='\0'; i++){
			USART2->DR = at_cwmode[i];//送出AT+CWMODE=1(回车)
			while((USART2->SR & 0x40) == 0);//直到发送成功
		}
		delay_ms(2000);
		for(i = 0; at_cwjap[i]!='\0'; i++){
			USART2->DR = at_cwjap[i];//送出AT+CWJAP_DEF="Redmi","87654321"
			while((USART2->SR & 0x40) == 0);//直到发送成功
		}
		delay_ms(10000);
		for(i = 0; at_cipmux[i]!='\0'; i++){
			USART2->DR = at_cipmux[i];//AT+CIPMUX=0
			while((USART2->SR & 0x40) == 0);//直到发送成功
		}
		delay_ms(2000);
	}
	for(i = 0; at_cipstart[i]!='\0'; i++){
		USART2->DR =at_cipstart[i];//AT+CIPSTART="TCP","192.168.43.33",8080(回车)
		while((USART2->SR & 0x40) == 0);//直到发送成功
	}
	delay_ms(2000);
	for(i = 0; at_cipmode[i]!='\0'; i++){
		USART2->DR = at_cipmode[i];//AT+CIPMODE=1
		while((USART2->SR & 0x40) == 0);//直到发送成功
	}
	delay_ms(800);
	for(i = 0; at_cipsend[i]!='\0'; i++){
		USART2->DR = at_cipsend[i];//AT+CIPSEND 开启透传
		while((USART2->SR & 0x40) == 0);//直到发送成功
	}
	delay_ms(800);
	UART_send_string("wifi connected! \n", USART2);
	IS_unvantra = 1;  //开启透传
}

记遇到的一些问题

  • esp8266要与开发板共地,否则可能会导致初始化失败
  • 每次发送一条指令后使用delay_ms()来给定初始化反应的时间
  • 使用AT+CWJAP_DEF不能正确的连接到本地热点,同样的功能可以用串口通信实现,原因未知?
  • 2
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值