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

[复制链接]
 楼主| forgot 发表于 2024-7-17 16:08 | 显示全部楼层 |阅读模式
<
1、前面测试了F5333的GPIO和SPI,这里准备测试一下通用异步收发器UART,实际板子上的USART1已经做成了串口调试打印功能,可以往PC端打印程序调试信息。通用异步收发器是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来与PC进行通信,包括与监控调试器和其它器件,如EEPROM通信等等,也是一个非常常用和易用的通讯方式。
微信截图_20240717155217.png

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位停止位,无校验、无流控。
微信图片_20240717084943.jpg

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的里面。
  1. void UART2_Configure(uint32_t Baudrate)
  2. {
  3.     GPIO_InitTypeDef GPIO_InitStruct;
  4.     UART_InitTypeDef UART_InitStruct;

  5.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART2, ENABLE);

  6.     UART_StructInit(&UART_InitStruct);
  7.     UART_InitStruct.BaudRate      = Baudrate;
  8.     UART_InitStruct.WordLength    = UART_WordLength_8b;
  9.     UART_InitStruct.StopBits      = UART_StopBits_1;
  10.     UART_InitStruct.Parity        = UART_Parity_No;
  11.     UART_InitStruct.HWFlowControl = UART_HWFlowControl_None;
  12.     UART_InitStruct.Mode          = UART_Mode_Rx | UART_Mode_Tx;
  13.     UART_Init(UART2, &UART_InitStruct);

  14.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

  15.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_7);
  16.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_7);

  17.     GPIO_StructInit(&GPIO_InitStruct);
  18.     GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_2;
  19.     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
  20.     GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AF_PP;
  21.     GPIO_Init(GPIOA, &GPIO_InitStruct);

  22.     GPIO_StructInit(&GPIO_InitStruct);
  23.     GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_3;
  24.     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
  25.     GPIO_Init(GPIOA, &GPIO_InitStruct);

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

6、编写ESP8266_STA_TCPClient_Test();功能函数实现tcp的连接和数据的发送;
  1. void ESP8266_STA_TCPClient_Test(void)
  2. {
  3.     uint8_t res;
  4.                 char str[100]={0};
  5.        
  6.                 ESP8266_Rst();
  7.                 PLATFORM_DelayMS(2000);
  8.                 ESP8266_USART("AT+RESTORE\r\n");
  9.                 PLATFORM_DelayMS(1000);
  10.                 ESP8266_USART("AT\r\n");
  11.                 PLATFORM_DelayMS(1000);
  12.                 ESP8266_USART("AT+CWMODE=1\r\n");
  13.                 PLATFORM_DelayMS(1000);
  14.     ESP8266_USART("AT+CWJAP="wifi003","88888888"\r\n");
  15.                 PLATFORM_DelayMS(20000);
  16.                 ESP8266_USART("AT+CIPMUX=0\r\n");
  17.                 PLATFORM_DelayMS(1000);
  18.                 ESP8266_Link_Server(enumTCP, User_ESP8266_TCPServer_IP, User_ESP8266_TCPServer_PORT, Single_ID_0);
  19.                 PLATFORM_DelayMS(1000);
  20.                 ESP8266_USART("AT+CIPMODE=1\r\n");
  21.                 PLATFORM_DelayMS(1000);
  22.                 ESP8266_USART("AT+CIPSEND\r\n");
  23.                 PLATFORM_DelayMS(2000);
  24.                
  25.                 while(1){
  26.                         sprintf (str,"bbs.21ic.com\r\nid:forgot\r\n");
  27.                         ESP8266_SendString ( ENABLE, str, 0, Single_ID_0 );
  28.                         PLATFORM_DelayMS(2000);       
  29.                 }
  30. }

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

这是第一次使用 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和其它单片机的通讯方式,简单有效。
suncat0504 发表于 2024-7-30 20:44 | 显示全部楼层
有人试过使用其它外设和ESP通讯吗?比如SPI、I2C等。
lihuami 发表于 2024-8-4 09:54 | 显示全部楼层
在ESP12F模块上配置WIFI网络参数,包括SSID、密码等,确保模块能够连接到指定的WIFI网络。
timfordlare 发表于 2024-8-4 10:55 | 显示全部楼层
使用ESP12F WiFi模块实现TCP客户端功能是一个常见的应用场景,尤其是在物联网(IoT)项目中。
51xlf 发表于 2024-8-4 13:15 | 显示全部楼层
可以利用MM32F5330单片机和ESP12F WIFI模块建立一个有效的TCP客户端功能,适用于多种物联网和嵌入式应用场景。
wangdezhi 发表于 2024-8-4 15:07 | 显示全部楼层
ESP12F 是一款低成本、高性能的 WIFI 模块,支持 802.11 b/g/n 协议,工作在 2.4GHz 频段。它具有易于使用的 AT 指令集,通过串口与单片机进行通信。
maudlu 发表于 2024-8-5 10:58 | 显示全部楼层
将 MM32F5330 的串口引脚(如 UART1)与 ESP12F 的串口引脚相连,包括 TXD 和 RXD 引脚。同时,还需要连接电源和地引脚,确保 ESP12F 正常供电。
rosemoore 发表于 2024-8-5 13:12 | 显示全部楼层
使用AT指令设置ESP12F模块为TCP客户端模式。
使用AT指令连接到指定的服务器IP地址和端口。
使用AT指令发送和接收数据。
jonas222 发表于 2024-8-5 16:13 | 显示全部楼层
初始化WiFi模块,设置SSID和密码,连接到WiFi网络。
创建一个TCP客户端,指定服务器地址和端口号。
连接到服务器,并发送数据或接收数据。
lzbf 发表于 2024-8-5 18:56 | 显示全部楼层
在TCP客户端代码中添加异常处理逻辑,以便在网络连接出现问题时能够 处理错误。
wwppd 发表于 2024-8-6 10:46 | 显示全部楼层
使用USART发送AT指令建立TCP连接。
发送数据:
当连接建立后,使用USART发送数据到服务器。
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是服务器监听的端口号。
wangdezhi 发表于 2024-8-6 16:03 | 显示全部楼层
为了实现TCP客户端功能,需要添加esp8266.h、esp8266.c、tcp.h、tcp.c等功能文件。这些文件包含了WIFI模块的驱动函数和TCP客户端的相关操作。在代码中填入WIFI的SSID和密码以及TCP服务器的IP地址和端口号,使模块能够连接到指定的网络和服务器。
xiaoyaodz 发表于 2024-8-6 17:40 | 显示全部楼层
将ESP-12F WIFI模块的TX、RX、RESET脚连接到MM32F5330的UART2对应引脚上。UART2初始化参数包括波特率115200、数据长度8位、1位停止位、无校验和流控。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2065

主题

14493

帖子

59

粉丝
快速回复 在线客服 返回列表 返回顶部