基于 Wio Terminal 实现的网络天气预报助理

基于 Wio Terminal 实现的网络天气预报助理

本项目实现了一个自动联网的天气预报仪,在设计界面显示温湿度、天气情况、空气质量以及未来三天内的天气变化。同时显示一个电子时钟信息,方便查看时间。
electronics

一、项目概述

实现该项目的使用的套件是 Seeed 推出的 Wio Terminal,Wio Terminal 使用功基于SAMD51的微控制器,使用Realtek RTL8720DN 提供的无线连接,同时支持蓝牙和WIFI,为物联网项目提供了平台。与Arduino 和 MicroPython 兼容。



该套件有大量丰富的模块,对于这个项目我们主要使用到的模块和对应实现的功能如下:
2.4英寸的 LCD 屏幕 --> 显示信息
RTL8720DN 模块 --> 连接网络,获取天气和时钟信息
五向按键 --> 切换显示界面

二、功能实现

首先我们将要获取的数据定义为一个结构体,方便在各个模块中调用,包括的数据如下:
struct futureWeatherDef{
  char date[11];
  char weather[12];
  char humidity[5];
  char lowTemperature[5];
  char highTemperature[5];
};

struct weatherDef{
  char nowWeather[10];    //当前天气
  char nowTemperature[5]; //当前温度
  char nowHumidity[5];    //当前湿度
  char airQuality[10];    //空气质量
  char PM2_5[5];          //PM2.5
  char aqi[5];            //aqi指数
  struct futureWeatherDef futureDays[3];//未来三天的天气
};

2.1、获取天气数据
本项目要获取的数据包括当前的天气情况、温度、湿度和空气质量,以及未来三天的天气情况。
这里选取的天气 API 接口是心知天气,其提供的试用版完全满足我们这个项目的要求。
其使用说明可以看官方手册:《心知天气 API 使用手册》
下面我们分别说明如何获取所要的当地的天气信息(本文以我所在的深圳为例)。
(值得注意的是,下文中的http请求所用到的秘钥(key=)要使用自己注册的心知天气提供的秘钥,不然会失败。)

2.1.1、获取当前天气
在浏览器可以使用 https://api.seniverse.com/v3/weather/now.json?key=STsH4Cit44tZIFsMn&location=shenzhen&language=zh-Hans&unit=c 来请求深圳现在的天气,结果如下,

由上可知获取当前的天气数据是成功的。

2.1.2、获取当前空气质量
在浏览器可以使用 https://api.seniverse.com/v3/air/now.json?key=STsH4Cit44tZIFsMn&location=shenzhen&language=zh-Hans&scope=city 来请求深圳现在的天气,结果如下,

由返回的 json 数据我们可以知道很多有用的天气数据,比如 aqi、pm2.5等数据。

2.1.3、获取未来三天的天气情况
在浏览器可以使用 https://api.seniverse.com/v3/weather/daily.json?key=STsH4Cit44tZIFsMn&location=shenzhen&language=zh-Hans&unit=c&start=1&days=3 来请求深圳现在的天气,结果如下,

我们可以得到未来三天的天气状态,包括天气情况、温度、湿度等比较重要的数据。

2.1.4、具体到 arduino 如何获取?
首先,我们需要让套件连接网络,按照这篇官方文档实现即可:https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/
接下来就是使用该套件 arduino 库调用,具体内容可以参考这篇文章:《获取并解析心知天气数据》,已经描述地很清楚了。
这篇文章提供了将返回数据转换成 json 格式的方法,至此,我们已经成功获取到了所要的天气数据。

2.2、获取时间信息
这里要使用到 RTC 结合网络获取当天具体的时间,官方提供的这篇文章已经解决所有问题了:https://wiki.seeedstudio.com/Wio-Terminal-RTC/ 。

2.3、五向按键的使用
还是献上官方文档:https://wiki.seeedstudio.com/Wio-Terminal-Switch/,我们目前只实现了两个界面的切换,只使用了左右两个按键,就是简单的来回切换
if (buttonState != WIO_BUTTON_NONE) //如果有按键按下
{
    if (buttonState == WIO_5S_LEFT_EVENT)//向左
    {
        menu_index -= 1;
        if (menu_index < 0) menu_index = 1; //界面1
    }
    else if (buttonState == WIO_5S_RIGHT_EVENT) //向右
    {
        menu_index += 1;
        if (menu_index > 1) menu_index = 0; //界面0
    }

    buttonState = WIO_BUTTON_NONE;//清除状态
}

2.4、显示界面设计
对于这块模块提供的2.4寸彩色屏幕,如果颜色不搞地丰富点,都对不起它?
如何使用这个套件的LCD屏幕?官网的资料就很丰富了,请看:https://wiki.seeedstudio.com/Wio-Terminal-LCD-Overview/,我就无需赘言了。
首先先设计一个背景图片,我用 PS 大概做了一下如下的图片,大小就是这块屏幕的大小(320X240)-,由于美工不行,做的有点丑,勿喷。


然后在获取数据之后往界面对应位置填充即可,下面是实际的效果图:


至于上文中所使用的天气图片,也是通过加载图片的方式实现的。


而对于要显示的未来三天的天气情况,我们直接在另外一个界面显示即可:


三、功能展示

对于本项目的源代码,我已经上传到 github,有兴趣的可以去查看一下:https://github.com/Eureka1024/weather-forecast-assistant。
效果演示如下:


————————————————
链接:https://blog.csdn.net/m0_37697335/article/details/122140710


评论:
相关文章
基于 TinyML的语音识别机器人车

在本文中,我将在 Wio 终端上制作一个带有内置麦克风的声控机器人车,以通过 TinyML 识别行驶、停止和背景噪音。

相关创作
这是由一个支持WiFi的ESP32单片机和一个7.5英寸电子墨水屏组成天气显示器。
热度:469
项目是基于 ESP32 处理器的自主 GPS 跟踪器,可以支持常规SIM800扩展板来管理2G GSM通信,并且与大多数3.3V的GPS模块兼容。
热度:354
HoloCubic 是一个带网络功能的伪全息透明显示桌面站,基于ESP32PICO-D4打造。
热度:318
基于ESP32-S3,板载1.69寸LCD总成接口、蜂鸣器、SD卡槽、AXP173电源管理,双排母引出大部分引脚供底板拓展功能。
热度:138
本项目是以ESP32为核心,打造一个多功能集合的综合性极强的小模块。
热度:113
OMOTE是一个基于ESP32-PICO-D4的开源通用遥控器。它的电容式2.8英寸触摸屏为切换设备和设置提供了直观而快捷的用户界面。
热度:93
基于ESP32的电子墨水屏日历,支持通过 OpenWeatherMap 实现天气显示等功能。
热度:89
LILYGO TTGO T-Watch-2020编程开发可穿戴设备 ESP32可编程手表
热度:70
用树莓派做了个产品级磁带随身听,好看又好听,开源了!
热度:70
最新资源
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。