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