FunPack 第12期 Wio Terminal
实现功能
本次选择了完成任务二:制作一个自动联网的天气预报仪,在界面上显示温湿度、天气情况、空气质量以及未来三天的天气变化。
实现代码介绍
天气数据信息的获取:
本次使用的平台为心知天气平台,可以免费使用,本次使用了试用功能。天气数据的获取主要使用了以下5个API
天气实况:https://docs.seniverse.com/api/weather/now.html
逐日天气预报:https://docs.seniverse.com/api/weather/daily.html
空气质量实况:https://docs.seniverse.com/api/air/now.html
日出日落时间:https://docs.seniverse.com/api/geo/sun.html
月出月落时间:https://docs.seniverse.com/api/geo/moon.html
详细代码介绍:
1、创建client对象并连接WiFi
WiFiClient client;
WiFi.begin(ssid, password);
2、连接服务器并发送http请求
client.connect(host, 80)
client.print(httpRequest);
3、获取服务器返回数据并使用arduinoJSON库解析数据
deserializeJson(doc, client);
显示界面的实现:
这里使用Init_Screen_Weather_Now()显示实时界面的信息,主要是将界面上每一部分使用tft库函数显示出来,这里附上主要代码,有兴趣的可以在附件中查看具体代码信息,其余显示界面大同小异。
void Init_Screen_Weather_Now(void)
{
tft.fillScreen(TFT_WHITE); //White background
Set_Screen_Weather_Now_img(nowweatherdata.weathercode);//实时天气信息图像,根据实时天气信息切换
drawImage<uint8_t>("./icon/humidity.bmp", 40, 150);//湿度图标,此图标固定位置显示,当前页面不更新
drawImage<uint8_t>("./icon/qiya.bmp", 170, 150); //气压图标,此图标固定位置显示,当前页面不更新
drawImage<uint8_t>("./icon/temp.bmp", 45, 190); //温度图标,此图标固定位置显示,当前页面不更新
drawImage<uint8_t>("./icon/quality.bmp", 170, 200); //空气质量图标,此图标固定位置显示,当前页面不更新
Set_Screen_Weather_Now_Humidity(nowweatherdata.humidity);//显示实时湿度值
Set_Screen_Weather_Now_pressure(nowweatherdata.pressure / 1000);//显示实时空气压力值
Set_Screen_Weather_Now_temp(nowweatherdata.nowTemp);//显示实时空气温度值
Set_Screen_Weather_Now_quality(nowweatherdata.quality);//显示实时空气质量值
Set_Screen_Weather_Now_Data(weather_today.date);//显示实时日期数据
Set_Screen_Weather_Now_Time(nowweatherdata.timemin, nowweatherdata.timesec);//显示实时时间数据
}
显示界面的切换:
这里使用一个变量screencode来表示实时显示的界面标识,通过按键控制修改该值以达到显示界面切换的效果。
switch(screencode)
{
case 0:
updatatime();
Init_Screen_Weather_Now();
break;
case 1:
Init_Screen_ThreeDays_Weather_Forcast();
break;
case 2:
Init_Screen_Daily_Weather_Forcast(&weather_today);
break;
case 3:
Init_Screen_Daily_Weather_Forcast(&weather_tom);
break;
case 4:
Init_Screen_Daily_Weather_Forcast(&weather_atom);
break;
default:
updatatime();
Init_Screen_Weather_Now();
break;
}
实现演示以及说明
开机实时天气数据界面:此界面显示数据包括实时天气情况,实时时间日期数据,实时温湿度信息,实时气压以及空气质量
未来三天天气情况界面:数据包括日期、天气情况、温度范围、风速等信息
未来三天内单天日升日落、月升月落显示界面:显示数据有单天日期、天气情况、日升日落时间、月升月落时间以及风速风向等信息
心得体会:
此次项目很久以前就已经拿到板卡,大概60天之前,但是一直没有去尝试完成项目,当老师开始直播之后才第一次去思考怎么去实现任务,当时觉得一个简单的天气预报仪几天就能搞定,在浏览官方说明教程的时候发现支持LVGL,之前从来没有使用过LVGL,就打算本次任务用LVGL来实现,花了好几天去看LVGL的教程,途中还使用NXP的GUI Guider去设计显示界面,一直不慌不忙,在最后快十天的时候才着手在Wio Terminal上实现设计的界面,但此时发现一个很尴尬的事情,使用LVGL描绘界面加上style需要大量的空间,由于显示要素过多加上对LVGL的不熟悉导致机身RAM一个界面都绘制不出来,然后去思考使用SD卡存储字体和图片,但由于这时候时间紧急在文件系统的移植方面难住了,一直报错,难住两天之后考虑时间关系就放弃了使用LVGL实现的方案,这算得上一个遗憾,最后匆匆忙忙使用了自带的LCD库仿造原来设计的界面实现了功能,中文字体也没有实现。以后还是得抓紧时间按规划完成任务。