一、项目概述
实现该项目的使用的套件是 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