基于ESP32的天气桌面摆件

          一.硬件准备:ESP32WROOM板一块:

         二.开发环境Arduino IDE(需搭载ESP32开发包)

         三.主要获取方式:通过百度地图开发平台获取天气信息

           下面叙述主要流程及其对应代码:

           1.  首先验证ESP32的Wifi模块是否正常使用:

#include "WiFi.h"//WIFI库
const char* ssid="mFi_01A406";//WIFI名称
const char* password="1234567890";//WIFI密码

void setup()
 {

  Serial.begin(115200);
  Serial.println("开始连接");
  WiFi.begin(ssid,password);
  while(WiFi.status()!=WL_CONNECTED)
  {
    delay(100);
  }
  Serial.print(WiFi.localIP());
   }

void loop()
 {
  

 }

         需要修改的只有WiFi名称和WiFi密码:用于检测ESP32开发板的WiFi功能是否正常:

若功能正常,串口监视器会打印一个IP地址。

            2.在百度地图开放平台申请注册一个账号,并点击控制台,选择账号类型验证,大家可以根据自己实际情况进行验证。

          点击进入控制台,创建应用:

        在访问应用下方会有一个AK:保存此秘钥

在主界面中搜索国内天气查询:

           将API服务地址复制进去,查询自己所在城市的行政区划代码。将查到的行政区划代码和刚刚保留的AK秘钥填入:

        出现以下结果,则表明天气情况获取成功。

          3.打开Arduino IDE,将代码替换:修改API信息,WIFI信息,打开串口监视器:

#include "WiFi.h"//WIFI库
#include "ArduinoJson.h"
#include "HTTPClient.h"

static DynamicJsonDocument doc(1024);
HTTPClient http;

const char* ssid="839839839";//WIFI名称
const char* password="839839839";//WIFI密码
const char* apiServer="https://api.map.baidu.com/weather/v1/?district_id=350121&data_type=all&ak=WJ6VnItjF4PJ9X4Sp0U08DZoP1CSS2Wq";

static String weathertext;
/********以下变量命名原则参考百度云平台API************/
static int temp;//温度
static String name;//地区
static String wind_class;//风力
static String wind_dir;//风向
static int rh;//湿度

void getWeather()
{
  http.begin(apiServer);
  int httpCode=http.GET();
  delay(500);
  if(httpCode==HTTP_CODE_OK)
  {
    String responseData=http.getString();
    deserializeJson(doc,responseData);

    JsonObject result=doc["result"];
    JsonObject now=result["now"];
    JsonObject location=result["location"];

    weathertext=now["text"].as<String>();
    temp=now["temp"].as<int>();//使用关键字获取温度的值
    wind_class=now["wind_class"].as<String>();//使用关键字获取风力的值
    wind_dir=now["wind_dir"].as<String>();//使用关键字获取风向的值
    rh=now["rh"].as<int>();//使用关键字获取相对湿度的值
    name=location["name"].as<String>();//使用关键字获取地区名称
    
    Serial.print("地区:");
    Serial.println(name);//地区名称
    Serial.print("天气:");
    Serial.println(weathertext);
    Serial.print("温度:");
    Serial.print(temp);//大气温度
    Serial.println("℃");//大气温度
    Serial.print("风力:");
    Serial.println(wind_class);//风力等级
    Serial.print("风向:");
    Serial.println(wind_dir);//风向
    Serial.print("相对湿度:");
    Serial.print(rh);//相对湿度
    Serial.println("%:");
  }
  http.end();//关闭HTTP
}

//API服务地址:
//https://api.map.baidu.com/weather/v1/?district_id=222405&data_type=all&ak=你的ak
//                                     district_id:350121:行政区编码
//                                     ak:开发者秘钥(创建应用后获取):WJ6VnItjF4PJ9X4Sp0U08DZoP1CSS2Wq
//https://api.map.baidu.com/weather/v1/?district_id=350121&data_type=all&ak=WJ6VnItjF4PJ9X4Sp0U08DZoP1CSS2Wq

void setup()
 {

  Serial.begin(115200);
  Serial.println("开始连接");
  WiFi.begin(ssid,password);
  while(WiFi.status()!=WL_CONNECTED)
  {
    delay(100);
  }
  Serial.println(WiFi.localIP());
   }

void loop()
 {
  getWeather();
  delay(2000);
 }

如需获取其他信息,则可参考百度地图开放平台-国内天气查询-返回参数进行修改。

   

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值