【机智云Gokit3测评】设备接入-步骤二:程序移植

[复制链接]

1.写在前面

2.下载软件包

进入机智云官网的开发者中心后,点击“下载中心”(https://download.gizwits.com/zh-cn/p/92/93),点击“GoKit MCU示例工程”,选择“微信宠物屋 for GoKit 2/3 STM32 V03010101”,点击下载。

进入下载中心.jpg (354.2 KB, 下载次数: 0)

3 天前 上传

3.解压下载的文件包

该程序文件主要时驱动包,包含了STM32的各种驱动库,以及机智云做的外设驱动程序等。

解压后文档信息.jpg (46.56 KB, 下载次数: 0)

3 天前 上传

4.替换配置文件

将下载中心得到的CubeMX配置文件,替换掉自动生成代码中的原配置文件:

替换配置文件.jpg (67.77 KB, 下载次数: 0)

3 天前 上传

5.打开配置文件后重新生产配置文件

打开配置文件,点击重新生成对应配置的STM32代码。

重新生产配置文件.jpg (179.53 KB, 下载次数: 0)

3 天前 上传

6.移植驱动代码

将下载的文件夹名“驱动库代码_CubeMX版”里的内容全部复制到MCU_STM32F103C8x_source/hal文件目录下。

移植驱动文件.jpg (70.41 KB, 下载次数: 0)

3 天前 上传

移植驱动后文件内容.jpg (34.69 KB, 下载次数: 0)

3 天前 上传

7.添加移植的驱动文件

打开工程文件后,将移植的驱动文件全部添加到工程目录下;

添加驱动文件.jpg (61.34 KB, 下载次数: 0)

3 天前 上传

替换文件后内容显示.jpg (44.01 KB, 下载次数: 0)

3 天前 上传

8.添加头文件

在驱动代码的delay.c、hal_infrared.c、hal_motor.c、hal_rgb_led.c、hal_temp_hum.c文件加入”main.h”头文件

#include "main.h"

添加头文件main.jpg (23.3 KB, 下载次数: 0)

3 天前 上传

添加头文件main2.jpg (20.28 KB, 下载次数: 0)

3 天前 上传

添加头文件main3.jpg (16 KB, 下载次数: 0)

3 天前 上传

添加头文件main4.jpg (18.79 KB, 下载次数: 0)

3 天前 上传

添加头文件main5.jpg (9.17 KB, 下载次数: 0)

3 天前 上传

9.在代码中添加相应的函数调用

(1)在 MCU_STM32F103C8x_source\Src\main.c 和 MCU_STM32F103C8x_source\Gizwits\gizwits_product.c 文件中添加驱动库的头文件

#include "delay.h"

#include "hal_motor.h"

#include "hal_rgb_led.h"

#include "hal_temp_hum.h"

#include "hal_infrared.h"

(2)在 MCU_STM32F103C8x_source\Gizwits\gizwits_product.c 文件的 userInit( ) 函数中添加各sensor的初始化

void userInit(void)

{

memset((uint8_t *)&currentDataPoint, 0, sizeof(dataPoint_t));

delay_init(72); // 延时 初始化

rgbLedInit(); // RGB LED 初始化

dht11Init(); // 温湿度初始化

irInit(); // 红外初始化

motorInit(); // 电机初始化

motorStatus(0); // 电机转速初始化

}

(3)在 MCU_STM32F103C8x_source\Gizwits\gizwits_product.c 文件的 userHandle( ) 函数中添加只读型传感器数据点相关的代码

void userHandle(void)

{

uint8_t ret = 0;

static uint32_t thLastTimer = 0;

///< 新添加代码: 红外传感器数据获取

currentDataPoint.valueInfrared = irHandle();

///< 新添加代码: 温湿度传感器数据获取

if((gizGetTimerCount() - thLastTimer) > 2000) //上报间隔2S

{

ret = dht11Read((uint8_t *)&currentDataPoint.valueTemperature,

(uint8_t *)&currentDataPoint.valueHumidity);

if(ret != 0)

{

printf("Failed to read DHT11 [%d] \n", ret);

}

thLastTimer = gizGetTimerCount();

}

}

(4)在 MCU_STM32F103C8x_source\User\main.c 文件的 key2ShortPress( ) 函数与 key2LongPress( ) 函数中添加长/短按key2时的LED点亮代码

void key2ShortPress(void)

{

GIZWITS_LOG("KEY2 PRESS ,Soft AP mode\n");

#if !MODULE_TYPE

gizwitsSetMode(WIFI_SOFTAP_MODE);

#endif

//Soft AP mode, RGB red

ledRgbControl(250, 0, 0);

}

void key2LongPress(void)

{

//AirLink mode

GIZWITS_LOG("KEY2 PRESS LONG ,AirLink mode\n");

#if !MODULE_TYPE

gizwitsSetMode(WIFI_AIRLINK_MODE);

#endif

//AirLink mode, RGB Green

ledRgbControl(0, 250, 0);

}

(5)在代码\Gizwits\gizwits_product.c 中 gizwitsEventProcess() 函数中添加相应代码(代码中的注释//user handle的下一行即可加入自己的应用代码):

该函数主要功能是完成写类型外设的事件处理。

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; inum; i++)

{

switch(info->event)

{

case EVENT_LED_OnOff:

currentDataPoint.valueLED_OnOff = dataPointPtr->valueLED_OnOff;

GIZWITS_LOG("Evt: EVENT_LED_OnOff %d \n", currentDataPoint.valueLED_OnOff);

if(0x01 == currentDataPoint.valueLED_OnOff)

{

//user handle

ledRgbControl(254, 0, 0);

}

else

{

//user handle

ledRgbControl(0, 0, 0);

}

break;

case EVENT_LED_Color:

currentDataPoint.valueLED_Color = dataPointPtr->valueLED_Color;

GIZWITS_LOG("Evt: EVENT_LED_Color %d\n", currentDataPoint.valueLED_Color);

switch(currentDataPoint.valueLED_Color)

{

case LED_Color_VALUE0:

//user handle

ledRgbControl(currentDataPoint.valueLED_R, currentDataPoint.valueLED_G,

currentDataPoint.valueLED_B);

break;

case LED_Color_VALUE1:

//user handle

ledRgbControl(254, 254, 0);

break;

case LED_Color_VALUE2:

//user handle

ledRgbControl(254, 0, 70);

break;

case LED_Color_VALUE3:

//user handle

ledRgbControl(238, 30, 30);

break;

default:

break;

}

break;

case EVENT_LED_R:

currentDataPoint.valueLED_R = dataPointPtr->valueLED_R;

GIZWITS_LOG("Evt:EVENT_LED_R %d\n",currentDataPoint.valueLED_R);

//user handle

ledRgbControl(currentDataPoint.valueLED_R, currentDataPoint.valueLED_G,

currentDataPoint.valueLED_B);

break;

case EVENT_LED_G:

currentDataPoint.valueLED_G = dataPointPtr->valueLED_G;

GIZWITS_LOG("Evt:EVENT_LED_G %d\n",currentDataPoint.valueLED_G);

//user handle

ledRgbControl(currentDataPoint.valueLED_R, currentDataPoint.valueLED_G,

currentDataPoint.valueLED_B);

break;

case EVENT_LED_B:

currentDataPoint.valueLED_B = dataPointPtr->valueLED_B;

GIZWITS_LOG("Evt:EVENT_LED_B %d\n",currentDataPoint.valueLED_B);

//user handle

ledRgbControl(currentDataPoint.valueLED_R, currentDataPoint.valueLED_G,

currentDataPoint.valueLED_B);

break;

case EVENT_Motor_Speed:

currentDataPoint.valueMotor_Speed = dataPointPtr->valueMotor_Speed;

GIZWITS_LOG("Evt:EVENT_Motor_Speed %d\n",currentDataPoint.valueMotor_Speed);

//user handle

motorStatus(currentDataPoint.valueMotor_Speed);

break;

case WIFI_SOFTAP:

break;

case WIFI_AIRLINK:

break;

case WIFI_STATION:

break;

case WIFI_CON_ROUTER:

ledRgbControl(0, 0, 0);

break;

case WIFI_DISCON_ROUTER:

break;

case WIFI_CON_M2M:

break;

case WIFI_DISCON_M2M:

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);

break;

case MODULE_INFO:

GIZWITS_LOG("MODULE INFO ...\n");

#if MODULE_TYPE

GIZWITS_LOG("GPRS MODULE ...\n");

//Format By gprsInfo_t

#else

GIZWITS_LOG("WIF MODULE ...\n");

//Format By moduleInfo_t

GIZWITS_LOG("moduleType : [%d] \n",ptModuleInfo->moduleType);

#endif

break;

default:

break;

}

}

return 0;

}

9.编译文件

编译没有错误。

10.下一章节讲解烧写固件程序。

机智云代码移植_【机智云Gokit3测评】设备接入-步骤二:程序移植相关推荐

  1. 一文解锁华为云新技能-AIOT开发全流程【设备接入-ESP端侧数据收集[MQTT]-实时数据分析】(步步截图较详细)

    一文解锁华为云新技能-AIOT开发全流程[设备接入-ESP端侧数据收集[MQTT]-实时数据分析](步步截图较详细) 在这篇你将会接触到:从物联网工程师从硬件层-通信层到应用层全流程:开发华为云最基本 ...

  2. python词云代码手机_【云计算】爬取淘宝手机品牌词云分析(python)

    本文主要向大家介绍了[云计算]爬取淘宝手机品牌词云分析(python),通过具体的内容向大家展现,希望对大家学习云计算有所帮助. 淘宝手机信息的爬取,请看这边博客(点击这里),然后我们利用其中保存的文 ...

  3. 华为云桌面客户端_华为云CloudIDE的前世今生

    在华为开发者大会HDC.Cloud上,华为云发布了基于鲲鹏计算的开发者服务 - CloudIDE服务,为鲲鹏开发者提供了很好的云端开发体验.(延伸阅读:华为云CloudIDE,云时代的精创利器) 体验 ...

  4. 阿里云mysql价格_阿里云超级计算mysql价格

    Re阿里云的IO很不给力啊 有图有真相的啊. 这个是该机器的网络流量.这么低的流量 情何以堪 这就是 中国的阿里云啊?!! 和linode的vps比较起来,太搓了!! 希望解决处理! -------- ...

  5. 个人云 私有云 公有云_个人云简介

    个人云 私有云 公有云 是否想了解在实现数字化转型中实施DevOps的最佳实践? 下载免费电子书为什么DevOps是数字化转型的重要组成部分 ! 想像一下装满大型金属机器的简朴无窗房间. 所有这些都用 ...

  6. 阿里云技术白皮书_阿里云最新大作云原生架构白皮书解读

    简介:云原生的变革已经势不可挡,他带来的不止是技术革新,同时也是组织架构和商业模式的变革,随着类似OAM这样的云原生标准化应用分发的建立,云原生时代的操作系统将逐渐浮现于世 "云原生&quo ...

  7. JAVA看云判断天气_看云测天气_气象常识天气知

    看云测天气_气象常识天气知 因为古代没有先进的科技预报天气,所以古人在日常生活中通过对云的观察,总结出了很多的谚语,用以预测天气的变化.从云的形状.颜色.高低.薄厚.动向等很多方面都可以预测出天气的变 ...

  8. 阿里云mysql容量_阿里云RDS的mysql数据库占用空间超过90%的处理

    阿里云RDS数据库最大支持2T,目前已经占用了90%,如果进行分库或者迁移比较麻烦,思路是找出占用空间过大的日志或不重要的文件进行删除操作 查询所有数据库占用磁盘空间大小的SQL语句: show bi ...

  9. 华为云电脑.模式_华为云电脑支持全线,Huawei Share免费更新

    样张答案:上面黑鲨下面红魔. 最近,华为推出了华为云电脑APP.即一款登陆就可以利用云主机的Windows系统在手机和平板上运行PC程序的软件.不过,并不支持所有产品使用.昨天,华为宣布5月14日起, ...

最新文章

  1. 无需成对示例、无监督训练,CycleGAN生成图像简直不要太简单
  2. 2021年跨境电商市场怎么样?新手商家入驻还有机会吗?
  3. ie8一下解决圆角,阴影不兼容问题
  4. dw显示云服务器的数据库,dw如何连接云服务器
  5. C++多线程编程(3) 异步操作类 std::future std::promise std::async
  6. 使用IDEA在Maven中创建MyBatis逆向工程以及需要注意的问题(入门)
  7. linux 文件夹 775,Linux chmod目录权限命令图文详解
  8. Python乒乓球小游戏源代码
  9. win8虚拟机_老司机教你如何在虚拟机安装win8系统,双系统也可以这样实现
  10. html外联php,html如何添加css样式?行内式、内嵌式、外联式的优缺点
  11. [源码和文档分享]基于QT的英文文献的编辑与检索系统的实现
  12. 汽车软件合作开发中的分工、知识产权及质量责任
  13. web项目no such method exception
  14. hrbust 2366 Print rhombus
  15. JS中将中文数字转化为阿拉伯数字
  16. but GITEE.COM does not provide shell access
  17. 2022年浙江大华编程题
  18. 数字孪生城市白皮书(2021)
  19. xz文件的解压和压缩
  20. JavaScript的输入输出语句

热门文章

  1. 网页自动点击脚本(可用于自动评教)
  2. 解读指标 Mali-400MP4 GPU 指标
  3. R count函数_R语言系列第二期:R变量、脚本、作图等模块介绍
  4. android x86触摸失准,修复X98 air 3G 在android x86下的重力和触摸反向问题
  5. 用Python调教微信,实现自动回复 和 微信好友分布,好友性别图,好友标签
  6. easybuy源码_easybuy 一个具有基本功能的商品购物网站包括前端和后台 计 Jsp/Servlet 272万源代码下载- www.pudn.com...
  7. 登陆QQ手机版,免费拿精品靓号
  8. 【实践】——PowerBuilder登录+PB自带数据库
  9. 28岁程序身价过亿,从字节提前“退休
  10. qq163音乐网归属问题释疑