ESP8266通過MQTT協(xié)議連接Onenet。從標準庫移到了HAL庫,過程有點麻煩,整了一天。做完后整理了一下,這個極簡的工程,方便以后開發(fā),也希望能幫助到大家,節(jié)約時間。
代碼工程:
https://github.com/wyfroom/ESP8266-Onenet-MQTT
該份代碼硬件配置:
板子:STM32F103C8T6最小系統(tǒng)板。
外設(shè):串口1用作調(diào)試,串口3用作esp8266。
esp8266:淘寶,esp-01s
1 導(dǎo)入.c.h文件(不再贅述,詳細見LED部分)
在keil工程中導(dǎo)入之前寫好的.c.h文件。這個是我從標準庫移倒hal庫的,直接從我工程里復(fù)制就行,很純凈,沒有加多余的東西。下面介紹如何根據(jù)個人實際使用情況更改一些參數(shù)。
cubemx詳細使用教程及所有模塊整合見這篇:
【HAL庫】HAL庫STM32cubemx快速使用
2 Cubemx配置
串口1用于調(diào)試,串口3用于ESP8266通信,打開中斷。
基礎(chǔ)的我就不配置了,可以看前面的詳細講解。
3 修改 .c.h 文件
移植時要修改的地方:
1 改所用串口
發(fā)送部分:在esp8266.c里,將huart3全部替換為要修改的串口號,比如串口2。
接收部分:用串口中斷接收esp8266發(fā)來的消息。隨便在哪個文件夾填加串口回調(diào)函數(shù),我個人是之前專門建了個uart.c文件放串口相關(guān)的所有代碼。
加入下面的代碼(串口號根據(jù)個人情況修改)
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart == &huart3)//esp8266接收云平臺數(shù)據(jù)
{
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名字和密碼
3 改產(chǎn)品ID、設(shè)備ID、鑒權(quán)信息。
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會顯示設(shè)備在線。串口也會打印成功。
發(fā)送數(shù)據(jù)
OneNet_SendData(); //發(fā)送數(shù)據(jù)
ESP8266_Clear(); //清空數(shù)據(jù)緩存區(qū)
HAL_Delay(3000); //3s發(fā)送一次
要發(fā)什么數(shù)據(jù),在這里改:
文章來源:http://www.zghlxwxcb.cn/news/detail-436779.html
接收數(shù)據(jù)文章來源地址http://www.zghlxwxcb.cn/news/detail-436779.html
dataPtr = ESP8266_GetIPD(0);//獲取平臺返回的數(shù)據(jù)
if(dataPtr != NULL)//如果返回數(shù)據(jù)不為空
OneNet_RevPro(dataPtr);//平臺返回數(shù)據(jù)檢測
到了這里,關(guān)于【HAL庫】STM32+ESP8266+Onenet+MQTT,極簡工程,hal庫移植。的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!