如何将 ESP32 快速接入高德、心知、和风天气API 获取天气信息

ESP32 Weather 组件:打造属于你的智能天气站

这里推荐大家使用 ESP32 Weather 组件快速接入高德、心知、和风三种天气 API,获取丰富的天气数据。

项目简介

ESP32 Weather 是一个基于 ESP32 IDF 的第三方组件,它支持高德、心知、和风三种天气 API,能够自动识别位置并获取包括温度、湿度、风向风速等在内的丰富天气数据。项目还提供了美观的终端输出和 HTTPS 加密传输,确保数据安全。用户可以轻松地将其集成到 ESP32 项目中,快速实现天气信息的获取和展示。

项目地址:GitHub - NingZiXi/weather

功能亮点

  • 三合一 API 支持:可以选择高德、心知、和风天气中的任意一种 API,这为用户提供了更多的选择和灵活性。
  • 智能定位:组件能够自动识别你的位置,无需手动配置,大大简化了使用过程。
  • 数据丰富:涵盖了温度、湿度、风速、降水等多种天气数据,满足了不同用户的需求。
  • 终端美化:控制台输出美观大方,堪比艺术品,提升了用户体验。
  • 安全可靠:采用 HTTPS 加密传输和 CRT 证书验证,确保数据的安全性。

免费数据支持对比

功能特性高德天气心知天气和风天气
实时天气
温度
湿度
风向风速
风力
气压
能见度
体感温度
降水量
云量
露点温度
免费调用次数30 万/日无次数限制1000/日
是否需要付费可选可选可选

从上表可以看出,和风天气虽然免费调用次数较少,但免费版的服务与付费版相同,数据也较为丰富,因此推荐使用和风天气。

快速开始

1. 克隆项目

要将组件添加到项目中,可以在 IDF 终端执行以下命令:

idf.py add-dependency "ningzixi/weather^1.1.0"

或者直接克隆本仓库到项目的 components 目录下:

git clone https://github.com/NingZiXi/weather

2. 获取 API 密钥

3. 基本用法

以下是一个简单的示例代码,展示如何使用该组件获取天气信息并打印到终端:

#include "weather.h"

void app_main() {
    // 省略联网部分
    weather_config_t config = {
        .api_key = WEATHER_HEFENG_KEY,
        .api_host = WEATHER_HEFENG_HOSE,    // 和风天气需要配置host
        .city = NULL, // city为NULL自动根据IP地址获取位置,也可以指定城市
        // .city = "北京",
        .type = WEATHER_HEFENG  //可更改为api配置WEATHER_AMAP或WEATHER_XINZHI
    };

    weather_info_t *info = weather_get(&config);
    if (info) {
        weather_print_info(info); // 打印天气信息
        weather_info_free(info);
    }
}

更多 API 接口可以查看 weather.h 文件。

串口输出示例

以下是串口输出的天气信息示例:

请添加图片描述

总结

如果你觉得这个项目不错,别忘了给它一个 Star 支持哦!

<think>好的,用户想了解如何通过API或SDK获取实时天气数据。我需要先整理现有的引用内容,看看有没有相关的信息。 引用[1]提到之前使用和风API,后来改用SDK,感觉更简单直接,代码更简洁。还提到需要申请高德开发者获取key,这可能涉及到定位服务。引用[2]详细说明了申请高德地图API的步骤,以及使用和风天气Android SDK和Web API,根据经纬度获取城市码,进而获取天气。这里提到了两个关键点:高德地图用于定位,和风天气用于天气数据。引用[3]则介绍了ESP8266使用NONOS_SDK获取心知天气数据,通过HTTP请求。这可能是一个硬件相关的解决方案,比如物联网设备获取天气数据。 用户的问题是如何通过API或SDK获取实时天气数据,所以需要分步骤说明。首先可能需要定位,然后根据位置信息调用天气API。常见的天气服务提供商包括和风天气心知天气、OpenWeatherMap等。根据引用内容,重点介绍和风天气高德地图的组合使用,以及心知天气的示例。 需要详细说明每个步骤:申请API Key、集成SDK或发送HTTP请求、处理响应数据。同时,代码示例可能会有帮助,比如引用中的Python示例,或者ESP8266的C代码。但用户可能更倾向于通用方法,比如使用HTTP客户端发送请求。 还要注意用户可能的开发环境,比如Android、Web或嵌入式系统,但问题中没有明确说明,所以需要给出通用的步骤,并提到不同平台的可能差异。例如,Android可能需要使用高德SDK定位,然后调用和风天气API;而ESP8266则通过HTTP直接请求心知天气的数据。 另外,需要提到安全性,比如保护API Key,使用HTTPS等。可能还需要说明免费和付费API的限制,比如调用频率、数据精度等。 总结回答结构:步骤分为选择服务商、申请Key、集成SDK或API调用、处理数据。然后给出相关问题,如对比不同服务商、错误处理、数据解析等。</think>### 如何通过API或SDK获取实时天气数据? 获取实时天气数据通常需要以下步骤: --- #### **1. 选择天气数据服务商** 常见服务商包括: - **和风天气**:提供全球天气数据API和SDK,支持多平台集成[^2][^1] - **心知天气**:适用于物联网设备(如ESP8266),通过HTTP请求获取数据[^3] - **OpenWeatherMap**:国际通用API,免费层有一定调用限制 - **高德地图**:需结合其定位服务获取经纬度,再调用其他天气API --- #### **2. 申请开发者账号与密钥** - **和风天气**:注册后创建应用,获取`API Key`和`城市码`(LocationID) - **高德地图**:需申请`Web服务Key`用于地理编码(将地址转为经纬度) - **心知天气**:注册获取`API密钥`,ESP8266示例中直接替换到HTTP请求URL --- #### **3. 集成SDK或调用API** **▎Android示例(和风天气+高德地图)** ```java // 高德定位SDK获取经纬度 AMapLocationClient mLocationClient = new AMapLocationClient(context); mLocationClient.getLatestLocation(location -> { double longitude = location.getLongitude(); double latitude = location.getLatitude(); // 调用和风天气API QWeather.getWeather7D(context, longitude, latitude, data -> updateUI(data), // 处理返回的JSON数据 error -> handleError(error)); }); ``` **▎HTTP请求示例(心知天气)** ```python import requests api_key = "YOUR_KEY" url = f"https://api.seniverse.com/v3/weather/now.json?key={api_key}&location=beijing" response = requests.get(url) weather_data = response.json() # 解析温度、湿度等字段 ``` --- #### **4. 处理数据与显示** - **数据解析**:通常返回JSON格式,需提取`temperature`(温度)、`text`(天气状态)等字段 - **图标显示**:和风天气提供天气图标ID,可用Glide加载(如`R.drawable.ic_100`对应晴天) - **更新频率**:注意API的调用限制(如免费版和风天气每天1000次) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁子希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值