正点原子STM32F407探索版接入机智云LED控制教程

版权声明:本文为原创文章,转载请注明出处 https://blog.csdn.net/wbdxz/article/details/82985166

前言:

代码分享: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的亮灭。

猜你喜欢

转载自blog.csdn.net/wbdxz/article/details/82985166