当前位置:   article > 正文

毕设常用云平台之机智云如何使用_机智云app可以直接在app上修改时间参数嘛

机智云app可以直接在app上修改时间参数嘛

机智云官网

https://www.gizwits.com/

在这里插入图片描述

登录或者注册登录云平台

进入开发者中心
在这里插入图片描述

创建智能产品

在这里插入图片描述

选择合适的方案类型

我这里选择自定义方案
在这里插入图片描述

自定义方案创建一个产品(WiFi单品)

在这里插入图片描述

定义自己需要的数据点(彩灯为例)

在这里插入图片描述

下载自己手机上使用的调试APP

在这里插入图片描述

给自己的WiFi模组刷入官方固件

  1. 准备官方的固件
    在这里插入图片描述

  2. 准备烧写软件
    ESP8266烧写软件非机智云提供
    在这里插入图片描述

  3. 进行烧写
    在这里插入图片描述

自动生成代码

选择通用平台,生成代码可移植性更高,具体如何移植可以参考我之前的博客,如果有需要大家可以留言我录制视频讲解
在这里插入图片描述

下载代码&代码移植

在这里插入图片描述## 参考最新版开发指南适配到自己的平台
在这里插入图片描述

官方移植参考

API 介绍
void gizwitsInit(void)
gizwits 协议初始化接口。
用户调用该接口可以完成 Gizwits 协议相关初始化(包括协议相关定时器、串口的初始化)。

void gizwitsSetMode(uint8_t mode)
参数 mode[in]:WIFI_MODE_TYPE_T 枚举值
参数为 WIFI_RESET_MODE,恢复模组出厂配置接口,调用会清空所有配置参数,恢
复到出厂默认配置。
参数为 WIFI_SOFTAP_MODE 或 WIFI_AIRLINK_MODE,配置模式切换接口,支持SoftAP 和 AirLink 模式。
参数为 WIFI_SOFTAP_MODE 时配置模组进入 SoftAp 模式,
参数为 WIFI_AIRLINK_MODE 配置模组进入 AirLink 模式。
参数为 WIFI_PRODUCTION_TEST,模组进入产测模式。
参 数 为 WIFI_NINABLE_MODE , 模 组 进 入 可 绑 定 模 式 , 可 绑 定 时 间 为
NINABLETIME(gizwits_protocol.h 中声明),默认为 0,表示模组永久可绑定。
void gizwitsGetNTP(void)
获取 NTP 时间接口。
用户调用该接口可以获取当前网络时间,MCU 发起请求,模组回复后将产生 WIFI_NTP
事件,用户可在 gizwitsEventProcess 函数中进行相应处理

void gizwitsHandle(dataPoint_t *dataPoint)
参数 dataPoint[in]:用户设备数据点。
该函数中完成了相应协议数据的处理及数据上报的等相关操作。
int8_t gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t
len)
参数 info[in]:事件队列
参数 data[in]:数据
参数 len [in]:数据长度
用户数据处理函数,包括 wifi 状态更新事件和控制事件。
a) Wifi 状态更新事件
WIFI_开头的事件为 wifi 状态更新事件,data 参数仅在 WIFI_RSSI 有效,data 值为
RSSI 值,数据类型为 uint8_t,取值范围 0~7。
b) 控制事件
与数据点相关,本版本代码会打印相关事件信息,相关数值也一并打印输出,用户
只需要做命令的具体执行即可。
int32_t gizwitsPassthroughData(uint8_t *data, uint32_t len)
参数 data[in]:数据
参数 len [in]:数据长度
用户调用该接口可以完成私有协议数据的上报。
3 移植
MCU 通用平台版代码对硬件平台的要求:
平台支持两个串口接口(至少一个),一个负责与 wifi 模组间的数据收发(必须),一个用于调试信息打印(可复用数据收发串口)。
平台支持定时器功能(1ms 精确定时)。
平台支持至少 2K 的 RAM 空间(太少会导致数据协议的处理异常)。
自动化代码生成工具已经根据用户定义的产品数据点信息,生成了对应的机智云串口协议层代码,用户需要移植代码到自己的工程中,完成设备的接入工作。

程序结构框图如下:
gizwits 逻辑和程序主流程已经帮用户实现,图中用黄色小注标明的部分待用户实现并完成代码的移植。
用户的移植工作主要分以下几个方面进行。
实现串口 A 驱动
MCU 方案需要用户实现一个串口,用于设备 MCU 与 WIFI 模组之间数据通信。用户首先需要实现串口接收中断服务函数接口 UART_IRQ_FUN(),该接口调用 gizPutData()函数实
现串口数据的接收并且写入协议层数据缓冲区。另外,用户需要实现串口的发送接口,
uartWrite()函数调用该接口实现设备数据的发送。需要特别注意的是 gizwits_product.c 文件
中 uartWrite()函数是伪函数,用户需根据自己实现的串口发送接口完善 uartWrite(),请注意
相关注释信息,以防出错。

下面以 STM32F103C8T6 平台为例,本例使用 USART2 与模组通信,串口初始化不在
此罗列,中断服务函数和串口发送报文函数实现如下:
/**

  • @brief USART2 串口中断服务函数
  • 接收功能,用于接收与 WiFi 模组间的串口协议数据
  • @param none * @return none /
    void UART_IRQ_FUN(void)
    {
    uint8_t value = 0;
    if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
    {
    USART_ClearITPendingBit(USART2,USART_IT_RXNE);
    value = USART_ReceiveData(USART2);
    gizPutData(&value, 1);
    }
    }
    /
    *
  • @brief 串口写操作,发送数据报文(报文数据中遇 0xFF 需要用 0x55 转义)到 WiFi 模组
  • @param buf : 数据地址
  • @param len : 数据长度
  • @return : 正确返回有效数据长度;-1,错误返回
    /
    int32_t uartWrite(uint8_t buf, uint32_t len)
    {
    uint32_t i = 0;
    if(NULL == buf)
    {
    return -1;
    }
    for(i=0; i<len; i++)
    {
    USART_SendData(UART, buf[i]);
    while (USART_GetFlagStatus(UART, USART_FLAG_TXE) == RESET);
    if(i >=2 && buf[i] == 0xFF)
    {
    USART_SendData(UART,0x55);
    while (USART_GetFlagStatus(UART, USART_FLAG_TXE) == RESET);
    }
    }
    return len;
    }
    实现定时器
    协议层使用到了一个系统时间,该事件单位为毫秒,所以要求用户实现一个毫秒定时器,
    并且实现中断服务函数 TIMER_IRQ_FUN(),该函数调用 gizTimerMs()实现协议层系统时间
    的维护。
    下面以 STM32F103C8T6 平台为例,本例使用 TIM3 实现时间维护,定时器初始化不在
    此罗列,中断服务函数实现如下:
    /
  • @brief 定时器 TIM3 中断处理函数
  • @param none * @return none /
    void TIMER_IRQ_FUN(void)
    {
    if (TIM_GetITStatus(TIMER, TIM_IT_Update) != RESET)
    {
    TIM_ClearITPendingBit(TIMER, TIM_IT_Update );
    gizTimerMs();
    }
    }
    实现芯片复位函数
    根据串口协议文档规定,模组可以发送命令复位设备 MCU,所以用户需要实现
    mcuRestart()接口完成设备的复位。
    下面以 STM32F103C8T6 平台为例,本例使用 TIM3 实现时间维护,定时器初始化不在
    此罗列,中断服务函数实现如下:
    /
    *
  • @brief MCU 复位函数
  • @param none * @return none /
    void mcuRestart(void)
    { __set_FAULTMASK(1);
    NVIC_SystemReset();
    }
    实现串口打印驱动
    如果用户需要打印日志调试信息,要求用户实现 printf 函数。协议层将用 GIZWITS_LOG
    宏替代 printf,进行相关信息的打印。如果用户不使用日志调试,那么需要将协议层相关日
    志打印部分的代码屏蔽掉方可运行。如果用户不使用日志调试,遇到问题请咨询机智云工程
    师。
    下面以 STM32F103C8T6 平台为例,本例使用 USART1 实现串口打印,串口初始化不
    在此罗列,printf 重定向实现如下:
    #ifdef GNUC
    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
    #else
    #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE f)
    #endif
    /
  • @brief printf 打印重定向
  • @param none * @return none /
    PUTCHAR_PROTOTYPE
    {
    USART_SendData(USART1,(u8)ch);
    while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
    return ch;
    }
    实现配置入网
    模组支持 SoftAp 和 AirLink 两种方式配置入网,相应接口为 gizwitsSetMode(),建议采
    用按键的方式,相应的按键动作触发执行具体的模式设置。
    另外,可以通过 gizwitsSetMode()接口复位模组,恢复默认出厂设置。
    下面以 STM32F103C8T6 平台为例,本例使用按键方式实现配置入网和控制模组复位功
    能,按键初始化不在此罗列,按键触发操作实现如下:
    /
    *
  • key1 按键长按处理
  • @param none * @return none /
    void key1LongPress(void)
    {
    printf(“KEY1 PRESS LONG ,Wifi Reset\n”);
    gizwitsSetMode(WIFI_RESET_MODE);
    }
    /
    *
  • key2 按键短按处理
  • @param none * @return none /
    void key2ShortPress(void)
    {
    printf(“KEY2 PRESS ,Soft AP mode\n”);
    gizwitsSetMode(WIFI_SOFTAP_MODE);
    }
    /
    *
  • key2 按键长按处理
  • @param none * @return none */
    void key2LongPress(void)
    {
    //AirLink mode
    printf(“KEY2 PRESS LONG ,AirLink mode\n”);
    gizwitsSetMode(WIFI_AIRLINK_MODE);
    }
    实现下行动作执行
    数 据 点 方 式 将 转 换 成 数 据 点 事 件 , 开 发 者 只 需 要 在 gizwits_product.c 文 件 的
    gizwitsEventProcess()相应事件下作具体处理即可。
    下面使用 STM32F103C8T6 平台,以微信宠物屋实现 APP 控制电机转动为例,
    motorStatus()函数是需要开发者自己实现,其他代码自动化工具会帮助开发者生成,
    gizwitsEventProcess()函数省略其他代码段,案例如下:
    case EVENT_MOTOR_SPEED:
    currentDataPoint.valueMotor_Speed = dataPointPtr->valueMotor_Speed;
    GIZWITS_LOG(“Evt:EVENT_MOTOR_SPEED %d\n”,currentDataPoint.valueMotor_Speed);
    motorStatus(currentDataPoint.valueMotor_Speed);
    break;
    实现上行数据采集
    该工程代码默认在 Gizwits/gizwits_product.c 文件中 userHandle()函数实现传感器数
    据采集,并且该函数在 while 循环执行,原则上用户只需要关心如何采集数据。特别提醒,
    默认 while 循环执行速度较快,需要针对不同的需求,用户可调整数据点数据的采集周期和
    接口实现位置,预防由于传感器数据采集过快引发的不必要的问题。数据点变量的初始化见
    Gizwits/gizwits_product.c 文件 userInit 函数,待用户完善。
    下面使用 STM32F103C8T6 平台,以微信宠物屋实现红外探测为例,irHandle()函数是需
    要开发者自己实现,其他代码自动化工具会帮助开发者生成,案例如下:
    void userHandle(void)
    {
    currentDataPoint.valueInfrared = irHandle();
    }
    实现模组状态处理
    参考接口 gizwitsEventProcess(),本版软件已经将 wifi 状态数据转换成了 event,开发者
    仅关注相应事件即可。用户可以通过获取到的 WIFI 状态做相应的逻辑处理。
    下面使用 STM32F103C8T6 平台,以微信宠物屋实现配置入网后接收到网络连接到路由
    器关闭 RGB 灯为例,ledRgbControl()函数是需要开发者自己实现,其他代码自动化工具会
    帮助开发者生成,gizwitsEventProcess()函数省略其他代码段,案例如下:
    case WIFI_CON_M2M:
    ledRgbControl(0,0,0);
    break;

参考工程获取

//群号:128282599
void userHandle(void)
{
	currentDataPoint.valueInfrared = irHandle();
}
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/646662
推荐阅读
相关标签
  

闽ICP备14008679号