一.硬件准备: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);
}
如需获取其他信息,则可参考百度地图开放平台-国内天气查询-返回参数进行修改。