首先的首先,吐槽一波机智云的教程。官方的教程总是让下它那个微信宠物屋的代码,一步看结果。拜托!就不能来个一步一步地教程吗!还有那个宠物屋的代码看得很头痛啊。总而言之,官方的教程给我的感觉就是很凌乱。

按习惯,拿到板子先点个灯,下面就来一步一步实现点灯功能。

一、给WIFI模块下固件

1.如果是官方买的或送的WIFI模块一般里面都下好了固件。但是有时候可能不是最新的,需要重新下一遍。

2.还有就是板子的串口用的是CP2102,需要下个驱动,后面需要串口来打印WIFI日志信息  

二、硬件链接

1.

  

注意右下角要用跳线帽连接,根据背面的说明图可知,这样连接后usb连到了串口一,WiFi模块连到了串口二(拓展板插上后)。

2.我用的是JLINK下载,需要把BOOT CONFIG那里打到FLASH。

三、代码移植

1.在机智云官网上创建一个项目,详细教程:http://docs.gizwits.com/zh-cn/quickstart/UseMCU.html

下载后,把里面的.C.H文件都移植到自己的工程里,gizwits_product、gizwits_protocol、common、dataPointTools、ringbuffer,就这五个的.C.H文件。(这里不得不说,机智云的代码自动生成工具确实有点6哦)

3.修改串口文件

4.添加定时器,这里定时1MS

5.修改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(USART2, buf[i]);//STM32 test demo
		USART_SendData(USART2,buf[i]);//******
        while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);//******

        //Serial port to achieve the function, the buf[i] sent to the module
        if(i >=2 && buf[i] == 0xFF)
        {
          USART_SendData(USART2,0x55);
          while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);

        }
    }
    
    return len;
}

6.添加控制,在gizwits_product.c 文件

int8_t gizwitsEventProcess(eventInfo_t *info, uint8_t *gizdata, uint32_t len)
{
  uint8_t i = 0;
  dataPoint_t *dataPointPtr = (dataPoint_t *)gizdata;
  moduleStatusInfo_t *wifiData = (moduleStatusInfo_t *)gizdata;
  protocolTime_t *ptime = (protocolTime_t *)gizdata;
  
#if MODULE_TYPE
  gprsInfo_t *gprsInfoData = (gprsInfo_t *)gizdata;
#else
  moduleInfo_t *ptModuleInfo = (moduleInfo_t *)gizdata;
#endif

  if((NULL == info) || (NULL == gizdata))
  {
    return -1;
  }

  for(i=0; i<info->num; i++)
  {
    switch(info->event[i])
    {
      case EVENT_Switch:
        currentDataPoint.valueSwitch = dataPointPtr->valueSwitch;
        GIZWITS_LOG("Evt: EVENT_Switch %d \n", currentDataPoint.valueSwitch);
        if(0x01 == currentDataPoint.valueSwitch)
        {
          led=1;//user handle灯亮
        }
        else
        {
          led=0;//user handle灯灭    
        }
        break;

      .........

  return 0;
}

7.采集数据上传,在gizwits_product.c 文件

void userHandle(void)
{
 if(led==0)
   currentDataPoint.valueSwitch = 0;
 else
   currentDataPoint.valueSwitch = 1;

}

8.主函数

int main(void)
{
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组
	GENERAL_TIM_Init();//定时器初始化
	USART1_Config();//串口一初始化,与WiFi模块通信,波特率9600
	USART2_Config();//串口二初始化,打印日志消息,波特率115200
	Init_LED();	//LED初始化
    userInit();//设备状态结构体初始化
	gizwitsInit();//
	
	gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link 模式接入
	while(1)
	{	
     userHandle();//用户采集
     gizwitsHandle((dataPoint_t *)&currentDataPoint);//协议处理
			
	}

}

四、下载APP,连接wifi模块