ESP32 获取天气

心知天气VScode PlatformIO环境

在这里插入图片描述
注册账号 点击免费使用
在这里插入图片描述
点击免费版
在这里插入图片描述
获取秘钥一会要用

在这里插入图片描述
点击文档的产品手册
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

liy
利用json解析工具解析后的代码

#include <Arduino.h>
#include <Wire.h>
#include <U8g2lib.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>

// 定义 Wi-Fi 名与密码
// WiFi 账号密码
const char *ssid = "CU_Dbhf";
const char *password = "3ssh7pgq";

void WIFI_init(){
  // 断开之前的连接
  WiFi.disconnect(true);
  // 连接 Wi-Fi
  WiFi.begin(ssid, password);

  Serial.print("正在连接 Wi-Fi");

  // 检测是否链接成功
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    }
  Serial.println("连接成功");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

}

/**
 *  定义网络请求
 * 
 */

String url = "https://api.seniverse.com/v3/weather/now.json";
String city = "zhoukou";//城市
String key = "SUrBVMc5p_d3eSh1T";  //这个是秘钥
String language = "zh-Hans";  
String unit = "c";  //定义为℃

String response;  //接收响应数据

unsigned int temp;  //温度
String info;
void xinzhi_init()
{
//创建HTTPClient对象
HTTPClient http;
//发送GET请求
http.begin(url+"?key="+key+"&location="+city+"&language="+language+"&unit="+unit);
int httpcode = http.GET();  //获取网址响应
Serial.printf("http 状态码:%d",httpcode);
//获取正文响应
response = http.getString();
Serial.println("响应数据");
Serial.println(response);

http.end();

//创建解析对象
DynamicJsonDocument doc(1024);
//StaticJsonDocument<1024> doc; 
//解析json数据
deserializeJson(doc,response);
//从解析后文档获取值
temp = doc["results"][0]["now"]["temperature"].as<unsigned int>(); //获取无符号温度
info = doc["results"][0]["now"]["text"].as<String>();  //获取天气 转换为字符串类型
Serial.printf("bait:%d\n",temp);
Serial.printf("tianqi:%s\n",info);
}



// 定义U8G2对象,使用SSD1306 128x64分辨率的显示屏,通过软件模拟的I2C接口  
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, 14,13);  
void u8g2_init()
{
  // 初始化 oled 对象
  u8g2.begin();
  // 开启中文字符集支持
  u8g2.enableUTF8Print();
  //设置对比度
  //u8g2.setContrast(255);
}
  
void setup(void)
{
  Serial.begin(115200);  //设置串口波特率
  WIFI_init(); //连接WIFI
  u8g2_init();//初始化u8g2
  xinzhi_init(); //初始化请求
}

void loop(void)
{
  // 设置字体
  u8g2.setFont(u8g2_font_unifont_t_chinese2);
  // 设置字体方向
  u8g2.setFontDirection(0);
  char str[20];
  sprintf(str, "温度:%dC", temp); // 将变量转换为字符串 
  u8g2.clearBuffer();
  u8g2.setCursor(0, 15);
  u8g2.print(str);

 
  //sprintf(str, "天气:%s", info); // 将变量转换为字符串  
  u8g2.setCursor(0, 40);
  u8g2.print(str+info);
  //u8g2.print("你好, ESP32!");
  u8g2.sendBuffer();
  
  delay(1000);
}

编译后出现DynamicJsonDocument doc(1024);警告 这个我也不知道怎么回事,有大佬知道求指点.

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小白文化

求大佬打赏;

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

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

打赏作者

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

抵扣说明:

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

余额充值