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
    评论
### 回答1: STM32F103开发ESP8266都是常见的嵌入式系统芯片,其中STM32F103是ST公司推出的32位微控制器,而ESP8266则是一个高性能的Wi-Fi芯片。STM32F103开发ESP8266之间的通信可以通过串口通信实现,具体步骤如下: 1.使用STM32F103开发的外部串口或者软件串口来连接ESP8266的串口,即将ESP8266的RXD引脚连接到STM32F103开发的TXD引脚上,将ESP8266的TXD引脚连接到STM32F103开发的RXD引脚上。 2.在STM32F103开发上编写串口驱动程序,通过配置串口通信参数和发送数据,来实现和ESP8266的通信。 3.使用AT指令来控制ESP8266,AT指令是ESP8266的默认命令集,可以通过串口向ESP8266发送AT指令,来实现对ESP8266的控制和配置。 4.在STM32F103开发上编写控制程序,通过发送AT指令,来控制ESP8266实现需要的功能,比如连接Wi-Fi网络、发送和接收数据等等。 需要注意的是,在使用ESP8266时,需要根据具体的应用场景和需求,选择合适的ESP8266模块和驱动程序,同时还需要对ESP8266的技术特点和使用方法有一定的了解和掌握,以充分发挥其功能和性能。 ### 回答2: 在将STM32F103开发ESP8266无线Wi-Fi模块连接时,首先需要确认开发ESP8266的引脚对应关系,确保连接正确。 然后,在STM32F103的代码中,需要使用串口通信方式(例如USART或UART)与ESP8266进行通信。首先需要将串口引脚连接到ESP8266,然后通过代码设置波特率和串口数据传输格式等参数来实现与ESP8266的通信。 在代码中,还需通过AT命令向ESP8266发送指令,如设置Wi-Fi网络名称、密码以及与服务器的连接等。这些指令可以通过串口发送,同时需要进行数据解析和处理。 为了便于开发和调试,在STM32F103代码中还可以加入LED指示灯和调试信息输出等功能,以便于观察系统运行状态。同时,可能还需要进行网络协议处理等其他工作,具体操作与应用场景相关。 综上,驱动ESP8266无线Wi-Fi模块需要对串口通信、AT指令、数据解析等方面进行处理。同时还需要了解并适应应用场景要求,做好相关配置和功能性开发。 ### 回答3: STM32F103是一种高性能的嵌入式系统开发,可以与ESP8266模组相组合,以实现物联网设备的开发和应用。要驱动ESP8266模组,首先需要确定使用的通信接口。ESP8266可以通过UART、SPI、I2C等接口与STM32F103相连。其中,UART接口是最为常用的连接方式,因为它简单、易用,可以很快地实现数据传输和通信协议。 在使用UART接口连接ESP8266模组和STM32F103开发时,需要创建一个串口通信接口,并设置相应的波特率、数据位、停止位和校验位等参数。例如,可以使用STM32F103开发的USART1或USART2串口通道,设置通信参数为波特率9600、数据位8位、停止位1位、无校验位,以此搭建串口设备。 接下来,需要编写ESP8266的相关驱动程序,实现ESP8266模組的联网功能。常见的ESP8266驱动程序库有ESP8266_NONOS_SDK和ESP8266_RTOS_SDK等。这些库可以帮助开发者快速有效地实现ESP8266的驱动,支持WiFi连接、数据传输、远程控制等应用。 在编写完驱动程序后,需要在STM32F103开发上编写应用程序,实现ESP8266模组和其他传感器、设备的联动控制。例如,可以通过ESP8266模组获取云端数据,通过STM32F103控制继电器、风扇、电机等硬件设备的操作。 综上所述,驱动ESP8266模组需要涉及到多个方面,包括通信接口的选择、驱动程序的编写、应用程序的开发等。只有在不断的实践中,才能更好地理解、掌握这些技术。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值