将ESP8266连接OneNET+MQTT移植到HAL库+FreeRTOS

本文详细介绍了如何在STM32F103C8T6开发板上配置FreeRTOS、串口通信以及移植ESP8266文件,涉及RCC配置、串口设置、中断处理和FreeRTOS事件调度等内容。
摘要由CSDN通过智能技术生成

一、打开工程配置软件cubemx

1.选择芯片型号,这里使用的是STM32F103C8T6

2.因为后面工程要引入FreeRTOS,而FreeRTOS会占用SysTick时钟,所以这里的时钟源要选择其他的。

3.配置RCC

4.配置串口1和串口2

串口1用来打印信息,串口2用来调试ESP8266

使能串口1,波特率设为115200

使能中断

串口2也是这样配置的,这里就不在展示了,只需要使能串口2,设置波特率115200,使能串口2的中断即可。

5.配置FreeRTOS

选择CMSIS版本2,点击Add,设置事件名称、事件函数名、占用大小等等。

设置参数代表意思如下所示:

6.配置时钟树

7.配置工程基本信息
8.选择工程生成.h文件,最后点击cenerate code生成项目工程

二、打开工程

1.移植ESP8266相关文件,如下图APP文件中的4个.c文件

2.将串口2发送标准库函数换成HAL库中的串口发送函数

3.将延时函数换成HAL库中的延时函数,另外三个.c文件也是一样的操作

4.在stm32f1xx_it.c文件中,将串口2中断服务函数进行重写
void USART2_IRQHandler(void)
{
  /* USER CODE BEGIN USART2_IRQn 0 */
	unsigned int timeout=0;
  unsigned int maxDelay=0x1FFFF;
	
  /* USER CODE END USART2_IRQn 0 */
  HAL_UART_IRQHandler(&huart2);
  /* USER CODE BEGIN USART2_IRQn 1 */
  while (HAL_UART_GetState(&huart2)!=HAL_UART_STATE_READY)//等待就绪
  {
		timeout++;//超时处理
		if(timeout>maxDelay) break;		
  }
  timeout=0;
  while(HAL_UART_Receive_IT(&huart2,&receivedByte2, 1)!=HAL_OK)
  {
    timeout++; //超时处理
		if(timeout>maxDelay) break;	
  }
	
	if(esp8266_cnt >= sizeof(esp8266_buf))	esp8266_cnt = 0; //防止串口被刷爆
		esp8266_buf[esp8266_cnt++] = receivedByte2;
	
  /* USER CODE END USART2_IRQn 1 */
}
5.打开FreeRTOS.c文件,在这里就可以看到我们生成的事件名和事件函数名

然后找到生成的事件函数,添加事件进去,我这里在事件test01里面添加了打印的一个事件,在另外一个事件里面添加了数据上报的一个事件,注意这两个事件里面都必须包含osDelay延时函数,否则将无法进行事件堵塞,这样就不能进行任务间的调度切换。

三.效果展示图如下

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: STM32使用ESP8266连接OneNET使用MQTT协议的步骤如下: 1. 首先,确保STM32和ESP8266之间的硬件连接正确。将ESP8266的TX引脚连接到STM32的RX引脚,将ESP8266的RX引脚连接到STM32的TX引脚,并将GND引脚连接到共地。 2. 接下来,需要编写STM32的固件代码。首先,需要初始化串口通信接口,并将其配置为与ESP8266的通信接口相匹配。其次,需要配置STM32的GPIO引脚,将其用于控制ESP8266的工作模式切换(例如,将ESP8266切换到STA模式或AP模式)。然后,使用串口通信接口与ESP8266进行AT指令的交互,以设置ESP8266连接参数和网络配置。最后,使用STM32的MQTT库来实现与OneNET连接和数据传输。 3. 在ESP8266上,需要使用AT指令配置ESP8266的网络连接MQTT参数。可以使用AT+CWMODE指令将ESP8266切换到STA模式,并使用AT+CWJAP指令连接到WiFi网络。然后,使用AT+CIPSTART指令建立与OneNETMQTT服务器的连接,并使用AT+CIPSEND指令发送MQTT消息。 4. 一旦STM32成功连接OneNETMQTT服务器,就可以使用STM32的MQTT库来发送和接收数据。可以使用MQTT的发布(Publish)和订阅(Subscribe)功能,向OneNET发送数据或接收来自OneNET的数据。 总结来说,使用STM32连接OneNETMQTT服务器需要进行硬件连接和固件代码的编写,而ESP8266则需要使用AT指令配置网络连接MQTT参数。之后,STM32可以使用MQTT库来实现与OneNET的数据传输。 ### 回答2: 要使用STM32与ESP8266连接OneNet并使用MQTT协议,我们可以采取以下步骤: 1. 在STM32上配置串口通信:将STM32通过UART配置为与ESP8266进行串口通信的方式。设置合适的波特率、数据位、停止位和奇偶校验位等。 2. 连接ESP8266和STM32:根据ESP8266的硬件连接方式(一般为串口连接),将ESP8266的TX线连接到STM32的RX线,将ESP8266的RX线连接到STM32的TX线。还需将ESP8266的VCC和GND引脚分别连接到STM32的电源线和地线。 3. 配置ESP8266连接OneNetESP8266需要连接OneNet,并使用MQTT协议进行通信。通过AT指令,配置ESP8266的WiFi连接,设置SSID和密码。然后使用AT+CIPSTART指令连接OneNetMQTT服务器。 4. 配置STM32发送和接收数据:在STM32上配置串口发送和接收功能,以便与ESP8266进行通信。使用UART发送指令字节流给ESP8266并接收ESP8266的响应。 5. 使用MQTT协议与OneNet通信:在STM32上通过串口向ESP8266发送MQTT协议指令,例如建立连接(CONNECT),订阅主题(SUBSCRIBE),发布消息(PUBLISH),取消订阅(UNSUBSCRIBE)等。根据需求进行合适的MQTT操作。 6. 处理OneNet的响应和数据:在STM32上解析和处理来自OneNet的响应和数据。根据MQTT协议,您可以接收和解析来自OneNet的订阅消息。 通过以上步骤,您就可以在STM32上使用ESP8266连接OneNet并使用MQTT协议进行通信和数据传输。 ### 回答3: STM32是一种常用的微控制器,而ESP8266是一种常用的Wi-Fi模块。这两者可以结合使用,通过使用MQTT协议连接OneNet平台。 首先,我们需要在STM32上配置USART或SPI接口与ESP8266通信。然后,我们可以使用AT指令集来与ESP8266进行通信。通过发送相应的AT指令,我们可以实现与ESP8266的Wi-Fi连接。这将使STM32具备互联网连接功能。 接下来,我们需要使用MQTT协议与OneNet平台进行连接。我们可以使用一个MQTT客户端库,例如MQTTFX或Paho,来处理MQTT通信。在STM32上,我们可以使用相应的库或手动实现MQTT协议来处理与OneNet的通信。 在连接OneNet之前,我们需要在OneNet平台上创建一个设备,并获取相应的设备ID和API密钥。这些信息将用于在我们的STM32代码中进行身份验证和连接。 一旦连接OneNet,我们可以通过使用MQTT发布者/订阅者机制在设备和OneNet之间进行通信。我们可以发布传感器数据或接收来自OneNet的命令。这样,我们可以实现远程监控和控制功能。 在代码实现方面,我们需要处理与ESP8266的通信、MQTT协议的处理以及与OneNet的通信。我们可以使用适当的库和API来简化代码实现过程。 综上所述,通过将STM32与ESP8266OneNet相结合,使用MQTT协议进行通信,我们可以实现STM32与OneNet平台之间的连接和数据传输。这为物联网应用提供了一个便捷的方式,使得我们可以远程监控和控制STM32设备。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值