Funpack第12期 Wio Terminal 天气预报仪
本次活动完成了任务二,简单天气预报仪,使用arduino平台实现
标签
Arduino
wio terminal
天气预报仪
相伴左右
更新2021-12-27
1124

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;
   }

实现演示以及说明

 开机实时天气数据界面:此界面显示数据包括实时天气情况,实时时间日期数据,实时温湿度信息,实时气压以及空气质量

Fu0TrONy_t3CkKGBofnYw5CH7Hll

未来三天天气情况界面:数据包括日期、天气情况、温度范围、风速等信息

FhBKs5TsVOy6DtU3NzxVDpZ5-RZ6

未来三天内单天日升日落、月升月落显示界面:显示数据有单天日期、天气情况、日升日落时间、月升月落时间以及风速风向等信息

FoEHqn72OM5Nb72qkAaC_EPVsnII

 

心得体会:

   此次项目很久以前就已经拿到板卡,大概60天之前,但是一直没有去尝试完成项目,当老师开始直播之后才第一次去思考怎么去实现任务,当时觉得一个简单的天气预报仪几天就能搞定,在浏览官方说明教程的时候发现支持LVGL,之前从来没有使用过LVGL,就打算本次任务用LVGL来实现,花了好几天去看LVGL的教程,途中还使用NXP的GUI Guider去设计显示界面,一直不慌不忙,在最后快十天的时候才着手在Wio Terminal上实现设计的界面,但此时发现一个很尴尬的事情,使用LVGL描绘界面加上style需要大量的空间,由于显示要素过多加上对LVGL的不熟悉导致机身RAM一个界面都绘制不出来,然后去思考使用SD卡存储字体和图片,但由于这时候时间紧急在文件系统的移植方面难住了,一直报错,难住两天之后考虑时间关系就放弃了使用LVGL实现的方案,这算得上一个遗憾,最后匆匆忙忙使用了自带的LCD库仿造原来设计的界面实现了功能,中文字体也没有实现。以后还是得抓紧时间按规划完成任务。

附件下载
LVGL_Temp.zip
项目arduino工程
团队介绍
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号