收藏官网首页
查看: 24996|回复: 15

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

7

主题

92

帖子

1587

积分

金牌会员

Rank: 6Rank: 6

积分
1587
跳转到指定楼层
楼主
发表于 2016-10-2 13:58:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
校园创客福利
本帖最后由 Genius 于 2017-1-3 16:56 编辑

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

图1

      

图2


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



本帖被以下淘专辑推荐:

7

主题

92

帖子

1587

积分

金牌会员

Rank: 6Rank: 6

积分
1587
地板
 楼主| 发表于 2017-1-6 20:09:49 | 只看该作者
本帖最后由 iDea 于 2017-1-7 10:14 编辑

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

但是在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)函数中初始化定时器的语句注释掉

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

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

7

主题

92

帖子

1587

积分

金牌会员

Rank: 6Rank: 6

积分
1587
5#
 楼主| 发表于 2017-1-7 10:26:19 | 只看该作者
汉枫LPB120模块
今年早上起来又改了一下我上面说的用定时任务代替定时器的东西,试了一下,没有问题,能正常运行,但是我不知道怎么做测试,我现在就把这个方法贴上来,有测试能力的同学可以跟我说一下怎么测试。下面是改的教程:
第一步:创建定时任务,先开一个定时器要用的堆栈:
  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();注释掉。

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

6

主题

27

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
6#
发表于 2017-1-9 12:51:32 | 只看该作者
空调是红外遥控器,你的stm32c8t6上有相关遥控器的解码程序吗?空调是不是自身带有WIFI控制功能?

7

主题

92

帖子

1587

积分

金牌会员

Rank: 6Rank: 6

积分
1587
7#
 楼主| 发表于 2017-1-11 10:23:43 | 只看该作者
GKXW 发表于 2017-1-9 12:51
空调是红外遥控器,你的stm32c8t6上有相关遥控器的解码程序吗?空调是不是自身带有WIFI控制功能? ...

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

6

主题

49

帖子

1245

积分

金牌会员

Rank: 6Rank: 6

积分
1245
8#
发表于 2017-1-16 10:33:29 | 只看该作者
iDea 发表于 2017-1-11 10:23
空调就是普通的空调,5年前的那种吧。没有写解码程序,只是自己把空调的码写在程序里,宿舍空调就一种, ...

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

7

主题

92

帖子

1587

积分

金牌会员

Rank: 6Rank: 6

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

用红外啊,就是自己做一个可以联网的遥控器。

0

主题

4

帖子

108

积分

注册会员

Rank: 2

积分
108
10#
发表于 2017-7-6 00:16:13 | 只看该作者
校园创客福利
谢谢分享。好东西

0

主题

3

帖子

19

积分

新手上路

Rank: 1

积分
19
11#
发表于 2017-8-15 20:23:21 | 只看该作者
楼主你好,我也想做一个类似的,想问问红外发射器用的硬件是什么?stm32芯片开发板上面有红外发射器吗

点评

红外发射就用的一个三极管放大驱动红外发射管。很简单的电路  详情 回复 发表于 2017-8-15 20:27

0

主题

3

帖子

19

积分

新手上路

Rank: 1

积分
19
12#
发表于 2017-8-15 20:25:16 | 只看该作者
你用的开发板吗?我用的正点原子的,只有红外接收功能,没有发射功能

点评

我自己画的板子  详情 回复 发表于 2017-8-15 20:28

7

主题

92

帖子

1587

积分

金牌会员

Rank: 6Rank: 6

积分
1587
13#
 楼主| 发表于 2017-8-15 20:27:45 | 只看该作者
lifuyao 发表于 2017-8-15 20:23
楼主你好,我也想做一个类似的,想问问红外发射器用的硬件是什么?stm32芯片开发板上面有红外发射器吗 ...

红外发射就用的一个三极管放大驱动红外发射管。很简单的电路

7

主题

92

帖子

1587

积分

金牌会员

Rank: 6Rank: 6

积分
1587
14#
 楼主| 发表于 2017-8-15 20:28:30 | 只看该作者
lifuyao 发表于 2017-8-15 20:25
你用的开发板吗?我用的正点原子的,只有红外接收功能,没有发射功能

我自己画的板子

0

主题

3

帖子

19

积分

新手上路

Rank: 1

积分
19
15#
发表于 2017-8-17 22:35:19 | 只看该作者
教您5分钟接入机智云,实现傻瓜式开发
iDea 发表于 2017-8-15 20:28
我自己画的板子

自己画的板子是什么意思,能解释一下吗?

点评

自己画的PCB,自己焊的板子  详情 回复 发表于 2017-8-18 19:14

7

主题

92

帖子

1587

积分

金牌会员

Rank: 6Rank: 6

积分
1587
16#
 楼主| 发表于 2017-8-18 19:14:55 | 只看该作者
lifuyao 发表于 2017-8-17 22:35
自己画的板子是什么意思,能解释一下吗?

自己画的PCB,自己焊的板子
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

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