Funpack第12期 天气预报站
该天气预报站是使用wio Termal获取心知天气API制作而成
标签
显示
funkpack
山茶半两
更新2021-12-31
657

1.资源介绍

该项目主要为WIO TERMINAL开发板的体验项目。该开发板的主要功能如下图所示。

 

该模块拥有以下特点:

1.高集成度,MCU、LCD、Wi-Fi、蓝牙、IMU、麦克风、 蜂鸣器、microSD 卡、可配置的按钮、光传感 器、五向开关、红外发射器 (IR 940 nm) 和 CryptoAuthentication 就绪。

2.

由 Microchip ATSAMD51P19 驱动

· Arm® Cortex®-M4F 内核以 120 MHz 的频率运行(可倍频至 200 MHz)

· 4 MB 外部闪存,192 KB RAM

· 全面的协议支持

· SPI、I2C、I2S、ADC、DAC、PWM 和 UART

3.

强大的无线连接

· 由 Realtek RTL8720DN 提供技术支持

· 双频 2.4 GHz/5 GHz Wi-Fi (802.11 a/b/g/n)

· BL/BLE 5.0

4.

Grove 生态系统

· 用于探索物联网的 300 多个 Grove 模块

· 两个板载多功能 Grove 端口可用于数字、模拟、 I2C 和 PWM

· 简洁易懂的100%开源硬件设计

· 使用 LCD 屏幕和紧凑型外壳,无需费力从零搭建

· 用易于使用的图形元素和漂亮的可视化编辑工具创 建嵌入式GUI

5.

· USB OTG 支持

· USB 主机

· 辅助设备:鼠标、键盘、MIDI 设备、Xbox/PS 游戏控制 器和3D 打印机

· USB 客户端

· 模拟设备:鼠标、键盘和 MIDI 设备)

 

2.功能介绍

本次任务主要是制作一个天气预报站,通过获取心知天气的api数据,将数据显示在屏幕上,包括当天的天气信息,温度、天气、空气质量以及夜间空气质量,除此之外还能显示未来三天的天气信息。

3.代码

void setup(){
    
    pinMode(WIO_KEY_A, INPUT_PULLUP);
    pinMode(WIO_KEY_B, INPUT_PULLUP);
    pinMode(WIO_KEY_C, INPUT_PULLUP);
    lis.begin(Wire1);
    lis.setOutputDataRate(LIS3DHTR_DATARATE_25HZ);
    lis.setFullScaleRange(LIS3DHTR_RANGE_2G);
  
    Serial.begin(9600);          
    Serial.println("");
    tft.begin();
    tft.setRotation(1);
    tft.fillScreen(TFT_BLACK);
    tft.setFreeFont(FMB12);
    tft.setCursor((320 - tft.textWidth("天气预报站"))/2, 120);
    tft.print("天气预报站");
    delay(2000);
    // 连接WiFi
    connectWiFi();
}

void loop(){
   int i=0;
  
  // 建立心知天气API当前天气请求资源地址
  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);
   }
//显示主函数
      // pwmlcd(); 
  if(ii==0)
  {
    showfirstdata();
    ii=1;
   }

      

}

其中,两个界面的代码分别是:

void showfirstdata() {
    tft.fillScreen(TFT_WHITE);
 
    tft.fillRoundRect(10, 30, 140, 90, 5, tft.color565(173,216,230));
    tft.fillRoundRect(170,30, 140, 90, 5, tft.color565(173,216,230));
    tft.fillRoundRect(10, 140,140, 90, 5, tft.color565(173,216,230));
    tft.fillRoundRect(170,140,140, 90, 5, tft.color565(173,216,230));
   
 
    tft.setFreeFont(FMB9);
    tft.setTextColor(TFT_BLACK);
    tft.drawString("Temp:", 25, 40);
    tft.drawString("Weather:",180, 40);
    tft.drawString("Quality:",25, 150);
    tft.drawString("Night:",180, 150);
    
    tft.setTextColor(tft.color565(0,225,0));
    tft.drawFloat(tem,1 , 25, 80);//获取温度
    tft.drawString("°C",100, 80);
    
    tft.drawString(dw, 180, 80);//获取天气状况
   
    tft.drawString("Good",25,190);
   
    tft.drawString(nw,180, 190);   //获取晚上天气



}


//未来三天的天气情况
void p2lcd()
{
    digitalWrite(LCD_BACKLIGHT, HIGH);

    tft.fillScreen(TFT_WHITE);
    

    tft.fillRoundRect(10,  40, 90, 180, 5, tft.color565(40,40,86));
    tft.fillRoundRect(115, 40, 90, 180, 5, tft.color565(40,40,86));
    tft.fillRoundRect(220, 40, 90, 180, 5, tft.color565(40,40,86));
    //
    tft.setTextColor(tft.color565(125,125,232));
    tft.setFreeFont(FMB12);
    tft.drawString("Qingdao    "+  date,25, 10);
    
    tft.setTextColor(tft.color565(224,225,232));
    tft.setFreeFont(FMB12);
    tft.drawString("Today", 10, 55);
    tft.drawString("Tomo",125, 55);
    tft.drawString("TDAT",235, 55);//The Day After Tomorrow

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

    tft.setTextColor(tft.color565(0,191,255));  
    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.color565(238,221,130));  
    tft.setFreeFont(FMB9);
    tft.drawString(w0,20,160);
    tft.drawString(w1,125,160);
    tft.drawString(w2,230,160);
    tft.drawFloat(wa0,0,40,160);
    tft.drawFloat(wa1,0,145,160);
    tft.drawFloat(wa2,0,250,160);

    tft.setTextColor(tft.color565(173,216,230));  
    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);

    
}

4.功能展示

详见视频

FnUxmXaGlp5WlhKGk1_DhyRB3lksFq9J4OLYsuZXlPGyS5QXMTb4lJJA

5.心得体会

   此次使用wio terminal的经历让我学到了很多,也是第一次使用Arduino的编译器编写代码,中间过程犯了许多错,起初连加载库都会 出现很多问题。同时,也感谢我的好朋友,这个设计也向他学到了很多。感谢电子森林的活动,下次还参加。

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