打印
[MM32软件]

【灵动微电子MM32F5330测评】ESP12F WIFI模块实现TCP客户端功能

[复制链接]
429|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
forgot|  楼主 | 2024-7-17 16:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1、前面测试了F5333的GPIO和SPI,这里准备测试一下通用异步收发器UART,实际板子上的USART1已经做成了串口调试打印功能,可以往PC端打印程序调试信息。通用异步收发器是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来与PC进行通信,包括与监控调试器和其它器件,如EEPROM通信等等,也是一个非常常用和易用的通讯方式。

2、看手上有一个ESP-12F的WIFI模块,ESP-12F 模块支持标准的 IEEE802.11 b/g/n 协议,完整的 TCP/IP 协议栈。这个模块的核心处理器是ESP8266芯片,可以方便地进行二次开发,接入云端服务, 只需通过SPI/SDIO接口或UART接口即可作为Wi-Fi适配器,应用到基于任何微控制器设计中,所以正好采用MM32F5330做一个WIFI tcp客户端与PC连接测试。

3、在硬件连接方面先是将模块的TX、RX、RESET脚与板子的UART2相对应连接。初始化UART2,波特率为115200,长度为8位,1位停止位,无校验、无流控。

4、添加进来原先写好的esp8266.h、esp8266.c,还有tcp.h、tcp.c,分别是wifi模块的功能函数还有tcp客户端的功能函数。
写入wifi信息:
#define User_ESP8266_SSID     "wifi003"        //wifi名
#define User_ESP8266_PWD     "88888888"      //wifi密码
写入tcp server信息:
#define User_ESP8266_TCPServer_IP     "192.168.2.101"   //服务器IP
#define User_ESP8266_TCPServer_PORT   "8888"                      //服务器端口号
5、编写Esp_UART_Init();和ESP8266_Init();初始化函数,放到main的里面。
void UART2_Configure(uint32_t Baudrate)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    UART_InitTypeDef UART_InitStruct;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART2, ENABLE);

    UART_StructInit(&UART_InitStruct);
    UART_InitStruct.BaudRate      = Baudrate;
    UART_InitStruct.WordLength    = UART_WordLength_8b;
    UART_InitStruct.StopBits      = UART_StopBits_1;
    UART_InitStruct.Parity        = UART_Parity_No;
    UART_InitStruct.HWFlowControl = UART_HWFlowControl_None;
    UART_InitStruct.Mode          = UART_Mode_Rx | UART_Mode_Tx;
    UART_Init(UART2, &UART_InitStruct);

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

    GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_7);
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_7);

    GPIO_StructInit(&GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_2;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
    GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_StructInit(&GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_3;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStruct);

    UART_Cmd(UART2, ENABLE);
}
这是主要的串口发送函数接口,只需要将USART_printf 函数中的串口发送采用MM32F5330的串口2发送指令即可。
#define ESP8266_USART(fmt, ...)  USART_printf (1,fmt, ##__VA_ARGS__)  

6、编写ESP8266_STA_TCPClient_Test();功能函数实现tcp的连接和数据的发送;
void ESP8266_STA_TCPClient_Test(void)
{
    uint8_t res;
                char str[100]={0};
       
                ESP8266_Rst();
                PLATFORM_DelayMS(2000);
                ESP8266_USART("AT+RESTORE\r\n");
                PLATFORM_DelayMS(1000);
                ESP8266_USART("AT\r\n");
                PLATFORM_DelayMS(1000);
                ESP8266_USART("AT+CWMODE=1\r\n");
                PLATFORM_DelayMS(1000);
    ESP8266_USART("AT+CWJAP=\"wifi003\",\"88888888\"\r\n");
                PLATFORM_DelayMS(20000);
                ESP8266_USART("AT+CIPMUX=0\r\n");
                PLATFORM_DelayMS(1000);
                ESP8266_Link_Server(enumTCP, User_ESP8266_TCPServer_IP, User_ESP8266_TCPServer_PORT, Single_ID_0);
                PLATFORM_DelayMS(1000);
                ESP8266_USART("AT+CIPMODE=1\r\n");
                PLATFORM_DelayMS(1000);
                ESP8266_USART("AT+CIPSEND\r\n");
                PLATFORM_DelayMS(2000);
               
                while(1){
                        sprintf (str,"bbs.21ic.com\r\nid:forgot\r\n");
                        ESP8266_SendString ( ENABLE, str, 0, Single_ID_0 );
                        PLATFORM_DelayMS(2000);       
                }
}

7、在192.168.2.101 PC上打开TCP SERVER,开端口8888进行监听;
8、可是看到连接成功后,顺利发送TCP数据到PC端的TCP/UDP 网络调试助手。

这是第一次使用 Star-MC1 内核的 MCU 产品,可以看得出MM32F5330比较擅长在工业控制和家电控制领域。需要提出的是为什么demo例程的功能函数注释那么少,可能对于第一次使用的新手不是很友好。

使用特权

评论回复
沙发
shenxiaolin| | 2024-7-22 17:04 | 只看该作者
感谢分享,辛苦了

使用特权

评论回复
板凳
shenxiaolin| | 2024-7-29 21:08 | 只看该作者
感谢分享

使用特权

评论回复
地板
suncat0504| | 2024-7-30 20:43 | 只看该作者
我也是常用UART作为ESP8266和其它单片机的通讯方式,简单有效。

使用特权

评论回复
5
suncat0504| | 2024-7-30 20:44 | 只看该作者
有人试过使用其它外设和ESP通讯吗?比如SPI、I2C等。

使用特权

评论回复
6
lihuami| | 2024-8-4 09:54 | 只看该作者
在ESP12F模块上配置WIFI网络参数,包括SSID、密码等,确保模块能够连接到指定的WIFI网络。

使用特权

评论回复
7
timfordlare| | 2024-8-4 10:55 | 只看该作者
使用ESP12F WiFi模块实现TCP客户端功能是一个常见的应用场景,尤其是在物联网(IoT)项目中。

使用特权

评论回复
8
51xlf| | 2024-8-4 13:15 | 只看该作者
可以利用MM32F5330单片机和ESP12F WIFI模块建立一个有效的TCP客户端功能,适用于多种物联网和嵌入式应用场景。

使用特权

评论回复
9
wangdezhi| | 2024-8-4 15:07 | 只看该作者
ESP12F 是一款低成本、高性能的 WIFI 模块,支持 802.11 b/g/n 协议,工作在 2.4GHz 频段。它具有易于使用的 AT 指令集,通过串口与单片机进行通信。

使用特权

评论回复
10
maudlu| | 2024-8-5 10:58 | 只看该作者
将 MM32F5330 的串口引脚(如 UART1)与 ESP12F 的串口引脚相连,包括 TXD 和 RXD 引脚。同时,还需要连接电源和地引脚,确保 ESP12F 正常供电。

使用特权

评论回复
11
rosemoore| | 2024-8-5 13:12 | 只看该作者
使用AT指令设置ESP12F模块为TCP客户端模式。
使用AT指令连接到指定的服务器IP地址和端口。
使用AT指令发送和接收数据。

使用特权

评论回复
12
jonas222| | 2024-8-5 16:13 | 只看该作者
初始化WiFi模块,设置SSID和密码,连接到WiFi网络。
创建一个TCP客户端,指定服务器地址和端口号。
连接到服务器,并发送数据或接收数据。

使用特权

评论回复
13
lzbf| | 2024-8-5 18:56 | 只看该作者
在TCP客户端代码中添加异常处理逻辑,以便在网络连接出现问题时能够 处理错误。

使用特权

评论回复
14
wwppd| | 2024-8-6 10:46 | 只看该作者
使用USART发送AT指令建立TCP连接。
发送数据:
当连接建立后,使用USART发送数据到服务器。

使用特权

评论回复
15
sesefadou| | 2024-8-6 14:24 | 只看该作者
ESP12F配置步骤:
AT指令模式:
通过发送AT命令进入AT指令模式。
确认ESP12F处于命令模式,可以通过发送AT?命令来检查。
Wi-Fi配置:
发送AT+CWMODE=1命令,将ESP12F设置为Station模式。
使用AT+CWJAP="SSID","password"命令连接到Wi-Fi网络。
TCP客户端配置:
使用AT+CIPMUX=1命令开启多连接模式。
使用AT+CIPSTART="TCP","server_ip","port"命令建立TCP连接。其中server_ip是你要连接的服务器IP地址,port是服务器监听的端口号。

使用特权

评论回复
16
wangdezhi| | 2024-8-6 16:03 | 只看该作者
为了实现TCP客户端功能,需要添加esp8266.h、esp8266.c、tcp.h、tcp.c等功能文件。这些文件包含了WIFI模块的驱动函数和TCP客户端的相关操作。在代码中填入WIFI的SSID和密码以及TCP服务器的IP地址和端口号,使模块能够连接到指定的网络和服务器。

使用特权

评论回复
17
xiaoyaodz| | 2024-8-6 17:40 | 只看该作者
将ESP-12F WIFI模块的TX、RX、RESET脚连接到MM32F5330的UART2对应引脚上。UART2初始化参数包括波特率115200、数据长度8位、1位停止位、无校验和流控。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1589

主题

12298

帖子

54

粉丝