大佬们我想用stm32单片机在终端通过tcp连接esp8266的ap模式后每秒发数据,端口,ip什么

大佬们我想用stm32单片机在终端通过tcp连接esp8266的ap模式后每秒发数据,端口,ip什么的都设置好了,之后应该怎么写,是用串口助手写at+send,还是keil里写个printf at+send,还是说全都用串口助手at指令完成?keil里需要写相关的程序吗?不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你看下这篇博客吧, 应该有用👉 :STM32玩转物联网实战篇:2.ESP8266 WIFI模块TCP通信示例详解
  • 除此之外, 这篇博客: STM32F103C8T6驱动ESP8266转串口模块(一)——模块AP模式+TCP客户端的HAL库驱动代码详解(CubeMX工程)中的 1.3.1 AT指令与模块配置过程介绍 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    首先我们要配置模块的各项参数。参考正点原子的模块使用资料,结合本身项目需求,笔者选择将模块设置为AP模式,使用AP模式下的透传功能实现大量数据的透明传输。配置过程如下:

    在这里插入图片描述

    我们需要按上述流程完成模块模式的配置。那么,我们需要完成如下几件事请:

    • 向模块发送第一个AT指令;
    • 等待模块的返回内容并判断是否配置成功;
    • 如果成功,发送下一个AT指令;如果不成功,则再发送一次当前AT指令;
    • 直至最后开始发送数据的AT指令发送并配置成功

    发送指令比较简单,使用HAL库的串口发送函数即可:

    HAL_UART_Transmit(&huart3, (uint8_t *)AT_RESTORE, sizeof(AT_RESTORE), 0xFFFF)
    

    其中,AT_RESTORE表示AT指令中的“重启”指令。该指令发送完成后,向串口发送检查指令“AT\r\n”。经笔者测试,模块会对检查指令返回字符串“AT\r\n\r\nOK\r\n”(在CubeMX工程中,“char”类型被定义为“uint8_t”类型)。同样,其他指令返回内容的数据类型也为字符串。所以,我们需要读取到串口3的返回值并识别是否是重启成功的返回值。声明uint8_t类型:

    uint8_t AT[] = "AT\r\n";//检查指令
    uint8_t ATRE[] = "AT\r\n\r\nOK\r\n";//检查指令的正确返回值
    

    其中“AT”和“ATRE”均为字符串类型,AT是MCU向串口3(也就是模块)发送的检查指令,而ATRE为该指令的正确返回值。如果返回值不是ATRE的内容,则需要重新发送AT指令。

    检查返回值的代码如下:

    int checkResponse(uint8_t* response){
    	for(int i = 0;i < ATResRecCount;i ++){
    		if(ATCmdRxBuffer[i] != response[i]){
    			return 0;
    		}
    	}
    	return 1;
    }
    

    在上面的函数中,输入参数是正确的返回值。ATCmdRxBuffer中是串口接收到的实际的返回值。在这个函数中,按照顺序依次将实际的返回值和正确的返回值比较,如果实际返回值与正确返回值不一致,则函数返回整型0,否则返回1。我们可以根据返回值来判断模块是否返回了正确的返回值,进而决定是否进行下一步。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^