收藏官网首页
查看: 778|回复: 8

基于UCOSIII+机智云的简易远程格力空调遥控器

3

主题

21

帖子

679

积分

高级会员

Rank: 4

积分
679
发表于 2016-10-2 13:58:42 | 显示全部楼层 |阅读模式
成为机智云开发者
本帖最后由 Genius 于 2017-1-3 16:56 编辑

       夏天特别的热,特别是上完课以后,回到宿舍开空调要一段时间才能凉下来,于是我便用机智云的套件做了一个远程的空调遥控器,这样我可以在下课前就把宿舍的空调打开,在床上的时候也不用下去拿遥控器关空调,特别方便。下面是制作过程:做得不好,主要是给新手提供一个入门教程。本次使用的空调是格力空调,遥控器型号为:YB0F2
       第一步:要有注册一个开发者账号,这个我就不多说了,很简单。
       第二步:创建产品,如图1所示,点击创建;然后选择产品类型等,如图2所示;创建成功后,如图3所示;点击数据点菜单,创建数据点,如图4所示,因为我常用的就只有这两个功能,开空调和设温度,所以没有做其他的数据点,大家可以自行设置。
1.png

图1

2.png       

图2

3.png

图3
4.png
图4
        第三步:生成MCU代码包并下载,这里的主要是机智云的通信协议,我们可以把他移植到其他型号上,不一样是STM32F103C8xx的MCU。下载下来之后,可以看见如图5所示这几个文件:其中用红色框住的是最重要的,是跟机智云服务器进行数据收到的协议,不可更改,其他的可更改,wifi模组默认使用的是USART2,串口打印调试信息为USART1。
6.png
图5
       第四步:移植,根据自己的需要进行移植,由于我使用的是GoKit2的套件,我就全部移植进行入我建好的UCOSIII工程中。
       第五步:把GAgent固件烧录到wifi模组中。不是只有机智云的GoKit套件才可以使用机智云的服务,只要你有开发者账号就可以和使用有进行合作的WIFI模组就可以。但是你的WIFI模组要烧录GAgent固件,机智云对这个不开源。支持的模组如图6所示。
       汉枫LPB-100看这个帖子:http://club.gizwits.com/forum.ph ... 19&highlight=LPB100
       其他的自行搜索,没用过。
7.png
图6
       第六步:修改相应的函数:只要在int8_t gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len);相应的位置上写上自己所以执行的函数就行了。非常简单。
8.png
图7
       到这里就全部完成了,只要你下载一下Demo APP就可以进行控制了,会写APP的可以自己写一个。
       注意:在任务中执行gizwitsHandle((dataPoint_t *)¤tDataPoint);任务堆栈要为256,之前开128一跑就挂了。
       下面是我自己的工程文件: STM32F103C8T6Model-UCOSIII.zip (1.62 MB, 下载次数: 103)



本帖被以下淘专辑推荐:

3

主题

21

帖子

679

积分

高级会员

Rank: 4

积分
679
 楼主| 发表于 2017-1-6 20:09:49 | 显示全部楼层
本帖最后由 iDea 于 2017-1-7 10:14 编辑

最近又搞了一下MCU上面的程序,主要改到了按键配置入网的地方,源码是采用开定时器2(TIM2)的方式循环扫描,看是不是有被按下。
1.png

但是在UC/OS上,我们就不用这么麻烦了,因为我们有定时任务,而且优先级也很高的。所以这次我就改用定时器任务来代替定时器。我们要怎么做呢?首先要创建一个定时器任务:

  1. /*定时器1*/
  2. OS_TMR tmr1;
  3. void tmr1_callback_led(void *p_tmr, void *p_arg);
复制代码
  1. void tmr1_callback_led(void *p_tmr, void *p_arg)
  2. {
  3.         IWDG_FREE();
  4.         keyHandle((keysTypedef_t *)&keys);
  5. }
复制代码
我在这里连看门狗也一起喂了,最后我们再对定时器任务进行初始化和开始:
  1. /*初始化定时器1任务*/
  2. OSTmrCreate        ((OS_TMR                                  *)&tmr1,
  3.                               (CPU_CHAR             *)"tmr1_led",
  4.                               (OS_TICK               )0,//初始延迟0*10ms
  5.                               (OS_TICK               )1,//定时周期1*10ms
  6.                               (OS_OPT                )OS_OPT_TMR_PERIODIC,//周期模式
  7.                               (OS_TMR_CALLBACK_PTR   )tmr1_callback_led,
  8.                               (void                 *)0,
  9.                               (OS_ERR               *)&err);
  10. OSTmrStart(&tmr1,&err);//开启定时器1
复制代码
接下来,我们要把void keyParaInit(keysTypedef_t *keys)函数中初始化定时器的语句注释掉
2.png

最后修改一下消抖的时间,有需要的也可以修改一下长按计时的时间,我这里没有修改。因为运行起来的时间也是我想要的。这样就大功告成啦!
3.png

下次我看一下能不能把机智云的TIM3的基准时间也给用定时取代了。目测不行,一个时间片是10MS,TIM3每1ms自加一次,不知道改次成自加10行不行。试完了告诉大家。先更新这么多

3

主题

21

帖子

679

积分

高级会员

Rank: 4

积分
679
 楼主| 发表于 2017-1-7 10:26:19 | 显示全部楼层
成为机智云开发者
今年早上起来又改了一下我上面说的用定时任务代替定时器的东西,试了一下,没有问题,能正常运行,但是我不知道怎么做测试,我现在就把这个方法贴上来,有测试能力的同学可以跟我说一下怎么测试。下面是改的教程:
第一步:创建定时任务,先开一个定时器要用的堆栈:
  1. OS_TMR tmr2;
  2. void tmr2_gizwtime(void *p_tmr, void *p_arg);
复制代码
第二步:创建定时任务:
  1. /*初始化定时器2任务*/
  2. OSTmrCreate        ((OS_TMR                                  *)&tmr2,
  3.                        (CPU_CHAR             *)"tmr1_giztime",
  4.                        (OS_TICK               )0,//初始延迟0*10ms
  5.                        (OS_TICK               )1,//定时周期1*10ms
  6.                        (OS_OPT                )OS_OPT_TMR_PERIODIC,//周期模式
  7.                        (OS_TMR_CALLBACK_PTR   )tmr2_gizwtime,
  8.                        (void                 *)0,
  9.                        (OS_ERR               *)&err);
  10. OSTmrStart(&tmr2,&err);//开启定时器2
复制代码
第三步:写定时器2的任务函数,在这里,我们要先引用协议全局变量:
  1. extern gizwitsProtocol_t gizwitsProtocol;
  2. void tmr2_gizwtime(void *p_tmr, void *p_arg)
  3. {
  4.         gizwitsProtocol.timerMsCount += 10;
  5. }
复制代码
这里为什么要自加10?因为UC/OS中一个时间片是10ms,而机智云源码中使用定时器3来进行自加1,也就是1ms加1,所以我这里10ms自加10。溢出自动归零。
最后,我们再把void gizwitsInit(void);中的timerInit();注释掉。
4.png

这样就完成了,目前我也不能确定这种方法是否会引发一些问题,用用再看,说不定给自己挖了一个坑。

3

主题

12

帖子

118

积分

注册会员

Rank: 2

积分
118
发表于 2017-1-9 12:51:32 | 显示全部楼层
空调是红外遥控器,你的stm32c8t6上有相关遥控器的解码程序吗?空调是不是自身带有WIFI控制功能?

3

主题

21

帖子

679

积分

高级会员

Rank: 4

积分
679
 楼主| 发表于 2017-1-11 10:23:43 | 显示全部楼层
GKXW 发表于 2017-1-9 12:51
空调是红外遥控器,你的stm32c8t6上有相关遥控器的解码程序吗?空调是不是自身带有WIFI控制功能? ...

空调就是普通的空调,5年前的那种吧。没有写解码程序,只是自己把空调的码写在程序里,宿舍空调就一种,没有写学习功能。

6

主题

42

帖子

693

积分

高级会员

Rank: 4

积分
693
发表于 2017-1-16 10:33:29 | 显示全部楼层
iDea 发表于 2017-1-11 10:23
空调就是普通的空调,5年前的那种吧。没有写解码程序,只是自己把空调的码写在程序里,宿舍空调就一种, ...

6楼的问题是 STM32 如何将控制信号 输送给空调的,  “把空调的码写在程序里"------没理解这句是什么意思.

3

主题

21

帖子

679

积分

高级会员

Rank: 4

积分
679
 楼主| 发表于 2017-1-16 11:46:55 | 显示全部楼层
szuser 发表于 2017-1-16 10:33
6楼的问题是 STM32 如何将控制信号 输送给空调的,  “把空调的码写在程序里"------没理解这句是什么意思 ...

用红外啊,就是自己做一个可以联网的遥控器。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

QQ|加入QQ群

© 2011-2016 Gizwits ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表