目录
引言:
本篇适用于刚接触esp8266的新手,esp8266运用于很多场景,这里是基于esp8266实现最基础的功能,后续的智能家居也是基于这个功能逐步延伸
一、配置esp8266
烧录程序之后,开始配置WiFi模块 。(可以搜索相关博客,记载会比这里详细,这里就不在赘述)
连接方式:
esp8266 | USB转TTL模块 |
GND | GDN |
VCC | 5V |
TX | RX |
RX | TX |
注:我这里使用的是正点原子的模块,所以电源接的是5V,一般大家使用esp-01s直接接3V3就行
总体浏览:
这里我们直接根据上图的AT指令进行配置,手机ip可以在设置中寻找,端口号可以随意设置。
详细步骤如下:
1、正确连接后打开串口助手,这里使用的是STC-ISP串口,输入AT,返回OK
2、根据上图继续输入指令,进行基本配置。
在输入完AT+CWJAP后,会连接到手机热点,可通过手机设置里的热点查看到有esp8826设备连接。
3、进入透传模式
在连接完手机热点后,我们在手机上下载一个网络调试精灵APP,打开APP,点击TCP服务端。
然后进入,点击右下角的+号进行添加服务端
名称和端口均可自定义,在这里我定义端口为8080,在设置中搜索手机IP地址(需要注意,手机IP地址每天都会变化,所以后续又重启这个程序需要改一下IP地址),我这里是10.179.22.40,故输入指令AT+CIPSTART="TCP","10.179.22.40",8080,此时串口窗口显示为
手机上显示已连接
现在输入AT+CIPMODE=1开启透传模式,此时手机发送数据,串口可以接收到,如图
上面那行命令只能实现单工通信,此时再输入AT+CIPSEND,可以实现双工通信,即在串口发送端发送数据,手机也能接收。
4、断电重新进入透传
到这一步,esp8266的基本配置已经完成。现在我们需要把esp8826与USB转TTL模块断开接到面包板上,这就面临着一次断电和一次重新上电的情况,为了避免重复配置进入透传模式,我们输入AT+SAVETRANSLINK=1,"10.179.22.40",8080,"TCP",100,这样可以保证下一次上电直接进入透传。其中“100”代表速率,范围为1~7200s,可在此范围内任意设置。
二、电路板连接
在进行完esp8826的基本配置后,我们进行面包板的电路连接,如下表
EPS8266 | stm32f103 |
RX | A9 |
TX | A10 |
GND | GND |
VCC | 5V |
整体:
注意:一定要有类似蓝色的这根供电线来给WiFi模块供电,否则无法正常运行
三、初始化
完成好电路板连接后,开始写代码,首先进入初始化配置
1、LED初始化:
void led() { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); }
2、串口初始化 :
void USART1_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); 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); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_Cmd(USART1, ENABLE); }
3、定义全局变量
uint16_t receivedData=0;
四、主程序
int main() { USART1_Config(); led(); while(1) { if(receivedData==0) { GPIO_SetBits(GPIOA,GPIO_Pin_0); } else { GPIO_ResetBits(GPIOA,GPIO_Pin_0); } } }
五、烧录
将所有程序写好烧录进板子,可以观察到esp8266自动连接手机WiFi热点并且进入透传模式,此时在网络调试助手上输入‘1’,LED亮,输入‘0’,LED灭