Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【DIY数字仪表】RT-Thread移植touchgfx实现自动同步网络时间和天气预报(3)

【DIY数字仪表】RT-Thread移植touchgfx实现自动同步网络时间和天气预报(3)

作者头像
AIoT-KK
发布于 2020-07-31 08:40:41
发布于 2020-07-31 08:40:41
84500
代码可运行
举报
运行总次数:0
代码可运行

作者:KK 本期将介绍一下如何利用rtthread系统同步网络时间和天气预报到UI上。

1.移植网络协议栈

在 RT-Thread 所支持的 BSP 中,大部分都有支持以太网驱动。但具体到用户的硬件中,可能会和默认的代码有所差异。本文选择相对以太网驱动比较完善的 stm32 BSP进行介绍。 常见的以太网芯片种类 以太网芯片有很多种,大致可以分成 3 种:

  • 以太网芯片只有 PHY(物理接口收发器 ),需要单片机带 MAC(以太网媒体接入控制器 ),通过 MII 或者 RMII 接口和单片机通讯。例如 LAN8720。
  • 以太网芯片带 MAC 和 PHY,通过 SPI 接口和单片机通讯。例如 ENC28J60。
  • 以太网芯片带 MAC 和 PHY,通过 SPI 接口和单片机通讯,同时内置硬件协议栈,适合低速单片机。例如 W5500。

本项目使用的以太网芯片是第一种,硬件链接方式如下图所示:

驱动架构图

数据接收流程

当以太网硬件设备收到网络报文产生中断时,接收到的数据会被存放到接收缓冲区,然后以太网中断程序会发送邮件来唤醒 erx 线程,erx 线程会按照接收到的数据长度来申请 pbuf,并将数据放入 pbuf 的 payload 中,然后将 pbuf 通过邮件发送给 去处理。 数据发送流程

当有数据需要发送时,LwIP 会将数据通过邮件发送给 etx 线程,然后永久等待在 tx_ack 信号量上。etx 线程接收到邮件后,通过调用驱动中的 rt_stm32_eth_tx() 函数发送数据,发送完成之后再发送一次 tx_ack 信号量唤醒 LwIP 。

使能 lwIP 与 net dev 首先使能以太网外设:

启用 lwIP 与 net device:

测试网络

确认IP地址:

ping 测试:

2.同步时间

NetUtils 组件简介 RT-Thread NetUtils 作为网络工具合集,既有用于测试调试的 Ping 命令, 同步时间的 NTP 工具, 性能和带宽测试的 Iperf 、 NetIO,还有在嵌入式系统中广泛使用的轻量级文件传输工具 TFTP,方便地通过网络完成两个设备间的文件互传。 NTP 工具 NTP 是网络时间协议 (Network Time Protocol),它是用来同步网络中各个计算机时间的协议。在 RT-Thread 上实现了 NTP 客户端,连接上网络后,可以获取当前 UTC 时间,并更新至 RTC 中。

在 NetUtils 菜单栏使能 NTP 选项:

同步本地时间至 RTC 如果开启 RTC 设备,还可以使用下面的命令及 API 同步 NTP 的本地时间至 RTC 设备。

Finsh/MSH 命令效果如下:

同步本地时间至 RTC 函数原型为:time_t ntp_sync_to_rtc(void),返回值大于 0 成功,等于 0 失败。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main(void)
{
    time_t cur_time;
    cur_time = ntp_sync_to_rtc(NULL);
    if (cur_time)
    {
        rt_kprintf("Cur Time: %s", ctime((const time_t*) &cur_time));
    }
    else
    {
        rt_kprintf("NTP sync fail.\n");
    }
    return RT_EOK;
}

将时间同步至 Screen

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void Screen2View::handleTickEvent()
{
    now = time(RT_NULL);
    clock = gmtime(&now);

    digitalHours = clock->tm_hour;
    digitalMinutes = clock->tm_min;
    digitalSeconds = clock->tm_sec;
    digitalYear = clock->tm_year;
    digitalMon = clock->tm_mon;
    digitalDay = clock->tm_mday;    
    digitalWday = clock->tm_wday;

    analogHours = clock->tm_hour;
    analogMinutes = clock->tm_min;
    analogSeconds = clock->tm_sec;

    digitalClock1.setTime24Hour(digitalHours, digitalMinutes, digitalSeconds);
    analogClock1.setTime24Hour(analogHours, analogMinutes, analogSeconds);

    Unicode::snprintf(DateYearTextBuffer, DATEYEARTEXT_SIZE, "20%d", digitalYear-100);
    DateYearText.invalidate();

    Unicode::snprintf(DateDayTextBuffer, DATEDAYTEXT_SIZE, "%d", digitalDay);
    DateDayText.invalidate();

    Unicode::UnicodeChar monthText[DATEMONTHTEXT_SIZE];
    const char* months[] = { "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" };
    Unicode::strncpy(monthText, months[digitalMon], DATEMONTHTEXT_SIZE);

    Unicode::snprintf(DateMonthTextBuffer, DATEMONTHTEXT_SIZE, "%s", monthText);
    DateMonthText.invalidate();
}

3.同步天气预报

注册心知天气,获取网络API接口

location参数,我们根据请求的IP,自动获取所在位置的天气信息。

添加WebClient软件包 由于我们获取天气信息是通过访问心知天气的网络API,所以我们需要开启本地Web客户端。

由于API返回的数据是格式是JSON,所以还需要开启CJSON软件包用于解析数据。

最后,添加我们自己的用户代码,解析返回的数据即可。

使用命令行进行测试

将天气信息同步至 Screen 参考上篇文章,利用touchgfx的MVP架构:【DIY数字仪表】使用TouchGFX的MVP架构来实现GUI和硬件的双向交互(2)

代码开源地址:https://gitee.com/Aladdin-Wang/hellotouchGFX

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AIoT开源项目分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
RT-Thread进阶之网络框架
netdev 组件主要作用是解决设备多网卡连接时网络连接问题,用于统一管理各个网卡信息与网络连接状态,并且提供统一的网卡调试命令接口。其主要功能特点如下所示:
AIoT-KK
2020/07/13
2K0
RT-Thread进阶之网络框架
RT-Thread RTC设备学习笔记
RTC是什么呢?相信学习嵌入式的伙伴都熟悉,以下介绍引用自RT-Thread文档中心-RTC设备
杨源鑫
2020/05/21
3.6K0
【DIY数字仪表】RT-Thread结合TouchGFX实战教程(完)
2.命令行功能演示: 命令行添加了更多功能,不仅可以通过命令行调试系统,还可以通过命令行获取时间、天气信息、升级固件,也能把sd卡中的图片文件复制到spi flash中,命令行的更多功能,欢迎下载源代码体验。
AIoT-KK
2020/08/07
1.2K0
【DIY数字仪表】RT-Thread结合TouchGFX实战教程(完)
ESP8266简易WIFI天气时钟
本篇介绍了如何使用ESP8266,通过WIFI连网获取网络天气和网络时间,然后借助U8g2库,在OLED上显示当前时间和天气信息。
xxpcb
2022/10/04
1.9K1
ESP8266简易WIFI天气时钟
基于STM32的智能天气预报系统
这是本人的毕业设计,一个智能的天气预报系统。显示屏上显示各种天气指标及实时显示时间日期等。可以使用触摸屏输入城市名称搜索天气,也可以使用语音搜索天气。
正念君
2019/07/01
4.7K1
基于STM32的智能天气预报系统
RT-Thread实战笔记|语音控制获取心知天气信息
上篇文章介绍了LD3320的用法,小飞哥“灵光一现”,何不做一个语音控制获取天气信息的东东,既然想了,那就干它,来,淦~小飞哥前面说过rt-thread好用,那今天一起来看看到底有多好用...
用户8913398
2021/09/10
1K0
RT-Thread零基础快速入门第7讲——FinSH控制台「建议收藏」
本来我是打算先讲完RT-thread的内核,再讲设备和组件,但是考虑到后面很多地方都会用到FinSH控制台,所以我就先把这个讲了,这样大家在后面的学习就不会有很多疑问了。 FinSH 是 RT-Thread 的命令行组件(shell),它提供一套供用户在命令行调用的操作接口,主要用于调试或查看系统信息,可以使用串口 / 以太网 / USB 等方式与 PC 机进行通信。一般我们默认用串口1和PC机通讯,通过串口我们可以查看单片机运行的情况,也可以通过发送命令控制单片机执行某些操作。关于FinSH更多详细的内容,大家可以在官网上面查看。 FinSH控制台组件介绍:https://www.rt-thread.org/document/site/programming-manual/finsh/finsh/#
全栈程序员站长
2022/08/31
2.8K0
RT-Thread零基础快速入门第7讲——FinSH控制台「建议收藏」
基于STM32+RT-Thread的新冠肺炎疫情监控平台
上周末加班,这周末休息,有时间整理一篇之前做的基于RT-Thread的疫情监控平台。上一篇文章我们使用STM32F103 MCU裸机开发的方式实现了疫情监控平台。这次我们玩点高端的,使用RT-Thread Studio来实现同样的功能,一起来看看吧!
单片机点灯小能手
2020/08/18
1.6K0
基于STM32+RT-Thread的新冠肺炎疫情监控平台
基于RT-THREAD的桌面小工具
摘要 这个桌面小盒子是之前的东西,一直放着没有整理好。最近有空了就把他整理整理。 小盒子主要用来显示时间和天气预报,功能比较简单,其实还有很多可以玩的,懒得弄,所以就把最简单的整理出来。 软件是基于rt-thread, UI采用lvgl。 功能主要分为两个部分 第一部分--功能 功能部分主要分为两个部分,一个是NTP获取实时时间,一个是天气等信息。 NTP比较简单,RTT提供了相关API。代码如下: void get_local_time(void) { time_t now; now =
Rice加饭
2022/05/10
8100
基于RT-THREAD的桌面小工具
在 RISC-V 芯片 GD32V 上运行 RT-Thread
去年九月份的时候 RT-Thread 的 Andy Chen 组织定做了一块 GD32V 开发板,托 Andy 的福,我也搭车买了一块。
HackforFun
2020/04/27
1.4K0
【DIY数字仪表】STM32F429移植TouchGFX到RT-Thread系统(1)
硬件: 野火挑战者STM32F429 V1开发版,5寸屏 软件:最新版本的STM32CubeF4固件库,TouchGFXDesigner v4.13和 STM32CubeMX v5.6.1,开发环境MDK v5.29
AIoT-KK
2020/07/13
1.6K0
【DIY数字仪表】STM32F429移植TouchGFX到RT-Thread系统(1)
以太网中时间同步的那点事
对于普通人来讲,时间就是大脑神经元中记忆碎片构建的意识。正是由于神经元的记忆特征,才能在“现在”随时的回忆“过去”。也就是说“过去”存在于“现在”之中,“过去”也就是“现在”,没有“现在”也就没有“过去”,更没有所谓的“将来”。
网络交换FPGA
2019/10/29
4K0
以太网中时间同步的那点事
【DIY数字仪表】RT-Thread移植touchgfx使用sd卡升级固件和图片资源(4)
1.固件升级演示: 固件升级在第三个界面,已经提前把待升级的固件和图片bin文件放在了SD卡里,升级前软件版本为V1,升级后软件版本为V2,并且更改了表盘,升级完成后,会记录升级的时间,详细请看视频演示:
AIoT-KK
2020/08/07
1.9K0
STM32+ENC28J60+UIP协议栈实现WEB服务器示例
完整项目源码下载链接:https://download.csdn.net/download/xiaolong1126626497/18617694
DS小龙哥
2022/01/17
1.5K0
STM32+ENC28J60+UIP协议栈实现WEB服务器示例
STM32入门开发: LWIP网络协议栈移植(网卡采用DM9000)
本篇文章主要讲解如何在STM32F103工程里添加移植LWIP协议,最终完成TCP服务器、TCP客户端的通信测试。 网卡采用的是DM9000,工程代码中,采用STM32的FSMC接口来驱动DM900网卡,DM9000是并口网卡,引脚多,但是速度快,也可以采用其他网卡,SPI协议的、UART协议的等。 比如:ENC28J60。 因为主要是讲LWIP协议栈的移植,所以网卡相关的代码就没有细说(需要准备一个网卡可以正常通信的工程,再移植)。
DS小龙哥
2022/01/12
4.4K0
STM32入门开发: LWIP网络协议栈移植(网卡采用DM9000)
基于RT-Thread操作系统的 基础四轮组智能车设计与实践
学 校: 同济大学 队伍名称: 智行·龙卷风 参赛队员: 杨怡,韦炳宇,许泽华 带队教师: 张志明,余有灵
全栈程序员站长
2022/09/15
2.8K0
基于RT-Thread操作系统的 基础四轮组智能车设计与实践
浅谈数字音视频传输网络——AVB[通俗易懂]
本文将围绕:音频信号的数字化、以太网的传输方式、数字音频信号对以太网的要求、QoS服务质量、传统以太网传输实时数据流的方式、以太网音视频桥接(AVB)技术等几个方面展开说明。
全栈程序员站长
2022/07/30
4.4K0
浅谈数字音视频传输网络——AVB[通俗易懂]
【STM32H7】第7章 RL-TCPnet V7.X网络协议栈移植(RTX5)
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=95243 第7章   RL-TCPnet网络协议栈移植(RTX5) 本章教程为大家讲
Simon223
2020/09/07
9980
【STM32H7】第7章   RL-TCPnet V7.X网络协议栈移植(RTX5)
IEEE1588在数字化变电站时钟同步方面的应用
随着对IEC 61850标准研究的不断深入,国内外学者提出基于IEC61850通信标准体系建设数字化变电站的发展思路。数字化变电站与常规变电站的显著区别在于过程层传统的电流/电压互感器、断路器将被电子式电流/电压互感器、智能断路器取代。在数字化变电站中数据信息的共享程度和数据的实时性将得到大幅度提高。IEC61850标准对智能电子设备的时钟精度功能要求划分为5个等级(T1-T5),其中用于计量的T5等级精度达到1us。
NTP网络同步时钟
2020/07/23
7710
IEEE1588在数字化变电站时钟同步方面的应用
基于STM32设计的智能插座+人体感应灯(ESP8266+人体感应+手机APP)
手机APP: 采用QT设计,程序支持跨平台编译运行(Android、IOS、Windows、Linux都可以编译运行,对应平台上QT的环境搭建,之前博客已经发了文章讲解)
DS小龙哥
2022/01/12
3K0
基于STM32设计的智能插座+人体感应灯(ESP8266+人体感应+手机APP)
推荐阅读
相关推荐
RT-Thread进阶之网络框架
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验