在《基于STM32HAL庫與標準庫的esp8266接入機智云方案(一)》中,我們詳細介紹了硬件連接和機智云客戶端的創建。本篇將重點講解如何下載代碼、分析下載的代碼,并直接使用這些代碼連接機智云。同時,我們還將討論如何移植HAL庫和標準庫以實現與機智云的兼容,幫助開發者更高效地完成項目的云平臺接入。
代碼下載
注意:此時手機app端的該設備為網頁端的虛擬設備僅僅是作為調試UI使用。之后移植完成代碼后,會與ESP8266連接,此時會出現一個新的設備信息來控制MCU,確認后,就可以去生成代碼了。
點擊MCU開發,選擇硬件平臺。
首先,確認項目的開發方式是標準庫還是HAL 庫,如果是標準庫,只能選擇其他平臺。我使用的是HAL庫,同時也是F1x的板子,所以我選擇F103C8。輸入PS碼后即可點擊生成項目代碼。生成后下載下來使用即可!
后面如果需要加其他數據或者需要控制其他東西的話都是需要重新生成代碼的!
分析下載下來的代碼
下載下來后我們先簡單觀察里面的代碼的基本功能和配置:我們打開下載下來的代碼如果是F103C8型號就是可以直接使用的,如果不是我后面也會詳細說移植步驟!
我們打開里面的CubeMX工程可以發現:使用機智云需要一個定時器ms級別的中斷和兩個串口,一個打印信息,一個連接esp8266,還有兩個按鍵(非必要),然后我們點開keil工程,查看main函數里面到底有什么,使用了什么:
/* Initialize interrupts */ MX_NVIC_Init();//中斷優先級配置 /* USER CODE BEGIN 2 */ timerInit();//開啟定時器中斷 uartInit();//開啟串口2接收中斷 userInit();//初始化數據(比如,LED) gizwitsInit();//機智云初始化 keyInit();//按鍵初始化
GIZWITS_LOG("MCU Init Success , SoftVersion = %s\r\n",SOFTWARE_VERSION);//打印數據 /* USER CODE END 2 */#ifdefOTA_ENABLE Pro_D2W_Ask_Module_Reboot();#endif /* Infinite loop */ /* USER CODE BEGIN WHILE */ while(1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ userHandle();//數據上傳 gizwitsHandle((dataPoint_t *)¤tDataPoint);//任務處理(比如:開關LED) } /* USER CODE END 3 */AI寫代碼
我們可以使用CH340連接串口1,esp8266連接串口2,查看按鍵的打印信息:
發現按鍵設置長短按,分別用來設置esp8266的工作模式,移植后的代碼的串口發送函數已經包裝成了GIZWITS_LOG
想要熟悉使用機智云代碼就必須會使用兩個函數:
userHandle();//數據上傳
gizwitsHandle((dataPoint_t *)¤tDataPoint);//任務處理(比如:開關LED)
AI寫代碼
userHandle();//數據上傳
gizwitsHandle((dataPoint_t *)¤tDataPoint);//任務處理(比如:開關LED):點擊跳轉定義
點擊進入箭頭這個函數:
基本了解了代碼的最基本的功能后,后續移植也會更得心應手。
直接使用下載下來的代碼
4.1、修改代碼點亮LED
下載的代碼中只定義了一個定時器、兩個串口、兩個按鍵,其他就沒有配置了,我們這里自己個他配置一個LED的GPIO口,用于模擬燈:
修改1:
staticvoidMX_GPIO_Init(void){ GPIO_InitTypeDef GPIO_InitStruct; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); /*Configure GPIO pin : KEY1_Pin */ GPIO_InitStruct.Pin=KEY1_Pin; GPIO_InitStruct.Mode=GPIO_MODE_INPUT; GPIO_InitStruct.Pull=GPIO_PULLUP; HAL_GPIO_Init(KEY1_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : KEY2_Pin */ GPIO_InitStruct.Pin=KEY2_Pin; GPIO_InitStruct.Mode=GPIO_MODE_INPUT; GPIO_InitStruct.Pull=GPIO_PULLUP; HAL_GPIO_Init(KEY2_GPIO_Port, &GPIO_InitStruct);
//自己添加的GPIO口初始化,用于驅動LED GPIO_InitStruct.Pin=GPIO_PIN_9; GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull=GPIO_PULLUP; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);}AI寫代碼
修改2:
連接機智云平臺
然后按照要求連接號硬件和LED,上電試著連接機智云,先長按Key2進入airlink模式,然后使用手機打開機智云點擊右上角的+,然后點擊一鍵配網
等待配對成功后,就可以使用機智云控制LED開關了。
連接機智云串口打印信息
HAL庫移植機智云
前面我們已經熟悉了下載的代碼的最基本需求:一個串口打印信息,一個串口連接esp8266,一個定時器ms級別中斷,兩個按鍵(非必要),那么我們進行移植之前就得先得到一個已經配置好的keil工程
Keil工程的生成
前面我們已經熟悉了機智云代碼的最基本的需求,所以我們移植之前的需要得到一個符合條件的Keil工程,一個串口打印信息(串口1,115200bits/s),一個串口連接esp8266(串口2,9600bits/s),一個定時器實現ms級別中斷(定時器2),兩個按鍵(非必須),需要移植的代碼中配置好的就是串口1、串口2,定時器2,如果我們想要使用其他的外設,我們就需要修改機智云代碼中的句柄,比如我們想要串口1連接esp8266,串口2打印信息,定時器3實現中斷,我們在機智云代碼中需要的修改的地方:huart1和huart2互換地方,htim2修改為htim3,以此類推。
我們這里就不隨便換他的外設配置了,就按照它的來配置,最快把這個機智云物聯網平臺使用起來:
打開外部高速時鐘:
配置時鐘頻率:
配置定時器二:
別忘記了打開定時器中斷:
配置串口1負責打印信息(115200bits/s):
配置串口二(9600bits/s):
一樣別忘記打開中斷:
配置點燈GPIO口:
最后生成工程即可:
-
STM32
+關注
關注
2290文章
11017瀏覽量
362466 -
機智云
+關注
關注
3文章
609瀏覽量
26747 -
HAL
+關注
關注
2文章
72瀏覽量
12986
發布評論請先 登錄
【HAL庫每天一例】第063例:WIFI-ESP8266
機智云自動生成工程移植STM32CubeMX
基于STM32與esp8266機智云app聯網總結
正點原子STM32F103+ESP8266使用工程模板接入機智云的詳細步驟

基于STM32 HAL庫與標準庫的ESP8266接入機智云方案(一)

評論