1. 程式人生 > >正點原子STM32F407探索版接入機智雲LED控制教程

正點原子STM32F407探索版接入機智雲LED控制教程

前言:

程式碼分享:https://github.com/nicedayzhu/ALIENTEK_STM32F407_Gizwits

正點原子官方提供了與機智雲連線的開發手冊,但是手冊內容中的Gizwits檔案目錄和目前的機智雲自動生成的程式碼目錄有一定的差異,因此移植過程有了一些改變。為了方便大家針對新版機智雲的程式碼進行移植,也為了給自己的移植過程做一個記錄,特此寫下移植過程。

正點原子官方程式碼下載:

推薦使用最新的ESP8266機智雲GoAgent韌體,燒錄韌體方法見正點原子的官方手冊

下載地址:https://download.gizwits.com/zh-cn/p/92/94

移植步驟:

  1. 在機智雲開發者中心新建裝置,資料點,生成程式碼(選擇其他平臺(程式碼是標準庫),如果選擇F407平臺則會生成HAL庫的程式碼)並下載

  2. 開啟正點原子的移植程式碼:

檔案路徑:

  • D:\STM32F407資料\正點原子機智雲開發資料\24,ALIENTEK機智雲教程\1,程式原始碼\STM32F407 機智雲IOT例程v1.0_擴充套件實驗SE02\機智雲IOT實驗-1 協議移植實驗\(標準庫版,適合探索者F407開發板)

將我們下載的自動生成的程式碼中的Gizwits資料夾和Utils資料夾複製到正點原子的移植程式碼目錄中,提示覆蓋點選確定即可。

開啟工程,將Utils資料夾新增到標頭檔案路徑中

gizwits_product.c中加入led.husart3.h

#include <stdio.h>
#include <string.h>
#include "gizwits_product.h"
//下面兩個標頭檔案是我們後來加入的
#include "led.h"
#include "usart3.h"

修改 dataPoint_t currentDataPointextern 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的亮滅。