Funpack第12期-WIO Terminal制作一个天气预报显示仪
本项目是基于Wio Terminal开发板所设计的天气预报实时显示仪器,可实现自动联网,显示温湿度、天气情况、空气质量以及未来三天内的天气变化。
标签
嵌入式系统
测试
显示
tobi2021
更新2022-01-05
930

一. 任务目的

使用Wio Termina实现一个自动联网的天气预报仪,显示温湿度、天气情况、空气质量以及未来三天内的天气变化。

二. 硬件介绍

Wio Terminal 是基于SAMD51的微控制器,具有Realtek RTL8720DN 支持的无线连接,与Arduino和MicroPython兼容。它的运行速度为120MHz (最高可达200MHz), 4MB 外部闪存和 192KB RAM。它同时支持蓝牙和Wi-Fi,为物联网项目提供了骨架。Wio Terminal自身配有 a 2.4” LCD屏幕, 板载IMU(LIS3DHTR),麦克风,蜂鸣器,microSD卡槽,光传感器和红外发射器(IR 940nm)。 最重要的是它还有两个用于Grove生态系统 的多功能Grove端口和40个Raspberry pi兼容的GPIO引脚,用于支持更多附加组件。

三.软件介绍

该程序是利用Arduino IDE编程软件作为主要环境进行编写的,该软件使用起来比较难用,建议还未尝试的同学可以尝试使用别的软件平台进行编写。下面是相关程序的流程图。

 

由该流程图可以看出相关程序的运行流程。首先需要对开发板的相关功能进行初始化,包括TFT屏幕初始化,WIFI模块初始化等等,然后对WIFI进行相应检测连接。其相关代码如下表所示。

void setup(){
    
    pinMode(WIO_KEY_A, INPUT_PULLUP);
    pinMode(WIO_KEY_B, INPUT_PULLUP);
    lis.begin(Wire1);
    lis.setOutputDataRate(LIS3DHTR_DATARATE_25HZ);
    lis.setFullScaleRange(LIS3DHTR_RANGE_2G);
    Serial.begin(9600);          
    Serial.println("");
    WiFi.mode(WIFI_STA);
    WiFi.disconnect();

    tft.begin();
    tft.setRotation(1);
    tft.fillScreen(TFT_BLACK);
    tft.setFreeFont(FMB12);
    tft.setCursor((320 - tft.textWidth("WratherStation"))/2, 120);
    tft.print("WratherStation");
    delay(1000);
    connectWiFi();
}

在初始化完成之后,可对服务器发出请求,更新相关天气信息,在得到回应之后,对相关信息进行显示。同时检测按键状况,如果B按键按下,便将显示页面切换到三日天气状况信息显示,A按键按下,则显示当前天气状况信息。代码如下所示。

void loop(){
   int i=0;
  String reqRes1 = "/v3/weather/daily.json?key=" + reqUserKey +
                  + "&location=" + reqLocation + "&language=en&unit=" +
                  reqUnit + "&start=0&days=3";
  String reqRes2 = "/v3/air/daily.json?key=" + reqUserKey1 +
                    + "&language=en" +"&location=" + reqLocation;             
  httpRequest1(reqRes1);
   if(i<=5000)
   {
      httpRequest2(reqRes2);
      i++;
   }
   //按键换页函数
   if (digitalRead(WIO_KEY_A) == LOW) 
   {
     p2lcd();
     Serial.println("A Key pressed");
     delay(500);
   }
   if (digitalRead(WIO_KEY_B) == LOW)
   {
       showfirstdata();
       Serial.println("B Key pressed");
       delay(500);
   }
}

其中天气页面的相关设置代码如下所示。

void showfirstdata() {
    tft.fillScreen(TFT_WHITE);
    tft.setFreeFont(FF17);
    tft.setTextColor(tft.color565(125,125,200));
    tft.drawString(date,200,10);
    tft.setFreeFont(FMB9);
    tft.setTextColor(TFT_BLACK);
    tft.drawString("Temp:", 25, 40);
    tft.drawString("Weather:",25, 95);
    tft.drawString("Quality:",25, 150);
    tft.drawString("Humidity:",25, 205);
    
    tft.setTextColor(TFT_BLACK);
    tft.drawFloat(tem,1 , 125, 40);//获取温度
    tft.drawString("°C",200, 40);
    
    tft.drawString(dw, 145, 95);//获取天气状况
   
    tft.drawString(quality0,145,150);
   
    tft.drawFloat(h0,1,155, 205);   //获取空气湿度
}
void p2lcd()
{
    digitalWrite(LCD_BACKLIGHT, HIGH);
    tft.fillScreen(TFT_WHITE);
    tft.setTextColor(TFT_BLACK);
    tft.setFreeFont(FMB12);
    tft.drawString("Jinna    ",25, 10);
    
    tft.setTextColor(TFT_BLACK);
    tft.setFreeFont(FMB9);
    tft.drawString(date, 10, 35);
    tft.drawString(date1,115, 55);
    tft.drawString(date2,205, 80);//The Day After Tomorrow

    tft.setTextColor(TFT_BLACK);  
    tft.setFreeFont(FMB9);
    tft.drawString(d0,20,110);
    tft.drawString(d1,125,110);
    tft.drawString(d2,230,110);

    tft.setTextColor(TFT_BLACK);  
    tft.setFreeFont(FMB9);
    tft.drawFloat(t0,2,20,135);
    tft.drawFloat(t1,2,125,135);
    tft.drawFloat(t2,2,230,135);
    tft.drawString("C",75, 135);
    tft.drawString("C",180, 135);
    tft.drawString("C",280, 135);

    tft.setTextColor(TFT_BLACK);  
    tft.setFreeFont(FMB9);
    tft.drawString(quality0,20,160);
    tft.drawString(quality1,125,160);
    tft.drawString(quality2,230,160);

    tft.setTextColor(TFT_BLACK);  
    tft.setFreeFont(FMB9);
    tft.drawFloat(h0,1,20,180);
    tft.drawFloat(h1,1,125,180);
    tft.drawFloat(h2,1,230,180);
    tft.drawString("RH",65,180);
    tft.drawString("RH",170,180);
    tft.drawString("RH",275,180);
}

以上便是相关代码内容。

四.操作演示

在打开仪器之后,首先等待相关初始化,在WIFI连接完成之后,进入到天气预报主界面,其界面如下所示。

按下按键B,系统可切换到未来三日天气预报信息显示界面,如下图所示。

以上就是全部展示内容。

五.心得体会

非常感谢硬禾学堂提供的机会,可以接触到这么有意思的显示开发板,我发现这枚开发板不仅可以用于物联网操作,而且可以用于各种彩色屏幕显示,作为电子爱好者绝对不能错过这款产品,功能非常强大。

附件下载
All_Free_Fonts_Demo.rar
相关程序
团队介绍
刚毕业的电气工程大学生,现在为一名电控开发工程师。
团队成员
tobi2021
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号