首先的首先,吐槽一波机智云的教程。官方的教程总是让下它那个微信宠物屋的代码,一步看结果。拜托!就不能来个一步一步地教程吗!还有那个宠物屋的代码看得很头痛啊。总而言之,官方的教程给我的感觉就是很凌乱。
按习惯,拿到板子先点个灯,下面就来一步一步实现点灯功能。
一、给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 *)¤tDataPoint);//协议处理
}
}
四、下载APP,连接wifi模块