Funpack第12期 - Wio Terminal - Arduino天气预报仪
这次选择了第二个项目, 开发制作一个自动联网的天气预报仪,在设计界面显示温湿度、天气情况、空气质量以及未来三天内的天气变化。
标签
嵌入式系统
Seanny
更新2022-01-10
广东金融学院
834

.项目介绍  

1.硬件Wio terminal

Wio Terminal的主控采用SAMD51,主频120MHz (200MHz Max.),另有4MB 外部闪存和 192KB RAM。配有一个2.4英寸 LCD, 板载IMU(LIS3DHTR),麦克风,蜂鸣器,microSD卡槽,光传感器和940nm红外发射器。还有两个Grove接口和兼容Raspberry pi的40个GPIO引脚,用于支持更多附加组件。

FtRoKE1hPrB2AoOKX_kI_MeSaUKS

2.开发环境Arduino IDE: 

FgEKeKuqqxyK5QTeFB5c9eLzqoA2

.任务完成思路和实现过程  

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

整体的思路为:

  1. 连接wifi, 接入互联网
  2. 使用心知天气的API, 获得天气信息
  3. 绘制好UI, 保存为BMP图片, 将图片显示在背景上
  4. 将解析好的信息显示在UI上面, 实现UI效果

三.代码解释:

引用库

#include "rpcWiFi.h"
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
#include"Free_Fonts.h"
#include"TFT_eSPI.h"
#include"WeatherIcon.h"

连接wifi


const char *ssid = "yourssid";
const char *password = "yourpasswd";
const char *host = "example.com";
const char *url = "/index.html";

void setup()
{
    Serial.begin(115200);
    delay(10);

    // We start by connecting to a WiFi network

    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED)
    {
        Serial.print("Connecting to ");
        Serial.println(ssid);
        WiFi.begin(ssid, password);
    }

    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
}

连接API

    client.setCACert(test_root_ca);
    //client.setCertificate(test_client_key); // for client verification
    //client.setPrivateKey(test_client_cert); // for client verification
 
    Serial.println("\nStarting connection to server...");
    if (!client.connect(server, 443)) {
        Serial.println("Connection failed!");
    } else {
        Serial.println("Connected to server!");
        // Make a HTTP request:
        client.println("GET https://api.seniverse.com/v3/weather/now.json?key=xxx-xx&location=xxx&language=en&unit=c HTTP/1.1");
        client.println("Host: api.seniverse.com");
        client.println("Cache-Control: no-cache");
        client.println();
 
        while (client.connected()) {
            String line = client.readStringUntil('\n');
            if (line == "\r") {
                Serial.println("headers received");
                break;
            }
        }
        // if there are incoming bytes available
        // from the server, read them and print them:
        while (client.available()) {
            char c = client.read();
            if (c == '\n') {
                Serial.write('\r');
            }
            Serial.write(c);
        }
        client.stop();

 

四. 演示效果

贴上演示效果和内容如下:

背景UI

FqKMFlcfIwlVX6IYTv5UqnCQ7s7H

显示数据

Fo_S_1Wg9GF9L1dlq56nQNEG113c

.活动总结,一些感想

第一次参加硬禾的活动非常开心, 第一次尝试开发一个完整的Arduino项目

连接wifi的时候遇到了问题, 需要先刷wifi的固件, 刷好以后就可以正常连接

下载库的时候非常的慢, 要有耐心, 多下载几次就可以了

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