物联网项目设计(三)STM32配置ESP8266使用 STA TCP客户端模式初步

12 篇文章 3 订阅

原文连接https://blog.csdn.net/weixin_42487906/article/details/104480422

代码地址

https://github.com/FranHawk/STM32_ESP8266_STA.git

概要

本部分内容介绍如何使用STM32配置ESP8266使用STA模式,这个是使用MQTT与上层服务器链接的必要前提,笔者也是第一次使用ESP8266,通过AT指令来配置,查找了很多资料与代码,借鉴了正点原子ESP8266库和例程,在其基础上修改而来,这篇博客也是我边学边写的记录。

准备

硬件准备

  • 带有stm32主控的硬件一套
  • esp8266模块一个
  • 路由器一个

软件准备

  • CubeMx用来配置工程
  • MDK5用于编写调试和下载代码

配置ESP8266的步骤

配置ESP8266的目的是为了进入透传模式从而使用MQTT链接网络,我们需要使用AT指令,使ESP8266进入透传模式,步骤如下
1.AT+CWMODE=1 设置模块为STA模式
2.AT+CWAUTOCONN=0

按顺序要执行指令执行指令的意义
+++退出透传模式
AE0关闭回显
AT+CWMODE=1设置模块为STA模式
AT+RST重启生效
等待三秒等待三秒
AT+CWAUTOCONN=0取消自动连接
AT+ CWJAP = <ssid>,< password>连接路由器
AT+CIPMUX=0关闭多链接
AT+CIPSTART="TCP","IP号",端口号连接到服务器
AT+CIPMODE=1设置为透传模式
AT+CIPSEND开启透传模式

ESP8266的发送命令函数由正点原子的函数改进而来
STM32与ESP8266通过串口连接,需要配置的模块有

  • TIM2,定时器中断,用来判断接收命令是否超时,如果超时就按照接受命令,中断优先级为1

  • USART1,用于向电脑发送数据,便于调试

  • USART3,用于向ESP发送数据,包括发送和接受,采用中断方式接收,查询方式发送,中断优先级为2

  • 整个发送命令并接收的流程比较复杂,用到了定时器中断来设置发送指令,接收到的回复是否完成,并在定时器中断中将接收指令的回复接受完成的标志位置为1,并且与预期回复进行比较。

  • 这样发送命令并接收的整个流程的好处在于,可以保证发送指令的质量,得到准确的反馈。

  • 就好像你向一个人说,你帮我倒杯水好吗,然后要等待他的回复,如果听到他说:好的。说明他听到了我们的命令,这个时候我们才能放心。

在这里插入图片描述

实际操作部分

CubeMx配置工程

配置工程就像我上面所述的步骤,需要配置相应的外设,两个串口和一个定时器

1.打开CubeMx,选择对应型号的芯片,始终选择外部晶振
在这里插入图片描述
2.查看原理图,选择相应的引脚在这里插入图片描述
在这里插入图片描述
配置UART1,UART3,并设置波特率
在这里插入图片描述
设置定时器2,并开启定时器中断,分频为7200,重装值为500,这样,接收信息的缓冲时间为50ms
在这里插入图片描述
设置中断分组与中断优先级
在这里插入图片描述

配置时钟树,使主频最高为72MHZ
在这里插入图片描述
配置工程并生成代码
在这里插入图片描述

编写ESP8266函数并添加配套函数

首先添加两个uart重定向printf函数和uart接收中断处理函数
void u3_printf(char* fmt,...)  
{  
	uint8_t i,j; 
	va_list ap; 
	va_start(ap,fmt);
	vsprintf((char*)USART3_TX_BUF,fmt,ap);
	va_end(ap);
	i=strlen((const char*)USART3_TX_BUF);		//此次发送数据的长度
	for(j=0;j<i;j++)							//循环发送数据
	{
		while((USART3->SR&0X40)==0);			//循环发送,直到发送完毕   
		USART3->DR=USART3_TX_BUF[j];  
	} 
}

void u1_printf(char fmt,...)
{
uint8_t i,j;
va_list ap;
va_start(ap,fmt);
vsprintf((char)USART1_TX_BUF,fmt,ap);
va_end(ap);
i=strlen((const char*)USART1_TX_BUF); //此次发送数据的长度
for(j=0;j<i;j++) //循环发送数据
{
while((USART1->SR&0X40)==0); //循环发送,直到发送完毕
USART3->DR=USART1_TX_BUF[j];
}
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->InstanceUSART3)
{
if((USART3_RX_STA&(1<<15))0)//接收完的一批数据,还没有被处理,则不再接收其他数据
{
if(USART3_RX_STA<USART3_MAX_RECV_LEN) //还可以接收数据
{
__HAL_TIM_SET_COUNTER(&htim2,0); //计数器清空
if(USART3_RX_STA==0) //使能定时器7的中断
{
__HAL_TIM_ENABLE(&htim2); //使能定时器2
}
USART3_RX_BUF[USART3_RX_STA++]=temp_rx; //记录接收到的值
}else
{
USART3_RX_STA|=1<<15; //强制标记接收完成
}
}
}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
编写发送和检查命令核心函数
  • 创建esp8266.c esp8266.h并按照之前的流程图编写函数如下
uint8_t esp8266_send_cmd(uint8_t *cmd,uint8_t *ack,uint16_t waittime)
{
uint8_t res <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
USART3_RX_STA <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token function">u3_printf</span><span class="token punctuation">(</span><span class="token string">"%s\r\n"</span><span class="token punctuation">,</span>cmd<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span>ack<span class="token operator">&amp;&amp;</span>waittime<span class="token punctuation">)</span>		<span class="token comment">//需要等待应答</span>
<span class="token punctuation">{</span>
	<span class="token keyword">while</span><span class="token punctuation">(</span><span class="token operator">--</span>waittime<span class="token punctuation">)</span>	<span class="token comment">//等待倒计时</span>
	<span class="token punctuation">{</span>
		<span class="token function">HAL_Delay</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token keyword">if</span><span class="token punctuation">(</span>USART3_RX_STA<span class="token operator">&amp;</span><span class="token number">0X8000</span><span class="token punctuation">)</span><span class="token comment">//接收到期待的应答结果</span>
		<span class="token punctuation">{</span>
			<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">esp8266_check_cmd</span><span class="token punctuation">(</span>ack<span class="token punctuation">)</span><span class="token punctuation">)</span>
			<span class="token punctuation">{</span>
				<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"ack:%s\r\n"</span><span class="token punctuation">,</span><span class="token punctuation">(</span>uint8_t<span class="token operator">*</span><span class="token punctuation">)</span>ack<span class="token punctuation">)</span><span class="token punctuation">;</span>
				<span class="token keyword">break</span><span class="token punctuation">;</span><span class="token comment">//得到有效数据 </span>
			<span class="token punctuation">}</span>
				USART3_RX_STA<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>
		<span class="token punctuation">}</span> 
	<span class="token punctuation">}</span>
	<span class="token keyword">if</span><span class="token punctuation">(</span>waittime<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span>res<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> 
<span class="token punctuation">}</span>
<span class="token keyword">return</span> res<span class="token punctuation">;</span>

}

uint8_t esp8266_check_cmd(uint8_t str)
{

<span class="token keyword">char</span> <span class="token operator">*</span>strx<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span>USART3_RX_STA<span class="token operator">&amp;</span><span class="token number">0X8000</span><span class="token punctuation">)</span>		<span class="token comment">//接收到一次数据了</span>
<span class="token punctuation">{</span> 
	
	USART3_RX_BUF<span class="token punctuation">[</span>USART3_RX_STA<span class="token operator">&amp;</span><span class="token number">0X7FFF</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token comment">//添加结束符</span>
	<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"%s\r\n"</span><span class="token punctuation">,</span><span class="token punctuation">(</span><span class="token keyword">char</span><span class="token operator">*</span><span class="token punctuation">)</span>USART3_RX_BUF<span class="token punctuation">)</span><span class="token punctuation">;</span>
	strx<span class="token operator">=</span><span class="token function">strstr</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span><span class="token punctuation">)</span>USART3_RX_BUF<span class="token punctuation">,</span><span class="token punctuation">(</span><span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span><span class="token punctuation">)</span>str<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token keyword">return</span> <span class="token punctuation">(</span>uint8_t<span class="token operator">*</span><span class="token punctuation">)</span>strx<span class="token punctuation">;</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
在定时器文件中编写定时器中断服务函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
   if(htim->Instance == TIM2)
    {
	USART3_RX_STA<span class="token operator">|</span><span class="token operator">=</span><span class="token number">1</span><span class="token operator">&lt;&lt;</span><span class="token number">15</span><span class="token punctuation">;</span>	<span class="token comment">//标记接收完成</span>
	<span class="token function">__HAL_TIM_CLEAR_FLAG</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>htim2<span class="token punctuation">,</span>TIM_EVENTSOURCE_UPDATE <span class="token punctuation">)</span><span class="token punctuation">;</span>       <span class="token comment">//清除TIM7更新中断标志  </span>
	<span class="token function">__HAL_TIM_DISABLE</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>htim2<span class="token punctuation">)</span><span class="token punctuation">;</span>     			<span class="token comment">//关闭定时器2</span>
<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
在esp8266.c中按照上面的表格编写esp8266的初始化函数
uint8_t esp8266_Connect_IOTServer(void)
{
	u1_printf("准备配置模块\r\n");
	HAL_Delay(100);
<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"准备退出透传模式\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">esp8266_quit_trans</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"退出透传模式失败,准备重启\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">return</span> <span class="token number">6</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"退出透传模式成功\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>



<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"准备关闭回显\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">esp8266_send_cmd</span><span class="token punctuation">(</span><span class="token string">"ATE0"</span><span class="token punctuation">,</span><span class="token string">"OK"</span><span class="token punctuation">,</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"关闭回显失败准备重启\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">return</span> <span class="token number">1</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"关闭回显成功\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"查询模块是否在线\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">esp8266_send_cmd</span><span class="token punctuation">(</span><span class="token string">"AT"</span><span class="token punctuation">,</span><span class="token string">"OK"</span><span class="token punctuation">,</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"模块不在线准备重启\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">return</span> <span class="token number">1</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"设置查询在线成功\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"准备设置STA模式\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">esp8266_send_cmd</span><span class="token punctuation">(</span><span class="token string">"AT+CWMODE=1"</span><span class="token punctuation">,</span><span class="token string">"OK"</span><span class="token punctuation">,</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"设置STA模式失败准备重启\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">return</span> <span class="token number">1</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"设置STA模式成功\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"准备重启\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">esp8266_send_cmd</span><span class="token punctuation">(</span><span class="token string">"AT+RST"</span><span class="token punctuation">,</span><span class="token string">"OK"</span><span class="token punctuation">,</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"重启失败,准备重启\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">return</span> <span class="token number">2</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"重启成功,等待三秒\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token function">HAL_Delay</span><span class="token punctuation">(</span><span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">HAL_Delay</span><span class="token punctuation">(</span><span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">HAL_Delay</span><span class="token punctuation">(</span><span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">HAL_Delay</span><span class="token punctuation">(</span><span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"准备取消自动连接\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">esp8266_send_cmd</span><span class="token punctuation">(</span><span class="token string">"AT+CWAUTOCONN=0"</span><span class="token punctuation">,</span><span class="token string">"OK"</span><span class="token punctuation">,</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"取消自动连接失败,准备重启\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">return</span> <span class="token number">3</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"取消自动连接成功\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"准备链接路由器\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">esp8266_Connect_AP</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"连接路由器失败,等待重启\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">return</span> <span class="token number">4</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"连接路由器成功\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">HAL_Delay</span><span class="token punctuation">(</span><span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">HAL_Delay</span><span class="token punctuation">(</span><span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"设置为关闭多路连接\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">esp8266_send_cmd</span><span class="token punctuation">(</span><span class="token string">"AT+CIPMUX=0"</span><span class="token punctuation">,</span><span class="token string">"OK"</span><span class="token punctuation">,</span><span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"关闭多路连接失败,准备重启\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">return</span> <span class="token number">7</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"设置关闭多路连接成功\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"准备链接服务器\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">esp8266_Connect_Server</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"连接服务器失败,等待重启\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">return</span> <span class="token number">8</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"连接服务器成功\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"准备退出透传模式\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">esp8266_quit_trans</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"退出透传模式失败,准备重启\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">return</span> <span class="token number">6</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"退出透传模式成功\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"设置为透传模式\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">esp8266_send_cmd</span><span class="token punctuation">(</span><span class="token string">"AT+CIPMODE=1"</span><span class="token punctuation">,</span><span class="token string">"OK"</span><span class="token punctuation">,</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"设置透传失败,准备重启\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">return</span> <span class="token number">6</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"设置透传成功\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"设置开启透传模式\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">esp8266_send_cmd</span><span class="token punctuation">(</span><span class="token string">"AT+CIPSEND"</span><span class="token punctuation">,</span><span class="token string">"OK"</span><span class="token punctuation">,</span><span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	<span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"开启透传失败,准备重启\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">return</span> <span class="token number">9</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token function">u1_printf</span><span class="token punctuation">(</span><span class="token string">"开启透传成功\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">while</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
	<span class="token function">HAL_Delay</span><span class="token punctuation">(</span><span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token comment">//esp8266_send_cmd("AT+CIPSEND","OK",200);  //发送指定长度的数据</span>
	<span class="token function">u3_printf</span><span class="token punctuation">(</span><span class="token string">"This is a message\r\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
在主函数中初始化相应模块并调用esp8266的初始化函数
while (1)
  {
    /* USER CODE END WHILE */
<span class="token comment">/* USER CODE BEGIN 3 */</span>
  
  <span class="token function">esp8266_Connect_IOTServer</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

观察实验现象

  • 打开网络调试助手,调整到TCP服务器模式,并记下此时的ip地址和端口号
  • 打开串口调试助手
  • 打开开发板观察现象

下面是串口调试助手的消息
在这里插入图片描述在这里插入图片描述
上面的图就是进入透传模式的过程,整个过程的AT指令是按照本文章最上面的表格来设置的,观察网络调试助手观察现象
在这里插入图片描述
发现进入透传模式之后的数据成功发送到服务器端,试验成功。

总结

本部分内容介绍了如何使STM32使用串口与ESP8266进行通讯,并且配置ESP8266进入TCP客户端的透传模式链接服务器,下一部分内容不出意外的话应该是介绍如何使STM32使用paho的开源MQTT库连接到百度云天工服务器

                                </div><div><div></div></div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-60ecaf1f42.css" rel="stylesheet">
                            </div>
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值