admin管理员组

文章数量:1603255

目录

一、机智云介绍

二、固件下载

三、项目例程下载

四、代码移植

五、现在通过第五点配置好了,现在开始正式写代码,嘿嘿~~

六、配对连接

七、NTP(网络获取实时时间)的实现

九。网盘资料链接


一、机智云介绍

此处省略若干字。

二、固件下载

在这一篇文章中有讲到:记录:esp8266-01/01s如何下载固件(下载教程)_esp8266固件下载-CSDN博客

三、项目例程下载

1.创建项目:

登录机智云,创建一个账号,,再创建一个项目

产品名称可以自定义,其他的按照片里的设置就行。

2.添加数据点

编辑要创建的数据点,其中标志名命名跟c语言的命名规则一样,尽量命名自己看得懂的,后需要用到;显示名称可以是中文,数据点建立好后可以在网站中看到;由于温度时模块检测再传到机智云APP中,所以只需要只读类型就可以。其他的类型小伙伴们可以自己去试着玩玩。

这个就是建立好的数据点,左右拖动进度条可以看到有重新编辑或是删除数据点的功能

3.获取标准库例程,硬件平台选其他平台,红框的产品秘钥在左上角需要验证账号密码才能获取,输入完成后点击生成代码包,等待生成完成将他下载下来

4.下载完成后,红框的部分是我们需要的,还附带有一份开始指南,有兴趣的可以自己研究下

四、代码移植

1.移植代码之前要确保你的MCU具备一个串口负责打印信息(调试),一个串口负责与ESP8266-01S模块通信和一个1ms定时的定时器功能。

2.将从机智云下载的例程中的Gizwits和Uilts文件夹复制到自己的项目文件夹中,并导入到工程里,记得将文件夹的路径也添加好。

3.然后开始修改gizwits_product.c文件

(1)首先在gizwits_product.c找到这句代码复制到main.c文件,在gizwits_product.c中在这代码前加extern 声明。

main文件中报错先不管他。

(2)在gizwits_product.c找到这个mcuRestart函数,在函数里面加上这两句话

    __set_FAULTMASK(1); // 关闭所有中断
   NVIC_SystemReset(); // 复位

由于用到32的库函数,所以需要在gizwits_product.c文件顶部加上32的头文件,就不会报错

(3)将int32_t uartWrite(uint8_t *buf, uint32_t len)函数里for循环替换掉

 for(i=0; i<len; i++)
    {
        USART_SendData(USART3,buf[i]);//这个是使用串口三跟8266模块通信,可以根据自己需求改变
        while(USART_GetFlagStatus(USART3,USART_FLAG_TC) == RESET);
        if(i >=2 && buf[i] == 0xFF)
        {
            USART_SendData(USART3, 0x55);
            while(USART_GetFlagStatus(USART3,USART_FLAG_TC) == RESET);

        }
    }

至此,gizwits_product.c文件需要修改的地方就都写完了。


4.我们将两个串口,1ms定时器代码加进来

(1)先添加一个time3定时器的初始化文件进来,记得把文件路径加上哦。

然后加串口1跟串口3初始化文件,我用的串口三跟wifi模块通信,所以在串口三的中断函数里加上红框的代码,以及一个机智云头文件,大家若是串口1跟串口3没被占用,可以直接无脑复制我的串口初始化文件进工程,在底部网盘链接里哦。

#include "usart3.h"
#include "gizwits_product.h"


void USART3_IRQHandler(void)
{
    u8 res;
    if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据
    {
        res = USART_ReceiveData(USART3);
        gizPutData(&res, 1); // 数据写入到缓冲区
    }
}

5.接下来是配置主函数main.c这个文件

(1)首先将机智云,添加的串口,定时器头文件声明一下

(2)在main.c中添加Gizwits_Init函数,对机智云需用到功能进行初始化。()

(3)在mai函数中对用到的函数进行初始化,串口1是用来打印机智云信息的,可以用串口1查看是否与机智连云接成功。

(4)在main.c文件末尾需要添加定时器3的中断函数,并将机智云的1ms计时函数加进去,但是需要先将机智云1ms函数声明一下,才能用得到,在gizwits_product.h文件中进行声明,如图。

然后在main.c文件中添加定时器3的中断函数


//定时器 3 中断服务程序 1ms中断
void TIM3_IRQHandler(void) //TIM3 中断
{
    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查 TIM3 更新中断发生与否
    {
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除 TIMx 更新中断标志
        gizTimerMs();//系统毫秒定时
    }
}

(5)将这两个函数放到主循环中,机智云才能一直获取数据

        userHandle();//用户采集
        gizwitsHandle((dataPoint_t *)&currentDataPoint);//协议处理

(6)配对时需要做个按键,按键按下的时候发送配对指令,让wifi模块进入AirLink连接模式。将下面这两句话加入按键判断中就行了。

gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link模式接入    

(7)最后有的小伙伴会用到printf函数,使用这个函数在设置里需要勾选图中选项哦,不然没办法使用,

五、现在通过第五点配置好了,现在开始正式写代码,嘿嘿~~

1.写了那么多简单介绍下使用到的机智云函数

userHandle函数,是用户在机智云官网定义的一些只读的数据点,将里面的注释解开,将自己想要上传的值幅值进去就行了,例如下图,红框中的是你在机智云官网中创建项目时自己定义的变量,需要自己记住,不要在这懵逼了,等号右边是自己软件软件获取的值。

userInit函数是对机智云APP中的值做个初始化,这函数不操作也可以。

gizwitsEventProcess函数是你有添加布尔值的就在这找,里面有些user handle的就是用户编写代码的地方。用if else对布尔值0,1,两个状态的判断,自己根据需求写就行了。

六、配对连接

打开机智云APP,按图片顺序来

在这部输入自己的wifi账号密码,一定要是2.4G网段的哦,5G网络是连不上地。

到这一步先不要点完成上述操作,先按一下设计的进入配对模式的按键,可以通过串口一看到进入成功的话会发一条进入ARLINK配对信息。在点完成上述操作,然后就是等待配对成功,配对完成后回调到主界面,显示自己的设备。设备变灰色就是断开连接。

七、NTP(网络获取实时时间)的实现

顺带讲下用机智云获取NTP实时时间的操作吧

(1)首先定义一个全局变量并引用OLED的头文件

u8 wifi_sta;

(2)在userHandle函数中加入这段代码若是网络连接成功就多次请求NTP网络时间,记得网络时间获取不要那么快哦,

static u16 t=0;
         if(wifi_sta)
         {
            t++;
         if(t==500)
         {
             t=0;
             gizwitsGetNTP();//请求 NTP 网络时间
         }
        }else 
         { if(t!=0) t=0; }

(3)在gizwits_product.c文件中找到gizwitsEventProcess函数,在switch里找到图中红框标注的位置将下面代码幅值进去,最终效果如红框标注.CASE语句中WIFI_NTP所打印的内容就是网络时间,将他们复制到自己的OLED显示语句中就行了,注意哦,只有成功配对后才会显示是时间。

 case WIFI_CON_M2M:
            wifi_sta = 1;   //wifi已连接
            break;
        case WIFI_DISCON_M2M:
            wifi_sta = 0;    //wifi已断开
            break;
        case WIFI_RSSI:
            GIZWITS_LOG("RSSI %d\n", wifiData->rssi);
            break;
        case TRANSPARENT_DATA:
            GIZWITS_LOG("TRANSPARENT_DATA \n");
            //user handle , Fetch data from [data] , size is [len]
            break;
        case WIFI_NTP:
            GIZWITS_LOG("WIFI_NTP : [%d-%d-%d %02d:%02d:%02d][%d] \n",ptime->year,
                                                ptime->month,ptime->day,ptime->hour,ptime->minute,ptime->second,ptime->ntp);
            OLED_ShowNum(4,1,ptime->year,4);
            OLED_ShowChar(4,5,'-');
            OLED_ShowNum(4,6,ptime->month,1);
            OLED_ShowChar(4,7,'-');
            OLED_ShowNum(4,8,ptime->day,1);
            OLED_ShowChar(4,9,' ');
            OLED_ShowNum(4,10,ptime->hour,2);
            OLED_ShowChar(4,12,'.');
            OLED_ShowNum(4,13,ptime->minute,2);
            break;

九。网盘资料链接

链接: https://pan.baidu/s/1RN8eZGTC8-49JhAo3_uWUQ?pwd=pzxw 提取码: pzxw 复制这段内容后打开百度网盘手机App,操作更方便哦

本文标签: 机智实时代码时间ntp