打印
[uCOS/RTOS]

【RT-Thread作品秀】天气闹钟

[复制链接]
2753|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 wuchenzi 于 2020-7-7 22:52 编辑

作者:李博

一、概述
在不久前的一个早晨,我被一阵闹铃叫醒后,像往常一样去上班,到公司后发现很多同事都带了伞,于是乎打开了兜里的砖块(手机),晚上回去的时候果然被淋了,虽然雨不是很大,但是被淋总是不爽,于是乎开始思考是否能做一个天气时钟,来拯救下我和像我一样出门不看天气的朋友,吧啦吧啦......。

二、RT-Thread使用情况概述
本项目使用RT_Thread国产操作系统开发,其丰富的软件包大大缩短了开发周期,本项目主要使用如下软件包:
1.tencent-iot-sdk:设备连接腾讯云开放平台(iot-explorer)。
2.webClient:获取天气
3.ntp:同步网络时间
4.cJSON:解析小程序下发数据

三、项目框架
1.总体交互逻辑图如下所示:




四、项目核心技术点
1.mqtt连接onenet

理论上mqtt连接onenet应该是本项目比较有挑战性的地方,好在rt_thread官方提供了腾讯云iot-explorer SDK软件包,使用env工具配置后直接使用即可,大大提高了开发效率。

2.定时逻辑处理

本项目创建了一个时间处理线程,线程起来后首先等待连网成功,然后调用ntp接口同步网络时间,接下来进入while(1)循环,每500ms获取当前时间,和本地存储的定时器进行对比,如果当前时间等于保存的时间,开始执行闹钟动作,同时本项目支持云端定时功能,使用云端定时可以完成更多定制内容。
3.天气获取逻辑处理

创建一个天气处理线程,线程起来后首先等待连网成功,然后获取一次天气情况,并发给onenet,小程序获取并显示。然后每隔一小时获取一次天气情况和同步ntp网络时间

void weather_task_thread(void* arg)
{
    int a =0;
    uint8_t *p = &a;
    USER_TIME_S current_time = { 0x00 };

    // user_dev_time_flash_read();
    while (4 != user_get_connect_status()->connect_status)
    {
        rt_thread_delay(1);
    }

    rt_thread_delay(3);
    rt_kprintf("################################### start to get weather");
    weather();

    while ( 1 )
    {
        user_get_time(¤t_time);
        if ((0 == current_time.hour)  && (0 == current_time.minute) && (0 == current_time.second) )
        {
            rt_kprintf("########################## sync weather and ntp time #####################\r\n");
            weather();
            user_sntp_time_synced();
        }

        rt_thread_mdelay(1000);
    }
    }

4.小程序访问腾讯IOT explorer

此处小程序我们使用了腾讯云一件生成方案,不需要开发,只需要拖拉控件配置接口,方便高效,效果如下:




设置定时器:

五、项目效果演示

哔哩哔哩:https://www.bilibili.com/video/BV1oV41167gy/

六、程序源码

地址:https://gitee.com/iot_camp/rtt_bk7252_sdk

天气闹钟 .pdf

560.24 KB

使用特权

评论回复

相关帖子

沙发
pangkitty| | 2020-7-7 09:14 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝