正点原子机智云移植F407 MCU选择其他平台

近期物联网综合应用课程设计,做一个关于手机APP控制智能家居的设计

这篇博客主要是讲述使用正点原子F407开发板+机智云开发的移植代码过程,以及数据点的分析,以下都是个人经验,如有错误敬请各位批评指正。

首先我们去正点原子的官方论坛www.openedv.com下载F4的相关资料,下载机智云移植文件,觉得麻烦的话可以去淘宝客服要,或者下载我发的资源,下载完之后我们在程序源码中打开机智云IOT实验1,协议移植实验,我在这里选用的是标准库的版本(个人不是很喜欢寄存器版本),将这个标准库复制到桌面。

如果你直接烧录这个本身自带的HEX文件也是可以的,但是这里面这是可以实现手机控制LED灯,而且只能是通过公版的机智云APP来控制,因为这个文件里面的Product  key  and secret 和你的自己创建的匹配不上,假设你有幸看到了这两个东西在的地方,把他直接修改为自己的key  and  secret  ,但是数据点对应不上,标识名都对应不上,因为对于速成的人,是没有办法仔细看协议的,最重要的是正点原子的教程都比较老了,里面移植的文件有点对应不上。

类似这个

好了,言归正传,开始移植。将协议移植实验复制一份到桌面上,我这边直接复制在我的D盘下,打开后,会有以下文件夹。

文件夹里包含了一些基本的c文件和h文件,都是一些stm32的底层库函数文件吧,可能是这个说法,反正就不用改,也绝对不要去改,除非报错出现很多头文件损失的error,类似reference from  xxx.o什么的错误,只会是两种问题,一种是没有添加相对应的头文件,要么就是你根本没有,怎么判断,就去看你的结构体指针,是不是在库里引用相关的H文件。

我们重点关注的是Gizwits   USER  以及待会平台上下载的文件Utils。

接下来做两个比较简单的移植,一个是控制LED灯了,另外一个是PWM调光吧。

我们先去机智云的开发者中心创建我们的数据点,如图

在APP界面一个是调光进度条,一个是BANGBANG开关,实物放在宿舍,在办公室没办法连接实物,大家应该也能知道。

数据点类型的定义和读写类型可以查看机智云的数据点定义手册(个人TIPS:如果你有安卓studio 开发的相关经验  我建议你可以多创建几个数据点,多创建了我可以选择不用,标识名嘛Android.text更好修改了,但是一旦你少了,你想要再添加一个数据点,那就麻烦了,特别是对于像我一样需要快速开发的,只需求应用阶段而不是需要服务器协议以及接口部分的。要么你再移植一遍,要么你在对应的地方加上结构体指针,KEY and  secret  也需要修改,但是这需要你有多次开发经验,也不是很可取)

创建完成之后,我们在MCU开发中心选择其他平台,将MCU移植代码下载下来,下载完成之后将整个文件夹复制到我刚刚说的协议移植实验里,全部覆盖就可以了。

整完之后,使用KEIL5打开user里面的工程文件,具体你缺少什么package支持包啊,动动小手百度一下检查怎么安装支持包。

第一步,打开工程文件后编译一下,发现有5个错误,

大概是这样的,

还记得我们复制common包里面的Utils吗,这些都文件都在里面,所以我们需要添加对应的文件,以及在Gizwits的文件夹下引用这些头文件,先添加文件夹,把对应的C文件添加到里面去,再在魔术棒下引用他的头文件,

然后编译,这样就可以把里面的文件引用进去了,这些应该都是基操吧,然后开始真正的移植,哪里少头文件再往里边添加。

第二步:解决这个时钟WARMING.在product.h添加  void gizTimerMs(void);对这个函数进行声明。

第三步:操作product.c

在文件最后添加USART_SendData(USART3,buf[i]);         while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); 

什么意思,我也不是很会,可能就是CDMA的意思吧。

找到mcurestart,添加软复位按时,这又是什么,别问,问就是我也不会。

第四步,修改MAIN.C文件里边

把product里边的userhandler函数剪切到主函数界面来,

在这里写逻辑的话就不用跳来跳去,而且我个人比较喜欢在这里使用USERHANDLE,因为这个函数只和你的设备有关,所以的信息都是你的设备上报的信息,不会涉及到你的WIFI模组,也和你的APP无关。

第五步:在product.c里面的dataPoint_t currentDataPoint;改成extern dataPoint_t currentDataPoint;

注意这里我们需要添加用户区当前设备状态结构体 extern dataPoint_t currentDataPoint;

总体移植在这里差不多是完成了,接下来就是对于case_event进行逻辑编写,如图

这里面的0X01代表的是高低电平和逻辑关系,就举个简单的例子,如果你是低电平触发,这里就应该是0x00,如果你也0x01那么这里的LED灯智能被强制转换成开启状态,就是他当前是1 , 你再给他置1,要么状态不变,要么强制转换,也就是状态和按钮相反,一个是启停状态,一个是控制按钮,对于407板子的ds0,ds1就无所谓,所以这里使用不同的LED灯一定要知道他灯的触发方式,实在不行到时候反一下就可以了。

currentDataPoint.valueLEDonoff是当前用户APP所设定的值,这里的值和设备一点关系也没有,就是APP所想要传递的值,和前面说的那个userhandle函数是不一样的吧。这里多做几遍就有心得了。

 

对了  在这里我在补充一点,LED1对应的管脚是哪个,自己去看LED.C和LED.H就好,管脚使能啊 结构体一步一步来不要弄错就行了。

我这边的LED2你们可能没有。只要看住你们自己的就行了。

接下来是一个pwm 脉宽调制器的问题,需要有定时器的一部分知识,具体还是查看一下PWM原理,以及时钟方面的知识,这里贴出代码,

 

然后大家可以看一下我PWM定义的结构体

在product.c里面添加

84M,每秒500个脉冲,但是注意为什么我在case_event传值的时候要乘以5呢,是因为我在数据点定义的时候的取值范围是0-100.因为这种板载的LED灯,亮度变化不明显,没有这种必要,当然这个大家随机选择,我在这里稍微解释一下。

终于差不多到最后一步了,来仔细盘一下main.c的代码,

userhandle 添加

添加协议初始化函数Gizwits_Init函数,

添加主函数,主函数里添加如下,

这里使用按键控制进行WIFI模式的设置,以及复位键的选择。

具体可以看我们的代码和演示视频。

给大家附上链接,第一写,想挣点积分,有问题可私聊。

我感觉我亏 了,服务器  APP 加keil代码只给5个积分,点我头像自取吧

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值