【HAL库】STM32+ESP8266+Onenet+MQTT,极简工程,hal库移植。

ESP8266+Onenet+MQTT

  • 1 导入.c.h文件(不再赘述,详细见LED部分)
  • 2 Cubemx配置
  • 3 修改 .c.h 文件
  • 4 测试
  • ESP8266通过MQTT协议连接Onenet。从标准库移到了HAL库,过程有点麻烦,整了一天。做完后整理了一下,这个极简的工程,方便以后开发,也希望能帮助到大家,节约时间。

    代码工程:
    https://github.com/wyfroom/ESP8266-Onenet-MQTT

    该份代码硬件配置:
    板子:STM32F103C8T6最小系统板。
    外设:串口1用作调试,串口3用作esp8266。
    esp8266:淘宝,esp-01s

    1 导入.c.h文件(不再赘述,详细见LED部分)

    在keil工程中导入之前写好的.c.h文件。这个是我从标准库移倒hal库的,直接从我工程里复制就行,很纯净,没有加多余的东西。下面介绍如何根据个人实际使用情况更改一些参数。

    cubemx详细使用教程及所有模块整合见这篇:
    【HAL库】HAL库STM32cubemx快速使用

    image-20230408211617282

    2 Cubemx配置

    串口1用于调试,串口3用于ESP8266通信,打开中断。

    基础的我就不配置了,可以看前面的详细讲解。

    3 修改 .c.h 文件

    移植时要修改的地方:

    1 改所用串口

    发送部分:在esp8266.c里,将huart3全部替换为要修改的串口号,比如串口2。

    image-20230408212731847

    接收部分:用串口中断接收esp8266发来的消息。随便在哪个文件夹填加串口回调函数,我个人是之前专门建了个uart.c文件放串口相关的所有代码。

    加入下面的代码(串口号根据个人情况修改)

    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    {
        if(huart == &huart3)//esp8266接收云平台数据
    		{
    			if(esp8266_cnt >= sizeof(esp8266_buf))
    			{            
    				esp8266_cnt = 0; //防止串口被刷爆
    			}
    			esp8266_buf[esp8266_cnt++] = Uart3_RxData;
    
    			HAL_UART_Receive_IT(&huart3,(uint8_t *)&Uart3_RxData, 1); //&取地址
    		}
    }
    

    2 改wifi名字和密码

    image-20230408211926168

    3 改产品ID、设备ID、鉴权信息。

    image-20230408212601399

    4 测试

    添加头文件

    #include "onenet.h"
    #include "esp8266.h"
    

    添加初始化

    别忘了开串口中断。

    HAL_UART_Receive_IT(&huart3,(uint8_t *)&Uart3_RxData, 1);//开启串口中断
    /* esp8266连接wifi+连接Onenet */
    HAL_Delay(2000);
    ESP8266_Init();					//初始化ESP8266,连接wifi
    HAL_Delay(2000);
    while(OneNet_DevLink())			//连接OneNET
    HAL_Delay(2000);
    

    连接成功的话,onenet会显示设备在线。串口也会打印成功。

    image-20230408213614618

    image-20230408220823254

    发送数据

    OneNet_SendData();	//发送数据
    ESP8266_Clear();	//清空数据缓存区
    HAL_Delay(3000);	//3s发送一次
    

    image-20230408220926312

    要发什么数据,在这里改:

    image-20230408214852054

    接收数据

    dataPtr = ESP8266_GetIPD(0);//获取平台返回的数据
    if(dataPtr != NULL)//如果返回数据不为空
    	OneNet_RevPro(dataPtr);//平台返回数据检测
    
    物联沃分享整理
    物联沃-IOTWORD物联网 » 【HAL库】STM32+ESP8266+Onenet+MQTT,极简工程,hal库移植。

    发表评论