(1)引脚定义:
Function Description
URXD UART_RXD,接收
UTXD UART_TXD,发送
RST 外部Reset信号,低电平复位,高电平工作(默认高)
GND GND
VCC 3.3V,模块供电
GPIO 0 工作模式选择:悬空:FlashBoot,工作模式;下拉:UARTDownload,下载模式
CH_PD 高电平工作;低电平模块供电关掉
GPIO 2 (1)开机上电时必须为高电平,禁止硬件下拉;(2)内部默认已拉高
2、接线说明:
(1)与串口连接
串口模块 ESP8266模块
VCC VCC(3.3V) &CH_PD
TXD URXD
RXD UTXD
GND GND
(2)接线方式
STM32F407如何与ESP8266连接
注:本代码只使用了GND,VCC,CH_PD,RX,TX这些引脚
运用串口3实现与WIFI_ESP8266实现通信
usartT3_ RX --------------- PB.11 (该为串口3的引脚)
usartT3_ TX --------------- PB.10
连接方式
ESP8266 STM32F407
GND ---------------------> GND
VCC ---------------------> 3.3V
TX ---------------------> usartT3_ RX(PB.11)
RX ---------------------> usartT3_ TX(PB.10)
CH_PD ---------------------> 3.3V
具体连接方式如下图:
delay_init(168);
Esp8266_GPIO_Init();
此处根据一中的连接方式可知,VCC、CH_PD分别接3.3V直流电压,GND与单片机共地即可需要配置的仅有TX和RX两个接口。其中,TX配置在usartT3_ RX(PB.11),设置为浮空输入模式GPIO_OType_OD,用于串口输入指令;RX配置在usartT3_ TX(PB.10),设置为推挽输出模式GPIO_OType_PP,用于接收和查看WIFI模块的回复状态和配置情况。
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
注:打开串口调试助手时需设置正确的波特率,否则串口将无法使用
ESP8266_InitMODE( ENUM_Net_ModeTypeDef ATMODE , ENUM_Net_Style_ModeTypeDef ATmodestyle , char * pSSID , char * pPassWord ,char * startclose,char *portnumber , char * IPADD)
例如:ESP8266_InitMODE(STA,Server,"DQXY","07452856295","1","8080","192.168.97.10")
ENUM_Net_ModeTypeDef ATMODE,为配置模式,共三种模式,模式一为STA(发送模式),模式二为AP(接收模式),模式三为STA\AP共存模式,此程序设置的为模式一STA模式。
ENUM_Net_Style_ModeTypeDef ATmodestyle为模式设置共两种模式,Server为设置服务器模式,也可设置为客户端(Client)模式即将Server改为Client即可。需要注意的是配置为服务器或客户端之后,WIFI模块将作为客体或主体被使用功能类似,看使用者需要进行选择。
pSSID为配置需要连接的WIFI名称,pPassWord 为配置需要连接的WIFI密码,设置正确之后能够接入需要连接的网络。
Startclose为开启或关闭Server模式bool ESP8266_CIPSERVER ( char * startclose,char *portnumber )//AT+CIPSERVER=
portnumber为端口号,端口号作为信号连接的线路端口存在,使用网络调试助手调试时需设置正确的端口号才能够与模块建立连接,使用sever模式时,自己去配置端口号 如8080;\\使用client模式时 看网络助手的端口号 ,然后进行填写。
IPADD为IP地址,在Client模式下需要建立TCP连接,此时就要根据欲加入网络的IP地址填写输入数据建立连接,用网络调试助手形成的模拟ip:char * IPADD只有用client模式时需要\\启用sever模式时不需要填写 。
注:以下函数需要WIFI模块配置成功之后才能使用,即需与对应网络成功建立连接才能使用。
while(1)
{
if(ESP8266_ReceiveString()!=0)
{
Usart_SendString(USART1,ReceiveString);
receive_length = strlen(ReceiveString);
memset(ReceiveString,0,receive_length);
receive_length = 0;
}
ESP8266_SendString("123456");
}
Usart_SendString(USART1,ReceiveString)本函数用于将接收到的数据发送数据到串口,ReceiveString为接收内容的指针。
receive_length = strlen(ReceiveString),本函数用于获取发送内容的字节长度。
memset(ReceiveString,0,receive_length),用于将指针数据清空,以便下次继续接收数据。
receive_length = 0将数据长度置零。
ESP8266_SendString("123456")本函数用于发送数据给接入设备。“123456”为发送数据内容,可任意更改。
(一)ESP8266_InitMODE( ENUM_Net_ModeTypeDef ATMODE , ENUM_Net_Style_ModeTypeDef ATmodestyle , char * pSSID , char * pPassWord ,char * startclose,char *portnumber , char * IPADD)函数细化:
进入本函数之后
(1)对WIFI模块进行测试,测试函数为ESP8266_AT_Test();
输入AT若输出OK说明测试成功
(2)AT测试成功直接之后开始复位WIFI模块,复位函数为ESP8266_ATRST_Test();
输入AT+RST若输出OK说明复位成功
(3)(1)和(2)两函数测试成功之后通过函memset(USART3_RX_BUF,0,USART3_RX_STA);
将串口接收指针置零,开始函数while(! ESP8266_ATCWMODE_Test( ATMODE))等待模式数据传入ATMODE为指针,在主函数中设置传入。
进入函数ESP8266_ATCWMODE_Test( ATMODE)之后根据写入数据,选择配置三种模式,对WIFI模块输入AT+CWMODE=1或AT+CWMODE=2或AT+CWMODE=3配置STA或AP或STA+AP模式,输出OK即为配置成功。如
(4)模式配置成功之后通过函memset(USART3_RX_BUF,0,USART3_RX_STA);
将串口接收指针置零。
判断模式进行配置如果为STA+AP或AP模式,如果是就开始函数while(! WIFI_ATCWSAP( pSSID, pPassWord)),等待WIFI模块创建WIFI。
进入函数WIFI_ATCWSAP( pSSID, pPassWord)之后,根据自己设置的WIFI名称pSSID和密码pPassWord对WIFI模块输入指令AT+CWSAP="pSSID","pPassWord",1,4指令,输出OK说明设置成功。例如:AT+CWSAP="ESP_8266","123456789",1,4 设置模块的热点名称和密码,设置成功之后可通过手机、电脑等网络设备检索到名为ESP_8266的WIFI,并可以通过输入密码12345789连接WIFI模块建立的WIFI。
(5)继续判断模式是否为STA+AP或STA模式如果是就开始函数while(! ESP8266_CWJAP ( pSSID, pPassWord))等待WIFI模块接入其他无线网络。
进入函数ESP8266_CWJAP ( pSSID, pPassWord)之后,根据主函数中输入的欲加入网络的WIFI名称和密码对模块输入AT+CWJAP ="pSSID","pPassWord"指令接入对应网络,
输出OK说明连接成功。例如:AT+CWJAP ="ESP_8266","123456789",1,4 设置模块需要连接的名称和密码,设置成功之后模块可连接到名为ESP_8266密码为123456789的网络。
(6)根据主函数中输入的Server或Client判断需要的模式进行配置
(6.1)如果是Server模式通过函数while(! ESP8266_ATCIPMUX())进行多线连接设置进入函数ESP8266_ATCIPMUX()之后对模块输入AT+CIPMUX=1或0指令,配置为多线连接模式输出OK说明配置成功。
(6.2)后根据主函数中输入的开关数字(startclose)以及端口号(portnumber),通过函数while(! ESP8266_CIPSERVER(startclose,portnumber))配置Server打开与关闭以及端口号。进入函数ESP8266_CIPSERVER(startclose,portnumber)之后
对模块输入指令AT+CIPSERVER=startclose,portnumber输出OK说明配置成功。
例如ESP8266_CIPSERVER(1,8080)即为设置打开服务器模式,端口号为8080
(7)判断是否设置为Client模式
(7.1)如果是通过函数while(! ESP8266_ATCIPMUX())配置为多线连接模式配置方式同(6.1)。
(7.2)配置成功后通过函数(! ESP8266_CIPSTART( IPADD, portnumber))配置所需要建立TCP连接的网络的IP地址和端口号,
进入函数ESP8266_CIPSTART( IPADD, portnumber)后对模块输入AT+CIPSTART=0,TCP,IPADD,portnumber指令输出OK说明配置成功,即可作为客户端接入IP地址为IPADD,端口号为portnumber的TCP
(7.3)连接成功后通过函数ESP8266_CIPSTO();设置超时时间对模块输入AT+CIPSTO=5000设置超时时间为5000,输出OK说明配置成功。
(7.4)超时时间设置成功后进入函数ESP8266_CIFSR();获取模块IP地址并将其打印到串口上,以便服务器检索与调配,通过对WIFI模块输入AT+CIFSR指令可输出本地IP地址
(8)判断模式是否为STA+AP或STA模式如果是通过函数while(ESP8266_CIPSTATUS()!=3);判断当前WIFI模块连接情况,(若无连接将一直循环直到连接成功)进入函数ESP8266_CIPSTATUS()对WIFI模块输入指令AT+CIPSTATUS获取当前连接情况,若有连接将输出STATUS:3,并输出对应连接的IP地址和端口号
以上配置通过说明成功建立连接!
(2.1)进入该函数之后,首先将shuzu指针的内容发送给串口三,后通过num_length = sizeof(shuju)得到发送数组长度
(2.2)通过sprintf ( cCmd, "AT+CIPSEND=0,%d\r\n",num_length )向WIFI模块输入AT+CIPSEND=0,num_length指令,其中0为第几个连接,num_length为数据长度,并开始输入发送内容并将串口三中收到的数据发送出去,输出OK说明发送完成
注意事项:
(1)学习wifi——ESP8266时,请先掌握好基础知识,比如 AP,STA是用来干什么的、服务器和客户端的区别(2)需要一定的C语言基础,能看懂基本函数的用法,对STM32有一定接触和了解(3) 使用本代码时,请先掌握好网络调试助手的用法,懂得基本IP地址以及相关协议的意义(4) 使用client时,每一次更改了模式(AP STA),需要重新配置一遍网络调试助手的虚拟网络IP和端口号 (网络调试助手的模式应该选择为TCP sever)(5) 使用sever时,请记得去自行配置好网络调试助手,(网络调试助手的模式应该选择为TCP client ,远程主机IP看串口打印出来的IP ,端口号是自己写入程序的那一个)(6)由于代码编写程序员能力有限,基本功能可以实现,希望大家取其精华,弃其糟粕,不足之处还请见谅。