ESP32基于arduino和风天气获取

  • 项目介绍
  • 准备工作
  • 使用方法
    • 获取实时天气信息
    • 获取天气预报信息
    • 获取空气质量信息
  • 获取空气质量实列

项目介绍

此库用于ESP32物联网开发板通过HTTPS协议获取和风天气API所提供的免费天气信息。使用此库可以省去繁杂的HTTPS请求以及JSON解析部分,使用几行代码即可获取有效信息,大大简化了开发步骤。

注:由于信息的安全性要求不高,故HTTPS请求中设置了不进行身份校验;
只涉及常人经常关注的信息如温度、风力、降雨等,其它一般人不关注的信息如露点温度等并未解析;

开源地址:https://github.com/ye-zhang0720/ESP32_HEWEATHER

准备工作

  1. 注册和风天气并获得key,详见 https://dev.heweather.com/docs/start/get-api-key;
  2. 安装ESP32扩展程序
  3. 安装ArduinoJson库,详见 https://github.com/bblanchon/ArduinoJson;

其他说明:

  • 私钥获取 https://dev.heweather.com/docs/start/get-api-key;

  • 城市代码 https://github.com/heweather/LocationList
    excel表 Location_ID,亦可通过城市搜索获取 ;

  • 和风天气开发者官方文档:https://dev.heweather.com/;

使用方法

  1. 安装本库
    1). 下载压缩包或克隆;
    2). 解压并复制到项目文件夹下的libraries目录下;
    3). 重启Arduino IDE。
  2. example目录中列出了使用的基本结构和所有函数示例,为主要参考文档;

获取实时天气信息

WeatherNow weatherNow;         // 建立weatherNow对象
weatherNow.config(UserKey, Location, Unit, Lang); // 配置请求信息
weatherNow.getServerCode();    // 获取API状态码
weatherNow.getLastUpdate();    // 获取服务器更新天气信息时间
weatherNow.getTemp();          // 获取实况温度
weatherNow.getFeelLike();      // 获取实况体感温度
weatherNow.getIcon();          // 获取当前天气图标代码
weatherNow.getWeatherText();   // 获取实况天气状况的文字描述
weatherNow.getWindDir();       // 获取实况风向
weatherNow.getWindScale();     // 获取实况风力等级
weatherNow.getHumidity();      // 获取实况相对湿度百分比数值
weatherNow.getPrecip();        // 获取实况降水量,毫米

获取天气预报信息

WeatherForecast WeatherForecast;    // 建立WeatherForecast对象
WeatherForecast.config(UserKey, Location, Unit, Lang); // 配置请求信息
WeatherForecast.getServerCode();    // 获取API状态码
WeatherForecast.getLastUpdate();    // 获取服务器更新天气信息时间
// 以下i取值为 0,1,2,分别代表今天,明天和后天
WeatherForecast.getTempMax(i);      // 获取最高温度
WeatherForecast.getTempMin(i);      // 获取最低温度
WeatherForecast.getIconDay(i);      // 获取天气图标代码
WeatherForecast.getTextDay(i);      // 获取天气状况的文字描述
WeatherForecast.getWindDirDay(i);   // 获取风向
WeatherForecast.getwindScaleDay(i); // 获取风力等级
WeatherForecast.getHumidity(i);     // 获取相对湿度百分比数值
WeatherForecast.getPrecip(i);       // 获取降水量,毫米
WeatherForecast.getUvIndex(i);      // 获取紫外线强度指数

获取空气质量信息

AirQuality AirQuality;           // 建立AirQuality对象
AirQuality.config(UserKey, Location, Unit, Lang); // 配置请求信息
WeatherForecast.getServerCode(); // 获取API状态码
WeatherForecast.getLastUpdate(); // 获取服务器更新天气信息时间
AirQuality.getServerCode();      // 获取API状态码
AirQuality.getLastUpdate();      // 获取服务器更新天气信息时间
AirQuality.getAqi();             // 实时空气质量指数
AirQuality.getCategory();        // 实时空气质量指数级别
AirQuality.getPrimary();         // 实时空气质量的主要污染物,优时返回值为NA

获取空气质量实列

#include <ESP32_Heweather.h>const char* ssid     = "SSID";     // WiFi名称
const char* password = "PASSWORD"; // WiFi密码String UserKey = "YOUR-KEY";   // 私钥 https://dev.heweather.com/docs/start/get-api-key
String Location = "101010100"; // 城市代码 https://github.com/heweather/LocationList,表中的 Location_ID
String Unit = "m";             // 公制-m/英制-i
String Lang = "zh";            // 语言 英文-en/中文-zh
float ROUND = 0.5;             // 更新间隔<小时>空气质量API 1小时更新一次AirQuality AirQuality;void setup(){Serial.begin(9600);Serial.println("");ConnectWiFi(); // 连接WiFiAirQuality.config(UserKey, Location, Unit, Lang); // 配置请求信息
}void loop(){if(AirQuality.get()){ // 获取更新Serial.println(F("======AirQuality Info======"));Serial.print("Server Response: ");Serial.println(AirQuality.getServerCode()); // 获取API状态码Serial.print(F("Last Update: "));Serial.println(AirQuality.getLastUpdate()); // 获取服务器更新天气信息时间Serial.print(F("AirQuality Aqi: "));Serial.println(AirQuality.getAqi());        // 实时空气质量指数Serial.print(F("Category: "));Serial.println(AirQuality.getCategory());   // 实时空气质量指数级别Serial.print(F("Primary: "));Serial.println(AirQuality.getPrimary());    // 实时空气质量的主要污染物,优时返回值为 NASerial.println(F("========================"));} else {  // 更新失败Serial.println("Update Failed...");Serial.print("Server Response: ");Serial.println(AirQuality.getServerCode()); // 参考 https://dev.heweather.com/docs/start/status-code}delay(ROUND * 3600000);
}// 连接WiFi
void ConnectWiFi(){WiFi.mode(WIFI_STA);WiFi.begin(ssid, password);Serial.print("Connecting to ");Serial.print(ssid);int i = 0;while (WiFi.status() != WL_CONNECTED && (i < 10)) {delay(1000);Serial.print('.');i++;}if (i == 10) { // 10s失败Serial.println("WiFi Connection Failed");} else { // 成功Serial.println("");Serial.println("WiFi Connection Successful!");Serial.print("IP address:    ");Serial.println(WiFi.localIP());}
}

ESP32基于arduino和风天气获取代码相关推荐

  1. 第四节 百度定位、地图SDK,和风天气获取教程

    专栏目录 第一节 自定义轮播图的制作 第二节 底部导航栏菜单,炫酷菜单动画,背景变暗.按钮焦点获取 第三节 适配Android10的拍照.从相册获取代码,包括完整的权限申请和图片地址获取 第四节 百度 ...

  2. ESP32基于Arduino框架下U8g2驱动I2C OLED 时间显示

    ESP32基于Arduino框架下U8g2驱动I2C OLED时间显示

  3. ESP32基于Arduino框架,SD卡+MAX98357模块+MP3播放器

    ESP32基于Arduino框架,SD卡+MAX98357模块+MP3播放器

  4. ESP32基于arduino开发的心跳体温检测系统(一)项目介绍及准备

    本文为被北邮信息系统设计课程摧残的同学们(包括但不限于作者的室友)提供一个可行的方案及模板. 本项目使用Arduino作为开发环境,使用ESP32开发一个心跳体温检测系统. 系统通过心跳传感器--pu ...

  5. ESP32基于arduino开发的心跳体温检测系统(二)传感器的使用

    在上篇文章里,我们配置好了开发需要的环境.接下来就开始尝试使用传感器. 测温传感器 连接元件 我们使用的是MLX90614 gy906测温传感器,有4个引脚,分别为VCC.GND.SCL.SDA.其中 ...

  6. 第十七篇、基于Arduino uno,获取cp2d12红外测距传感器的原始值和距离值——结果导向

    0.结果 说明:先来看看串口调试助手显示的结果,第一个值是原始的模拟电压值,第二个值是距离值,如果是你想要的,可以接着往下看. 1.外观 说明:虽然红外测距传感器形态各异,但是原理和代码都是适用的,只 ...

  7. 二、ESP32基于Arduino IDE OLED 联网显示时间

    上一篇学习笔记讲了如何在Arduino上配置ESP32开发环境,这次分享一下如何让ESP32联网获取时间再通过OLED来显示.此系列文章都是学习笔记,希望能有所帮助. ps:代码中调用的库如需要可在在 ...

  8. 第三十二篇、基于Arduino uno,获取光敏电阻传感器的原始值和光照强度——结果导向

    0.结果 说明:先来看看串口调试助手显示的结果,第一个值是原始的模拟电压值,第二个值是含光量,也就是光照强度,如果是你想要的,可以接着往下看. 1.外观 说明:虽然光敏电阻传感器形态各异,但是原理和代 ...

  9. 第十三篇、基于Arduino uno,获取薄膜压力传感器的值——结果导向

    0.结果 说明:先来看看串口调试助手显示的结果,第一个值是上电后检测到的平均压力值,第二个值是实时的压力值,第三个值是平均压力值和实时压力值的差值.如果是你想要的,可以接着往下看. 1.外观 说明:虽 ...

  10. 第三十五篇、基于Arduino uno,获取DS18B20温度传感器的温度值——结果导向

    0.结果 说明:先来看看串口调试助手显示的结果,第一个值是空气温度值.如果是你想要的,可以接着往下看. 1.外观 说明:虽然DS18B20温度传感器形态各异,但是原理和代码都是适用的,就是接线可能有点 ...

最新文章

  1. Color Pilot 5中文版
  2. 专家观点:你必须了解的嵌入式Linux特性
  3. Python解析pdf转为TXT格式
  4. python 累加m到n的所有素数的和_c#实现:返回n到m之间的所有素数
  5. 爬虫scrapy框架安装使用
  6. Qt学习笔记(十九):QTreeWidget 的常用方法
  7. java如何生成jar包
  8. 蓝桥杯python组——明码
  9. 错误:VM5729:1 Blocked script execution in ‘about:blank‘
  10. hdu3966树链剖分 分析
  11. 分享一些嵌入式相关的开源项目
  12. python-day11函数的作用
  13. 淘气的小丁-JavaScript的两种表单提交的方式
  14. 定时器node-schedule使用
  15. android设计模式应用--中介者模式
  16. 互斥事件的概念和公式_高中数学典型例题分析与解答:互斥事件
  17. 2022年618投影仪保值品牌榜,当贝投影闲鱼保值率排行TOP1
  18. 亚马逊云科技风力发电厂在福勒岭启动了!
  19. python笔记手写照片_用Python对手写笔记进行压缩与增强
  20. 华为Android面试真题解析,技术详细介绍

热门文章

  1. 记录六足机器人的各类参数(micropython)
  2. 设计基于HTML5的APP登录功能及安全调用接口的方式(原理篇)
  3. 【Codewars】Bouncing Balls
  4. 0.1+0.2 为什么不等于0.3
  5. JS 0.1+0.2的理解
  6. 这些样式表,你都用过么?
  7. wp缩略图php,wordpress缩略图彻底解决方法,自动获取第一张图片缩略图
  8. 用Kodi访问Win10共享文件夹
  9. Windows下VS2015编译caffe(CPU ONLY)
  10. 【 C++ 】日期计算器