认识模块
ESP8266是一种低成本的Wi-Fi模块,可用于连接物联网设备,控制器和传感器等。它具有小巧、高度集成和低功耗的特点,因此在物联网应用中被广泛使用。ESP8266模块由Espressif Systems开发,具有单芯片的封装和多种功能,包括Wi-Fi网络连接、GPIO控制、PWM控制和模拟输入/输出等。ESP8266模块支持多种编程语言和开发工具,包括C语言、Lua脚本和Arduino开发环境。ESP8266模块的一个优点是它的成本相对较低,因此可以用于低成本的物联网项目。另外,由于它具有小巧的封装和低功耗的特性,因此它可以在嵌入式系统和移动设备中使用。
总之,ESP8266模块是一种功能强大、低成本、小巧、低功耗的Wi-Fi模块,非常适合用于物联网和其他嵌入式应用中。
模块与单片机的连接
我在本次开发中选择的是模块型号为ESP8266-01S,与ESP8266一样,他们都有8个引脚,我们只用得到其中的4个引脚,分别是:
-
VCC:电源引脚,接收3.3V的直流电源。(也可以接5V)
-
VCC:电源引脚,接收3.3V的直流电源。
-
TXD:串行传输引脚,用于发送串行数据。
-
RXD:串行接收引脚,用于接收串行数据。
而唯一与ESP8266不同的是,esp8266需要接第5个引脚EN,接在高电平上。
在与STM32连接时,VCC接3.3V或5V,GND接地,TX接在32单片机的RX上,RX接在32单片机的TX上。我使用的32单片机型号为STM32F407ze,通过查找资料可知,其内部的电路图大致如下图所示:
我选择把WiFi模块连接到P6上,以下是我的实物连接图(下面那个是我连接的OLED模块,不用理会):
接下来就是敲代码让他运行起来了。
代码部分
串口的定义
首先是定义串口,定义串口1是为了将串口3的收到数据发给电脑看。定义串口3用于WiFi模块的使用。
uart1.c
这段代码是用于配置STM32芯片上的UART1串口,并定义了一个函数 send_sring 用于通过UART1发送字符串。
#include "uart.h"
void UART1_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
//初始化GPIOA的时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
//初始化串口1的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
//通过结构体初始化串口引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //配置的引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度为100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //上下拉电阻:无上下拉电阻
GPIO_Init(GPIOA, &GPIO_InitStructure);
//选择引脚复用功能
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
//配置串口相关属性
USART_InitStructure.USART_BaudRate = 115200; //波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //数据位
USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止位
USART_InitStructure.USART_Parity = USART_Parity_No; //校验位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无流控
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //接收发送模式
USART_Init(USART1, &USART_InitStructure);