Funpack第12期-使用wio terminal制作一个自动联网的天气预报仪
使用wio terminal制作一个自动联网的天气预报仪,在设计界面显示温湿度、天气情况、空气质量以及未来三天内的天气变化。
标签
嵌入式系统
显示
MMA
更新2021-12-27
1100
  1. 任务要求

    制作一个自动联网的天气预报仪,在设计界面显示温湿度、天气情况、空气质量以及未来三天内的天气变化。

    2. 任务分析与准备

  •     程序界面参考常规天气预报界面显示内容。比如以下界面。

          FqKcbxCb8ZRqmevp9otZrvs1gQAb

  • 联网和获取数据。wio terminal 有Realtek RTL8720DN 可以提供联网功能。则就可以从网络获取天气数据,并解析为jason格式,就可以在程序界面中使用了。天气数据的接口数据好用的并不多,其实也可以自己建一个接口。目前使用的是别人做好的接口。所以程序里也设置了访问的限制,一天就几次。另外,Realtek RTL8720DN目前还不支持micro python等python系的联网编程。所以只好用arduino c来写。
  • 字体处理。这部分已知有两种处理方法。一种是取字模,直接写到程序数组里。然后调用数组产生汉字。另一种是这里用processing创建字体的方法。创建出vlw字体,放在SD卡里。由程序调取。这里要注意的是用到什么字就输出什么字的vlw文件。这样文件不会太大,程序才能调用显示。而且可以生成不同的大小字体。看以下vlw文件都不大。

            FmLcChTD1tsoH8Wl6HgCbKKtomQN

  • 图标处理。图标是从天气预报的网站取的。在LCD里处理为BMP格式显示。BMP没有透明背景。所以处理一下背景色。

    3. 程序部分。

  • 引入相关头文件。这里注意“WiFiClientSecure.h”,要引入才能正确连wifi。Seeed有一套教学视频介绍了使用SD卡和LCD的方法。但没有提到这个头文件。

         

#include "TFT_eSPI.h"
#include "Seeed_FS.h" //Including SD card library
#include "RawImage.h"  //Including image processing library
#include "SD/Seeed_SD.h"
#include "rpcWiFi.h"
#include "HTTPClient.h"
#include "WiFiClientSecure.h"
#include "ArduinoJson.h"
#include "string.h"
  • 连接wifi.

           

Serial.begin(115200);
    while(!Serial);
    WiFi.mode(WIFI_STA);
    WiFi.disconnect();
    Serial.println("Connecting to WiFi..");
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.println("Connecting to WiFi..");
        WiFi.begin(ssid, password);
    }
    Serial.println("Connected to the WiFi network");
    Serial.print("IP Address: ");
    Serial.println (WiFi.localIP());
  •  联接天气接口。

       

/////////Connect wifi successfully.//////////////////// 
    if (http_client.begin(req))
          {
              Serial.println("HTTPclient setUp done!");
          }
        int http_code = http_client.GET();
        Serial.println(http_code);
        if (http_code > 0)
        {
        Serial.printf("HTTP get code: %d\n", http_code);
        if (http_code == HTTP_CODE_OK)
        {
          rsp = http_client.getString();
          Serial.println(rsp);
        }
        else
        {
          Serial.printf("fail to get cityWeather,code:%d\n", http_code);
        }
    }
  •  Jason解析。

         

    DynamicJsonDocument doc(2048);
    deserializeJson(doc, rsp);
    JsonObject obj = doc.as<JsonObject>();
  •  屏幕写字。

       

    tft.loadFont("SimSun20"); //指定tft屏幕对象载入SimHei20字库
    tft.setTextColor(TFT_WHITE);
    String city= obj["cityInfo"]["city"];
    tft.drawString(city,10,15);
    String ymd=obj["data"]["forecast"][0]["ymd"];
    tft.drawString(ymd,90,50);
    tft.unloadFont();
  • 屏幕画图。

 

void drawGraph(String s, int a, int b){
    if (s=="霾") {
      drawImage<uint16_t>("mai.bmp",a,b); 
}else if(s=="多云") {
      drawImage<uint16_t>("duoyun.bmp",a,b);
}else if(s=="晴") {
      drawImage<uint16_t>("qing.bmp",a,b);
}else if(s=="雪") {
      drawImage<uint16_t>("xue.bmp",a,b);
}else if(s=="阴") {
      drawImage<uint16_t>("yin.bmp",a,b);
}else if(s=="雨") {
      drawImage<uint16_t>("yu.bmp",a,b);
}
}

       

    4.功能展示。如下是实现的界面。

          Fr6QIWRfgI1b_Rz6Mbk5sFuQDDfP

    5.心得体会。

     Wio terminal 是适合作为入门arduino的开发板。功能比较多。官网的不足是中文网站资料做的不如英文网站。另外资料不够深入,比如python网络编程还不支持。如果这些能解决,会更有应用市场。

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