基于UCOSIII+机智云的简易远程格力空调遥控器
本帖最后由 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所示。 ESP8266看这个帖子:http://club.gizwits.com/forum.ph ... 1&highlight=ESP8266 汉枫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一跑就挂了。 下面是我自己的工程文件:
赞一个 顶起:):):):):):) 本帖最后由 iDea 于 2017-1-7 10:14 编辑
最近又搞了一下MCU上面的程序,主要改到了按键配置入网的地方,源码是采用开定时器2(TIM2)的方式循环扫描,看是不是有被按下。
但是在UC/OS上,我们就不用这么麻烦了,因为我们有定时任务,而且优先级也很高的。所以这次我就改用定时器任务来代替定时器。我们要怎么做呢?首先要创建一个定时器任务:
/*定时器1*/
OS_TMR tmr1;
void tmr1_callback_led(void *p_tmr, void *p_arg);void tmr1_callback_led(void *p_tmr, void *p_arg)
{
IWDG_FREE();
keyHandle((keysTypedef_t *)&keys);
}我在这里连看门狗也一起喂了,最后我们再对定时器任务进行初始化和开始:
/*初始化定时器1任务*/
OSTmrCreate ((OS_TMR *)&tmr1,
(CPU_CHAR *)"tmr1_led",
(OS_TICK )0,//初始延迟0*10ms
(OS_TICK )1,//定时周期1*10ms
(OS_OPT )OS_OPT_TMR_PERIODIC,//周期模式
(OS_TMR_CALLBACK_PTR )tmr1_callback_led,
(void *)0,
(OS_ERR *)&err);
OSTmrStart(&tmr1,&err);//开启定时器1接下来,我们要把void keyParaInit(keysTypedef_t *keys)函数中初始化定时器的语句注释掉
最后修改一下消抖的时间,有需要的也可以修改一下长按计时的时间,我这里没有修改。因为运行起来的时间也是我想要的。这样就大功告成啦!
下次我看一下能不能把机智云的TIM3的基准时间也给用定时取代了。目测不行,一个时间片是10MS,TIM3每1ms自加一次,不知道改次成自加10行不行。试完了告诉大家。先更新这么多
今年早上起来又改了一下我上面说的用定时任务代替定时器的东西,试了一下,没有问题,能正常运行,但是我不知道怎么做测试,我现在就把这个方法贴上来,有测试能力的同学可以跟我说一下怎么测试。下面是改的教程:
第一步:创建定时任务,先开一个定时器要用的堆栈:
OS_TMR tmr2;
void tmr2_gizwtime(void *p_tmr, void *p_arg);第二步:创建定时任务:
/*初始化定时器2任务*/
OSTmrCreate ((OS_TMR *)&tmr2,
(CPU_CHAR *)"tmr1_giztime",
(OS_TICK )0,//初始延迟0*10ms
(OS_TICK )1,//定时周期1*10ms
(OS_OPT )OS_OPT_TMR_PERIODIC,//周期模式
(OS_TMR_CALLBACK_PTR )tmr2_gizwtime,
(void *)0,
(OS_ERR *)&err);
OSTmrStart(&tmr2,&err);//开启定时器2第三步:写定时器2的任务函数,在这里,我们要先引用协议全局变量:
extern gizwitsProtocol_t gizwitsProtocol;
void tmr2_gizwtime(void *p_tmr, void *p_arg)
{
gizwitsProtocol.timerMsCount += 10;
}这里为什么要自加10?因为UC/OS中一个时间片是10ms,而机智云源码中使用定时器3来进行自加1,也就是1ms加1,所以我这里10ms自加10。溢出自动归零。
最后,我们再把void gizwitsInit(void);中的timerInit();注释掉。
这样就完成了,目前我也不能确定这种方法是否会引发一些问题,用用再看,说不定给自己挖了一个坑。
空调是红外遥控器,你的stm32c8t6上有相关遥控器的解码程序吗?空调是不是自身带有WIFI控制功能? GKXW 发表于 2017-1-9 12:51
空调是红外遥控器,你的stm32c8t6上有相关遥控器的解码程序吗?空调是不是自身带有WIFI控制功能? ...
空调就是普通的空调,5年前的那种吧。没有写解码程序,只是自己把空调的码写在程序里,宿舍空调就一种,没有写学习功能。 iDea 发表于 2017-1-11 10:23
空调就是普通的空调,5年前的那种吧。没有写解码程序,只是自己把空调的码写在程序里,宿舍空调就一种, ...
6楼的问题是 STM32 如何将控制信号 输送给空调的,“把空调的码写在程序里"------没理解这句是什么意思.
szuser 发表于 2017-1-16 10:33
6楼的问题是 STM32 如何将控制信号 输送给空调的,“把空调的码写在程序里"------没理解这句是什么意思 ...
用红外啊,就是自己做一个可以联网的遥控器。 谢谢分享。好东西 楼主你好,我也想做一个类似的,想问问红外发射器用的硬件是什么?stm32芯片开发板上面有红外发射器吗 你用的开发板吗?我用的正点原子的,只有红外接收功能,没有发射功能 lifuyao 发表于 2017-8-15 20:23
楼主你好,我也想做一个类似的,想问问红外发射器用的硬件是什么?stm32芯片开发板上面有红外发射器吗 ...
红外发射就用的一个三极管放大驱动红外发射管。很简单的电路 lifuyao 发表于 2017-8-15 20:25
你用的开发板吗?我用的正点原子的,只有红外接收功能,没有发射功能
我自己画的板子 iDea 发表于 2017-8-15 20:28
我自己画的板子
自己画的板子是什么意思,能解释一下吗? lifuyao 发表于 2017-8-17 22:35
自己画的板子是什么意思,能解释一下吗?
自己画的PCB,自己焊的板子
页:
[1]