首页 » 科学 » ATK-ESP8266模块运用方法_串口_模块

ATK-ESP8266模块运用方法_串口_模块

admin 2024-12-11 13:58:27 0

扫一扫用手机浏览

文章目录 [+]

ATK-ESP8266是ALIENTEK推出的一款高性能的UART-WiFi(串口-无线)模块,ATK-ESP8266模块采取串口(LVTTL)与MCU(或其他串口设备)通信,内置TCP/IP协议栈,能够实现串口与WIFI之间的转换。

通过ATK-ESP8266模块,传统的串口设备只须要大略的串口配置就可以通过网络(WIFI)传输自己的数据。

ATK-ESP8266模块运用方法_串口_模块 ATK-ESP8266模块运用方法_串口_模块 科学

ATK-ESP8266模块支持LVTTL串口,兼容3.3V和5V单片机系统。
模块支持串口转WIFI STA、串口转AP和 WIFI STA+WIFI AP的模式,从而快速构建串口-WIFI 数据传输方案。

ATK-ESP8266模块运用方法_串口_模块 ATK-ESP8266模块运用方法_串口_模块 科学
(图片来自网络侵删)

ATK-ESP8266 模块非常小巧(29mm19mm),模块通过 6个2.54mm间距的排针与外部连接,模块外不雅观如图1所示:

图1 ATK-ESP8266 模块外不雅观图

图1中,从左到右,各引脚的详细描述如表1所示:

表1 ATK-ESP8266模块各引脚功能描述

序号

名称

解释

1

VCC

电源(3.3V~5V)

2

GND

电源地

3

TXD

模块串口发送脚(TTL 电平,不能直接接RS232电平!),可接单片机的RXD

4

RXD

模块串口吸收脚(TTL 电平,不能直接接RS232电平!),可接单片机的TXD

5

RST

复位(低电平有效)

6

IO_0

用于进入固件烧写模式,低电平是烧写模式,高电平是运行模式(默认状态)

2.STM32F103C8T6串口引脚

STM32F103C8T6有三组串口,分别为USART1、USART2、USART3,详细引脚如表2所示。

表2 STM32F103C8T6串口引脚对应表

引 脚

串 口

PA9

USART1_TX

PA10

USART1_RX

PA2

USART2_TX

PA3

USART2_RX

PB10

USART3_TX

PB11

USART3_RX

在本例中用到两个串口,一个是USART1,用于烧写程序和串口通信;另一个是USART2,用于完成ATK-ESP8266模块的串口通信。

3.ATK-ESP8266与STM32F103C8T6连线

ATK-ESP8266内容已经烧写好相应的固件,以是直接用就可以,连线如表3所示。

表3 ATK-ESP8266与STM32F103C8T6连线表

ATK-ESP8266

STM32F103C8T6

VCC

VCC(3.3V或5V)

GND

GND

RXD

PA2(USART2_TX)

TXD

PA3(USART2_RX)

4.USART2的处理

USART2的处理包括两大步,第一步是串口的定义;第二步是串口通信的处理。

第一部分串口的定义紧张完成两个任务:①串口的初始化②串口2中断做事程序

① 串口的初始化

//串口2初始化

void USART2_init(u32 bound)

{

//GPIO端口设置

GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO构造体

USART_InitTypeDef USART_InitStructure; //定义USART构造体

NVIC_InitTypeDef NVIC_InitStructure; //定义NVIC构造体

//本例中利用串口2,所对应的引脚为PA2和PA3

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //使能USART2时钟

//USART2_TX GPIOA2

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA2

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速率为50MHz

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA

//USART2_RX GPIOA3初始化

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入

GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA

//Usart2 NVIC 配置

NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//抢占优先级0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能

NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器

//USART2 初始化设置

USART_InitStructure.USART_BaudRate = bound;//串口波特率

USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式

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(USART2, &USART_InitStructure); //初始化串口2

USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接管中断

USART_Cmd(USART2, ENABLE); //使能串口2

}

②.串口2中断做事程序

串口2中断做事程序可以完成吸收数据的处理

void USART2_IRQHandler(void) //串口2中断做事程序

{

u8 Res=0;

Res = USART_ReceiveData(USART2);

Uart2_Buf[First_Int] = Res; //将吸收到的字符串存到缓存中

First_Int++; //缓存指针向后移动

if(First_Int >= Buf2_Max) //如果缓存满,将缓存指针指向缓存的首地址

{

First_Int = 0;

}

}

第二部分串口通信的处理紧张完成串口数据的发送。

在本例中,紧张的任务是把系统的数据发送给上位机,因此只定义发送数据就可以了。
发送数据包括两个部分:①发送采集数据;②发送命令。

① 发送采集数据

采集数据用字符串来存储,因此串口2须要发送的便是字符串数据。

//发送字符串

void UART2_SendString(char s)

{

while(s)//检测字符串结束符

{

while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);

USART_SendData(USART2 ,s++);//发送当前字符

}

}

② 发送命令

串口2发送命令后,ATK-ESP8266会返回对应的字符串,因此,在发送命令之前,须要选定义一个吸收缓冲区。

char Uart2_Buf[Buf2_Max];//串口2吸收缓存

同时还须要定义一个函数来清空缓冲区:

//打消串口缓存数据

void CLR_Buf(void)

{

u16 k;

for(k=0;k<Buf2_Max;k++) //将缓存内容清零

{

Uart2_Buf[k] = 0x00;

}

First_Int = 0; //吸收字符串的起始存储位置

}

定义好缓冲区之后,就可以完成发送命令的功能了。

//发送命令

void UART2_Send_Command(char s)

{

CLR_Buf(); //清空吸收数据的buffer

UART2_SendString(s); //发出字符串

UART2_SendString("\r"); //再自动发送 \r\n两个字符

}

发送命令之后,串口会吸收到系统的返回值,这个返回值须要验证,验证的函数为:

//探求字符串

//返回:1 已找到 0 未找到

u8 Find(char a)

{

if(strstr(Uart2_Buf, a)!=NULL)

{

return 1;

}

else

{

return 0;

}

}

至此,串口2就已经处理好了。

5.ATK-ESP8266模块的处理

ATK-ESP8266模块的处理包括三步:第一步ESP8266模块初始化;第二步ESP8266数据的传输;第三步ESP8266数据的吸收。

第一步ESP8266模块初始化

/设置WIFI模块模式

//多连接 AP 接入点名称 密码 通道号 WPA2_PSK

signed ESP8266_wifi_Init(void)

{

u8 ret;

ret = UART2_Send_AT_Command("AT\r\n","OK",3,100); //检测模块是否存在

if(ret == 0)

{

return -1;

}

ret = UART2_Send_AT_Command("AT+CWMODE=2\r\n","OK",3,100); //设置模块为AP模式

if(ret == 0)

{

return -2;

}

ret = UART2_Send_AT_Command("AT+CWSAP=\"wifi\",\"12345678\",5,3\r\n","OK",3,100); //设置接入点名称 密码 通道号 WPA2_PSK

if(ret == 0)

{

return -3;

}

ret = UART2_Send_AT_Command("AT+CIPMUX=1\r\n","OK",3,100); //设置为多连接

if(ret == 0)

{

return -4;

}

ret = UART2_Send_AT_Command("AT+CIPSERVER=1,5000\r\n","OK",3,100); //设置模块为TCP做事器,端口号为5000

if(ret == 0)

{

return -5;

}

ret = UART2_Send_AT_Command("AT+CIPSTO=0\r\n","OK",3,100); //设置超时时间为0

if(ret == 0)

{

return -6;

}

return 0;

}

ATK-ESP8266初始化须要通过USART2来发送AT命令来完成,因此还须要定义一个UART2_Send_AT_Command函数。

//发送AT指令

//b:须要发送的字符串

//a:查找是否返回的字符串

//wait_time:发送的次数

//interval_time:每次等待的韶光

u8 UART2_Send_AT_Command(char b,char a,u8 wait_time,u32 interval_time)

{

u8 i;

i = 0;

while(i < wait_time) //如果没有找到 就连续再发一次指令 再进行查找目标字符串

{

UART2_Send_Command(b);//串口2发送 b 字符串 他会自动发送\r\n 相称于发送了一个指令

delay_ms(interval_time); //等待一定韶光 传50的话便是 5020ms = 1秒

if(Find(a)) //查找须要应答的字符串 a

{

return 1;

}

i++;

}

return 0;

}

第二步ESP8266数据的传输

//发送数据

//buf:须要发送的字符串

void ESP8266_send_data(char buf)

{

UART2_Send_AT_Command("AT+CIPSEND=0,14\r\n",">",3,50); //发送通道号,以及须要发送的字符个数

delay_ms(200);

UART2_SendString(buf);

delay_ms(100);

}

第三步ESP8266吸收数据的处理

//吸收来自上位机的掌握指令

//查询返回值是否为"XXXXXX",如果是,点亮LED灯。

void Receive_data(void)

{

if(Find("XXXXXX") == 1)

{

LED=0

}

}

6.头文件的处理

#ifndef __WIFI_H

#define __WIFI_H

#include "sys.h"

#define Buf2_Max 100 //串口2缓存长度

void USART2_init(u32 bound);

void CLR_Buf(void);

void UART2_SendString(char s);

void UART2_Send_Command(char s);

u8 Find(char a);

u8 UART2_Send_AT_Command(char b,char a,u8 wait_time,u32 interval_time) ;

signed ESP8266_wifi_Init(void);

void ESP8266_send_data(char buf);

#endif

7.测试实例程序运行

测试实例的紧张功能为利用光敏传感器采集光照强度,当光照强度高于某一设定值时,LED灯亮,当光照强度低于某一设定值时,LED灯灭。

串口和ATK-ESP8266向上位机传送数据。

①测试实例的硬件清单如表4所示。

表4 测试实例硬件清单

STM32F103C8T6引脚

元件

功能描述

PA9

USART1_TX

USB转串口TTL(USART1)连线

PA10

USART1_RX

VCC5.0

USART1_VCC

GND

USART1_GND

PA2

ATK-ESP8266_RXD

ATK-ESP8266(USART2)

连线

PA3

ATK-ESP8266_TXD

VCC3.3

ATK-ESP8266_VCC

GND

ATK-ESP8266_GND

PC13

LED1

LED连线

VCC3.3

阳极

GND

阴极(接电阻)

PB0

光敏传感器

光敏传感器连线

VCC3.3

VCC

GND

GND

硬件实物如图2所示。

图2 硬件实物图

②查看固件ATK-ESP8266的IP地址

采取USB转串口芯片与ATK-ESP8266进行连接,如图3所示。

图3 USB转串口芯片与ATK-ESP8266相连

连好后接在电脑的USB口上,打开串口助手,如图4所示。
①④⑤⑥⑦⑧

图4 USB转串口芯片与ATK-ESP8266相连

发送AT命令到串口,会得到应答OK,如图5所示。

图5 发送AT命令

图6 发送AT+CIFSR命令

图6中③处便是ATK-ESP8266模块的IP地址。

③ 完成STM32与网络助手的通信

这一部分须要4步来完成。
第一步,将ATK-ESP8266模块连回STM32芯片;第二步,烧程序;第三步,电脑与ATK-ESP8266模块wifi相连,如图7所示。

图7 连接wifi

第四步,打开网络调试助手,设置为TCP Client办法,设置好查到的IP地址,以及端口为5000(程序中定义为5000),点击连接,如图中①所示,连接按钮变为关闭,②处显示为吸收到的数据。

图8 吸收数据显示

以上是STM32 中ATK-ESP8266模块的事情过程。
欢迎共同谈论,纠错。
期待关注、点赞、转发。
粉丝朋友可直接私信索要干系资料(项目源码)。

标签:

相关文章

数字时代,IT行业发展的新趋势与挑战

随着信息技术的飞速发展,我们正步入一个崭新的数字时代。在这个时代,IT行业成为推动社会进步的重要力量。本文将从新趋势、挑战以及应对...

科学 2024-12-29 阅读0 评论0

你理解芯片吗?_芯片_功效

芯片图片首先,一提到芯片,你会想到什么?会想到一个四方的且带着好多脚的小薄片是吗?会想到它是手机、电脑的大脑,但详细什么情形并不是...

科学 2024-12-29 阅读0 评论0