电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
Beetle ESP32 C3 wifi联网获取实时天气信息
分 享
扫描二维码分享
Beetle ESP32 C3 wifi联网获取实时天气信息
esp32
dfrobot
单片机
xinmeng_wit
关注
发布时间: 2022-09-13
丨
阅读: 4578
### 前言 话不多说,直接开始正题。 本次要实现的功能是通过wifi获取某个城市的实时天气信息,主要包括:温度,湿度,天气,风力和风向。 ### JSON库安装 JSON库是用来解析JSON格式数据,提取需要的信息的一个库,使用起来非常简单方便。 通过 Arduino IDE 【工具】 -> 【库管理】 中输入 Arduino_JSON 并安装该库  ### 注册YY天气获取key YY天气是和心知天气类似的提供天气信息服务的一个网站,使用之前需要先注册账号,获取到一个key,后面进行天气请求的时候都需要用到这个key。 YY天气网址:[http://www.yytianqi.com/home](http://www.yytianqi.com/home) 注册完成后就会分配key,免费版的会员每小时调用api的次数是有限制的,是30次/小时。  对于实时天气的json数据格式是这样的: > { "code": 1, "msg": "Sucess", "counts": 2362, //访问的剩余次数。 "data": { "cityId": "CH010100", //城市id "cityName": "北京", //城市名称 "lastUpdate": "2016-03-09 17:10:00", //实况更新时间 "tq": "多云", //天气现象 "numtq": "01", //天气现象编码 "qw": "5.0", //当前气温 "fl": "微风", //当前风力 "numfl": "0", //当前风力编码 "fx": "无持续风向", //当前风向 "numfx": "0", //当前风向编码 "sd": "10.0" //相对湿度,直接在此数值后添加%即可 } } 根据这个格式,就可以使用Arduino_JSON库进行提取天气信息。 ### 代码编写 ```c /@@* 使用wifi联网获取实时天气信息 */ #include
#include
#include
//修改WIFI名称以及密码 const char* ssid = "CMCC-5hr7";//WIFI名称 const char* password = "mt2fdn9z";//WIFI密码 //填入你获得的API Key String YYWeatherApiKey = "oav5nwfpajat3ocm"; // 填写你的城市代码 String cityCode = "CH020100";//上海 unsigned long lastTime = 0; //设置每120秒获得一次天气数据 unsigned long timerDelay = 120000; String jsonBuffer; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); Serial.println("Connecting"); //判断WIFI是否连接 while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to WiFi network with IP Address: "); Serial.println(WiFi.localIP()); } void loop() { //发送HTTP获取请求 if ((millis() - lastTime) > timerDelay) { //检测WIFI是否已经连接 if(WiFi.status()== WL_CONNECTED){ String serverPath = "http://api.yytianqi.com/observe?city=" + cityCode + "&key=" + YYWeatherApiKey; //将组合好的URL放入httpGETRequest函数中通过HTTP获取请求以获得文本 jsonBuffer = httpGETRequest(serverPath.c_str()); //Serial.println(jsonBuffer); //将解析的Json对象值储存在Jsonu缓冲区中 JSONVar myObject = JSON.parse(jsonBuffer); //判断解析是否成功 if (JSON.typeof(myObject) == "undefined") { Serial.println("Parsing input failed!"); return; } Serial.print("JSON object="); Serial.println(myObject); //城市 Serial.print("City: "); Serial.println((const char*)myObject["data"]["cityName"]); //温度 Serial.print("Temperature: "); Serial.print((const char*)myObject["data"]["qw"]); Serial.println(" C"); //湿度 Serial.print("Humidity: "); Serial.print((const char*)myObject["data"]["sd"]); Serial.println(" %"); //天气 Serial.print("Weather: "); Serial.println((const char*)myObject["data"]["tq"]); //风力 Serial.print("Wind: "); Serial.println((const char*)myObject["data"]["fl"]); //风向 Serial.print("Wind Direction: "); Serial.println((const char*)myObject["data"]["fx"]); Serial.println(""); } else { Serial.println("WiFi Disconnected"); } lastTime = millis(); } } String httpGETRequest(const char* serverName) { WiFiClient client; HTTPClient http; //连接网址 http.begin(client, serverName); //发送HTTP站点请求 int httpResponseCode = http.GET(); //该数组用于储存获得的数据 String payload = "{}"; //将获得的数据放入数组 if (httpResponseCode>0) { Serial.print("HTTP Response code: "); Serial.println(httpResponseCode); payload = http.getString(); } else { Serial.print("Error code: "); Serial.println(httpResponseCode); } //释放资源 http.end(); //返回获得的数据用于Json处理 return payload; } ``` ### 效果演示 最终通过uart打印出来解析后的天气信息,每2分钟打印一次: 
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
xinmeng_wit
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
【花雕体验】15 尝试搭建Beetle ESP32 C3之Arduino开发环境之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交