ESP32(Arduino)获取和风天气数据

本文介绍了如何使用ESP32和Arduino环境从和风天气官网获取天气数据。首先,需要在和风天气注册并获取API Key。接着,安装ArduinoUZlib库以解压采用Gzip压缩的数据流。代码分为三部分:HTTPS连接与数据获取、实时天气数据解析以及使用示例。
摘要由CSDN通过智能技术生成

一、准备工作

1.在和风天气官网注册,获取账号的key。

2.Arduino安装ArduinoUZlib库,用于解压和风天气返回的数据流。由于和风天气采用Gzip压缩方式返回数据流,返回的数据需要解压。以及与HTTPS、JSON等相关库。

二、相关代码

为了方便理解代码功能,不同功能的代码,各采用1个.h和.cpp文件。

1.获取数据流。和风天气API采用HTTPS方式获取相关天气数据,并且返回数据采用GZIP压缩方式,因此先要建立HTTPS链接,获取数据后,使用UZlib库里的 int result=ArduinoUZlib::decompress(inbuff, size, outbuf,outsize);函数进行解压。相关代码如下:

HttpsGetUtils.h代码

#ifndef _HTTPS_GET_UTILS_H_
#define _HTTPS_GET_UTILS_H_

#include <Arduino.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <HTTPClient.h>
#include <WiFiClientSecure.h>

class HttpsGetUtils {  
  public:
    HttpsGetUtils();
    static bool getString(const char* url, uint8_t*& outbuf, size_t &len);
    static const char  *host;		// 服务器地址
  private:
    static bool fetchBuffer(const char* url);
    static uint8_t _buffer[2048]; //gzip流最大缓冲区
    static size_t _bufferSize;

};

#endif

HttpsGetUtils.cpp代码

#include "HttpsGetUtils.h"
#include "ArduinoUZlib.h" // gzip库

uint8_t HttpsGetUtils::_buffer[2048];
const char* HttpsGetUtils::host = "https://devapi.qweather.com"; //服务器地址,这是免费用户的地址,如果非免费用户,改为:https://api.qweather.com
size_t HttpsGetUtils::_bufferSize=0;

HttpsGetUtils::HttpsGetUtils() {
}

bool HttpsGetUtils::getString(const char* url, uint8_t *& outbuf, size_t &outlen) {
  fetchBuffer(url);        //HTTPS获取数据流
  if(_bufferSize) {
    ArduinoUZlib::decompress(_buffer, _bufferSize,outbuf, outlen);//GZIP解压
    _bufferSize=0;
    return true;
  }
  return false;
}


bool HttpsGetUtils::fetchBuffer(const char *url) {
	_bufferSize=0;
	std::unique_ptr<WiFiClientSecure> client(new WiFiClientSecure);
	client->setInsecure();
	H
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用 ESP32 板和 Arduino 编程语言来获取天气信息。首先,你需要连接 ESP32 板到互联网,可以通过 Wi-Fi 或者以太网连接。然后你可以使用一个天气 API 来获取天气数据,例如使用 OpenWeatherMap 的 API。下面是一个简单的代码示例,演示如何使用 ESP32 板和 Arduino 获取天气信息: ```cpp #include <WiFi.h> #include <HTTPClient.h> const char* ssid = "你的 Wi-Fi 网络名称"; const char* password = "你的 Wi-Fi 密码"; const char* weatherApiUrl = "http://api.openweathermap.org/data/2.5/weather?q=城市名称&appid=你的API密钥"; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("正在连接到 Wi-Fi..."); } Serial.println("Wi-Fi 连接成功!"); getWeather(); } void loop() { // 其他代码逻辑... } void getWeather() { HTTPClient http; Serial.print("正在获取天气数据..."); // 发送 GET 请求到天气 API http.begin(weatherApiUrl); int httpCode = http.GET(); if (httpCode > 0) { String payload = http.getString(); Serial.println(payload); } else { Serial.println("无法连接到天气 API!"); } http.end(); } ``` 请注意,你需要将代码中的 "你的 Wi-Fi 网络名称"、"你的 Wi-Fi 密码"、"城市名称" 和 "你的API密钥" 替换为你自己的信息和配置。另外,记得在 Arduino IDE 中安装所需的库(WiFi 和 HTTPClient)。这个示例代码只是一个起点,你可以根据自己的需求进一步扩展和处理获取到的天气数据
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值