正點原子STM32F407探索版接入機智雲LED控制教程
前言:
程式碼分享:https://github.com/nicedayzhu/ALIENTEK_STM32F407_Gizwits
正點原子官方提供了與機智雲連線的開發手冊,但是手冊內容中的Gizwits檔案目錄和目前的機智雲自動生成的程式碼目錄有一定的差異,因此移植過程有了一些改變。為了方便大家針對新版機智雲的程式碼進行移植,也為了給自己的移植過程做一個記錄,特此寫下移植過程。
正點原子官方程式碼下載:
- 連結: https://pan.baidu.com/s/1pKD7t1p 密碼: fuex
推薦使用最新的ESP8266機智雲GoAgent韌體,燒錄韌體方法見正點原子的官方手冊
下載地址:https://download.gizwits.com/zh-cn/p/92/94
移植步驟:
-
在機智雲開發者中心新建裝置,資料點,生成程式碼(選擇其他平臺(程式碼是標準庫),如果選擇F407平臺則會生成HAL庫的程式碼)並下載
-
開啟正點原子的移植程式碼:
檔案路徑:
- D:\STM32F407資料\正點原子機智雲開發資料\24,ALIENTEK機智雲教程\1,程式原始碼\STM32F407 機智雲IOT例程v1.0_擴充套件實驗SE02\機智雲IOT實驗-1 協議移植實驗\(標準庫版,適合探索者F407開發板)
將我們下載的自動生成的程式碼中的Gizwits資料夾和Utils資料夾複製到正點原子的移植程式碼目錄中,提示覆蓋點選確定即可。
開啟工程,將Utils資料夾新增到標頭檔案路徑中
在gizwits_product.c中加入led.h和usart3.h
#include <stdio.h>
#include <string.h>
#include "gizwits_product.h"
//下面兩個標頭檔案是我們後來加入的
#include "led.h"
#include "usart3.h"
修改 dataPoint_t currentDataPoint 為 extern dataPoint_t currentDataPoint
/** Current datapoint */ //dataPoint_t currentDataPoint; extern dataPoint_t currentDataPoint;
找到以下程式碼,並加入
if(0x01 == currentDataPoint.valueLEDonoff)
{
//user handle
//下面一行是我們後加入的
LED1=0;//LED1亮
}
else
{
//user handle
//下面一行是我們後加入的
LED1=1;//LED1滅
}
將main.c中的 void userHandle(void)
//資料採集
void userHandle(void)
{
//判斷當前LED1開關量
if(LED1==0)
currentDataPoint.valueLEDonoff = 1;
else
currentDataPoint.valueLEDonoff = 0;
}
剪下到gizwits_product.c中的對應位置
//下面的void userHandle(void)是我們從main.c中剪下過來的
//資料採集
void userHandle(void)
{
//判斷當前LED1開關量
if(LED1==0)
currentDataPoint.valueLEDonoff = 1;
else
currentDataPoint.valueLEDonoff = 0;
}
修改gizwits_product.c中的 int32_t uartWrite(uint8_t *buf, uint32_t len)
int32_t uartWrite(uint8_t *buf, uint32_t len)
{
uint32_t i = 0;
if(NULL == buf)
{
return -1;
}
#ifdef PROTOCOL_DEBUG
GIZWITS_LOG("MCU2WiFi[%4d:%4d]: ", gizGetTimerCount(), len);
for(i=0; i<len; i++)
{
GIZWITS_LOG("%02x ", buf[i]);
}
GIZWITS_LOG("\n");
#endif
for(i=0; i<len; i++)
{
//USART_SendData(UART, buf[i]);//STM32 test demo
//實現串列埠傳送函式,將buf[i]傳送到模組
USART_SendData(USART3,buf[i]);
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //迴圈傳送,直到傳送完畢
if(i >=2 && buf[i] == 0xFF)
{
//實現串列埠傳送函式,將0x55傳送到模組
USART_SendData(USART3,0x55);
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //迴圈傳送,直到傳送完畢
}
}
return len;
}
在gizwits_product.c中的 void mcuRestart(void); 處加入如下程式碼
void mcuRestart(void)
{
__set_FAULTMASK(1);//關閉所有中斷
NVIC_SystemReset();//復位
}
在gizwits_product.h中加入 void gizTimerMs(void);
void userInit(void);
void userHandle(void);
void mcuRestart(void);
//下面的一行是我們後面加入的
void gizTimerMs(void);
移植完成
編譯下載到開發板即可。
按下KEY1,用機智雲的手機App進行連線除錯。
進入即可控制LED的亮滅。