一. 任务目的
使用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,系统可切换到未来三日天气预报信息显示界面,如下图所示。
以上就是全部展示内容。
五.心得体会
非常感谢硬禾学堂提供的机会,可以接触到这么有意思的显示开发板,我发现这枚开发板不仅可以用于物联网操作,而且可以用于各种彩色屏幕显示,作为电子爱好者绝对不能错过这款产品,功能非常强大。