esp32桌面天气代码

article/2025/7/7 23:56:34

title: esp32桌面天气代码

获取天气API说明

本次获取天气的API网站为知心天气

一、注册知心天气

在注册完成后可在控制台查看你的私钥如下:
知心天气私钥

二、知心天气的API文档

知心天气API
红圈就是代码中的API链接,根据需求换成你自己想要的东西
key= 你知心天气的私钥
location= 获取城市的拼音
language= 语言,默认是简体中文
unit= 温度单位℃或者℉

esp32桌面天气实现代码如下:

#include <Arduino.h>
#include "WiFi.h"
#include "ArduinoJson.h"
#include "HTTPClient.h"
#include "weatherpicture.h"
#include <U8g2lib.h>#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C#include <Wire.h>
#endif//OLED硬件初始化
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // All Boards without Reset of the Display// ------------------------WIFI连接信息---------------------------------//
const char* ssid = "HONOR V20"; //wifi nane
const char* password = "yubaolin"; // wifi password//-------------------------网络时间获取----------------------------------//
const char *ntpServer = "pool.ntp.org"; //网络时间服务器
const long gmtOffset_sec = 8 * 3600; //时区设置函数,东八区(UTC/GMT+8:00)写成8*3600   
const int daylightOffset_sec = 0;   //夏令时填写3600,否则填0//==========================函数声明====================================//void WiFi_Connect();
void ParserJson();
void OLEDDisplay(String cityName, String weather, String temperature, int code_int);
void printLocalTime();//WiFi connect function
void WiFi_Connect(){WiFi.begin(ssid, password);//Connection state judgmentwhile(WiFi.status() != WL_CONNECTED){  delay(1000);Serial.println("Connecting to WiFi...");/**********屏幕显示wifi连接状态*************/u8g2.clearBuffer();u8g2.setFont(u8g2_font_wqy12_t_gb2312);u8g2.setCursor(0,16);u8g2.print("wifi连接中");u8g2.sendBuffer();}Serial.println("Connected to the WiFi network");u8g2.clearBuffer();u8g2.setFont(u8g2_font_wqy12_t_gb2312);u8g2.setCursor(0,16);u8g2.print("wifi成功");u8g2.sendBuffer();
}//获取Json报文并解析
void ParserJson(){HTTPClient http;//                                                            你的私钥                      查询地址       语言   温度单位http.begin("https://api.seniverse.com/v3/weather/now.json?key=SvbJTBaB9LvBrsItI&location=liuzhou&language=zh-Hans&unit=c");//Specify the URLint httpCode = http.GET();            // Make the requestif (httpCode > 0) { // Check for the returning codeString payload = http.getString();Serial.println(httpCode);Serial.println(payload);StaticJsonDocument<1024> doc; DeserializationError error = deserializeJson(doc, payload);if (error) {Serial.println("JSON parsing failed!");} else {JsonObject obj1 = doc["results"][0];  //new 一个对象存储访问result信息String cityName = obj1["location"]["name"].as<String>();String weather = obj1["now"]["text"].as<String>();String code = obj1["now"]["code"].as<String>();String temperature = obj1["now"]["temperature"].as<String>();int code_int = obj1["now"]["code"].as<int>();OLEDDisplay(cityName, weather, temperature, code_int);  //屏幕显示报文信息//int code_int = obj1["now"]["code"].as<int>();Serial.println(cityName);Serial.println(code);//Serial.println(weather);Serial.println(temperature);}}else {Serial.println("Error on HTTP request");}http.end(); //Free the resources
}//屏幕绘制信息
void OLEDDisplay(String cityName, String weather, String temperature, int code_int){u8g2.setFont(u8g2_font_wqy12_t_gb2312);u8g2.setFontDirection(0);u8g2.clearBuffer();//u8g2.drawXBMP(3, 3, 35, 32, cloudy); u8g2.setCursor(43 , 16 ); u8g2.println("多"); u8g2.setCursor(43 , 30 ); u8g2.println("云");u8g2.setCursor(65, 10);u8g2.print("城市: ");u8g2.print(cityName);u8g2.setCursor(65, 25);u8g2.print("天气: ");u8g2.print(weather);u8g2.setCursor(65, 40);u8g2.print("温度: ");u8g2.print(temperature);u8g2.print("℃");//==========================天气图标显示=========================////u8g2.drawXBMP(10, 3, sunny_x, sunny_y, sunny);switch (code_int){case 0:u8g2.drawXBMP(3, 3, sunny_x, sunny_y, sunny);break;case 1:u8g2.drawXBMP(3, 3, clear_x, clear_y, clear);break;case 2://break;case 3://break;case 4:u8g2.drawXBMP(3, 3, cloudy_x, cloudy_y, cloudy);break;case 5:u8g2.drawXBMP(3, 3, PartlyCloudy_x, PartlyCloudy_y, PartlyCloudy);break;case 6:u8g2.drawXBMP(3, 3, MostlyCloudy_x, MostlyCloudy_y, MostlyCloudy);break;case 7:u8g2.drawXBMP(3, 3, PartlyCloudy_x, PartlyCloudy_y, PartlyCloudy);break;case 8:u8g2.drawXBMP(3, 3, MostlyCloudy_x, MostlyCloudy_y, MostlyCloudy);break;case 9:u8g2.drawXBMP(3, 3, Overcast_x, Overcast_y, Overcast);break;case 10:u8g2.drawXBMP(3, 3, Shower_x, Shower_y, Shower);break;case 11:u8g2.drawXBMP(3, 3, Thundershower_x, Thundershower_y, Thundershower);break;case 12:u8g2.drawXBMP(3, 3, ThundershowerWithHail_x, ThundershowerWithHail_y, ThundershowerWithHail);break;case 13:u8g2.drawXBMP(3, 3, Rain_x, Rain_y, Rain);break;case 14:u8g2.drawXBMP(3, 3, Rain_x, Rain_y, Rain);break;case 15:u8g2.drawXBMP(3, 3, Rain_x, Rain_y, Rain);break;case 16:u8g2.drawXBMP(3, 3, Rain_x, Rain_y, Rain);break;case 17:u8g2.drawXBMP(3, 3, Rain_x, Rain_y, Rain);break;case 18:u8g2.drawXBMP(3, 3, Rain_x, Rain_y, Rain);break;case 19:u8g2.drawXBMP(3, 3, IceRain_x, IceRain_y, IceRain);break;case 20:u8g2.drawXBMP(3, 3, Sleet_x, Sleet_y, Sleet);break;case 21:u8g2.drawXBMP(3, 3, SnowFlurry_x, SnowFlurry_y, SnowFlurry);break;case 22:u8g2.drawXBMP(3, 3, Snow_x, Snow_y, Snow);break;case 23:u8g2.drawXBMP(3, 3, Snow_x, Snow_y, Snow);break;case 24:u8g2.drawXBMP(3, 3, Snow_x, Snow_y, Snow);break;case 25:u8g2.drawXBMP(3, 3, Snow_x, Snow_y, Snow);break;case 26:u8g2.drawXBMP(3, 3, Dust_x, Dust_y, Dust);break;case 27:u8g2.drawXBMP(3, 3, Dust_x, Dust_y, Dust);break;case 28:u8g2.drawXBMP(3, 3, Duststorm_x, Duststorm_y, Duststorm);break;case 29:u8g2.drawXBMP(3, 3, Duststorm_x, Duststorm_y, Duststorm);break;case 30:u8g2.drawXBMP(3, 3, Foggy_x, Foggy_y, Foggy);break;case 31:u8g2.drawXBMP(3, 3, Haze_x, Haze_y, Haze);break;case 32:u8g2.drawXBMP(3, 3, Windy_x, Windy_y, Windy);break;case 33:u8g2.drawXBMP(3, 3, Windy_x, Windy_y, Windy);break;case 34:u8g2.drawXBMP(3, 3, Hurricane_x, Hurricane_y, Hurricane);break;case 35:u8g2.drawXBMP(3, 3, Hurricane_x, Hurricane_y, Hurricane);break;case 36:u8g2.drawXBMP(3, 3, Tornado_x, Tornado_y, Tornado);break;case 37:u8g2.drawXBMP(3, 3, Cold_x, Cold_y, Cold);break;case 38:u8g2.drawXBMP(3, 3, Hot_x, Hot_y, Hot);break;case 99:u8g2.drawXBMP(3, 3, Unknown_x, Unknown_y, Unknown);break;break;}//--------------------------时间显示--------------------------//printLocalTime();u8g2.sendBuffer();//delay(1000);
}//时间获取void printLocalTime(){//delay(500);struct tm timeinfo;if (!getLocalTime(&timeinfo)){Serial.println("Failed to obtain time");u8g2.setCursor(0,60);u8g2.print("未获取到时间请重置");return;}Serial.println(&timeinfo, "%F %T %A"); // 格式化输出,串口显示//屏幕显示时间//u8g2.clearBuffer();u8g2.setFont(u8g2_font_wqy12_t_gb2312);u8g2.setCursor(30, 64);u8g2.print(&timeinfo, "%F");  //日期u8g2.setCursor(65, 52);u8g2.print(&timeinfo, "%A");  //星期u8g2.setCursor(95, 64); u8g2.print(&timeinfo, "%R"); //小时-分钟// u8g2.setCursor(80, 64); // u8g2.print(&timeinfo, "%T"); //小时-分钟-秒 //==========================底部标语==========================//// u8g2.setCursor(0,63);// u8g2.print("平安喜乐");//u8g2.sendBuffer();
}void setup() {// put your setup code here, to run once:Serial.begin(115200);delay(1000);u8g2.begin();u8g2.enableUTF8Print();WiFi_Connect();//从网络时间服务器上获取并设置时间// 获取成功后芯片会使用RTC时钟保持时间的更新//            时区           时令             网络服务器configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);}void loop() {// put your main code here, to run repeatedly:ParserJson();delay(3000);  //知心天气API访问限制 20次/min
}

参考文档

https://blog.csdn.net/liujialong11/article/details/120068060?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-2-120068060.pc_agg_new_rank&utm_term=esp32%E8%8E%B7%E5%8F%96%E4%BF%A1%E6%81%AF%E6%98%BE%E7%A4%BA&spm=1000.2123.3001.4430
https://seniverse.yuque.com/books/share/e52aa43f-8fe9-4ffa-860d-96c0f3cf1c49/nyiu3t
https://blog.csdn.net/qq_41868901/article/details/104221495?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-4-104221495.pc_agg_new_rank&utm_term=esp32+%E5%9B%BE%E7%89%87%E5%8F%96%E6%A8%A1&spm=1000.2123.3001.4430


http://chatgpt.dhexx.cn/article/txLsSlOj.shtml

相关文章

云服务器无法开机,服务无法启动

一、检查当前POS是否设置为服务端: 进入C:\Windows\HLL,找到sys.ini文件,用记事本打开该文件,查看LocalIsServer的值:值为 1 说明是服务端,值为 0 说明是站点端。 二、检查服务注册的路径是否正确 打开服务(快捷键Windows+r 打开【运行】程序,输入 services.msc 回车 或…

java怎么写桌面日历_Win7桌面怎么添加日历记事本

可以按照日历记事的软件&#xff0c;电脑和手机都可以使用的&#xff0c;且能实现多端同步&#xff0c;推荐你可以使用敬业签。 敬业签针对待办事项可以设定单次定时提醒、重要事项间隔时间提醒、周期循环提醒和到期延时提醒。 Windows电脑、安卓手机、苹果手机、iPad、web网页…

议华为云:又爱又恨

云头条导读&#xff1a;作者玛尼呸 在2018年 12 月18日在心声社区发帖吐糟华为内部对于云业务的定位、内部管理混乱等问题&#xff0c;阐述了大量事实依据&#xff0c;反馈了很多实际问题&#xff0c;希望公司予以重视并改进。此贴引起公司管理层重视&#xff0c;1月17日官方账…

计算机桌面壁纸高清狗,2018狗年桌面壁纸

2018年狗年电脑壁纸是一款专为2018年打造的狗年电脑桌面壁纸&#xff0c;包含了丰富的、不同风格的壁纸类型&#xff0c;全为高清壁纸&#xff0c;分辨率为1080*1920&#xff0c;能够满足大部分用户的需求&#xff0c;还加入了日历壁纸&#xff0c;让你可以随时在桌面查看2018年…

云桌面令牌登录方式

【集团用户】浏览器访问 https://otp-dcloud.pingan.com.cn【银行用户】浏览器访问 https://otp-sdb-dcloud.pingan.com.cn 输入内网开机帐号密码动态令牌(快乐平安)的6位验证码 转载于:https://blog.51cto.com/novali/2074229

平安云基本系统部署

2019独角兽企业重金招聘Python工程师标准>>> 基本系统部署 下图是一个简单的网络架构&#xff1a; 接下来以此为例来说明如何在云环境上部署一套应用系统。 1.1 基本网络架构 云平台以专有网络VPC (Virtual Private Cloud)的模式向用户交付网络服务&#xff0c;VP…

华为云发布桌面IDE-CodeArts

摘要&#xff1a;华为伙伴暨开发者大会2022&#xff0c;发布华为云桌面IDE-CodeArts。 本文分享自华为云社区《华为云发布桌面IDE-CodeArts&#xff0c;让连接更简单、编码更智能》&#xff0c;作者&#xff1a; HuaweiCloud开发工具。 6月15日&#xff0c;主题为“因聚而生&a…

vnc远程桌面,vnc远程桌面使用教程图解

作为一个新手小白,你是否也像小编一样不知道如何实现vnc远程桌面呢?vnc作为一款出色的远程软件,在远程桌面方面也同样出色,那如何实现vnc远程桌面使用?小编发现了一款超好用的vnc远程桌面软件:IIS7服务器管理工具。它可以实现一键导出或导入,一键批量打开VNC,一键批量关…

云桌面访问方式

返回首页 访问方式&#xff1a;开机帐号 短信验证/动态令牌&#xff08;快乐平安&#xff09;设备支持&#xff1a;平板、手机、电脑&#xff0c;任何能够联网的设备均可访问云桌面操作系统&#xff1a;IOS、Android、Linux/Unix、Windows、MacOS 电脑 短信 浏览器访问 https…

云桌面无法识别ica文件

返回首页【问题描述】安装“Citrix Receiver”之后&#xff0c;点击云桌面图标&#xff0c;总是会下载xxxxxxx.ica文件&#xff0c;但是没有默认的程序可以打开该文件 【解决方法】鼠标右击xxxxxxx.ica&#xff0c;选择其他程序打开&#xff0c;从如下位置选择wfcrun32.exe 一般…

什么是云桌面计算机,云电脑桌面是什么?这是一篇良心科普文

1 云桌面优势与特点有哪些&#xff1f; 信息平安&#xff1a;所稀有据都在云平台&#xff0c;员工当地没有任何数据&#xff0c;无法拷贝、刻盘等。 维护便利&#xff1a;所有的应用程序和数据都在云平台&#xff0c;可以由维护人员同一安装、同一杀毒、同一进级、同一备份数据…

攻防世界shanghai

shanghai 维吉尼亚密码&#xff1a; 维吉尼亚密码(Vigenre Cipher)是在单一恺撒密码的基础上扩展出多表代换密码&#xff0c;根据密钥(当密钥长度小于明文长度时可以循环使用)来决定用哪一行的密表来进行替换&#xff0c;以此来对抗字频统计 加密过程&#xff1a;如果第一行为…

东塔攻防世界—xss绕过安全狗

靶场地址&#xff1a;XSS绕过安全狗 常规script会被拦截 更换xss构造方式 <svg onload"alert(document.domain)">

4433攻防世界

下载 得到一张jpg图片&#xff0c;用 StegSolve 打开发现图片太大显示不全&#xff0c;用 Photoshop 将图片缩小后打开&#xff0c;在 Red plane 1 里发现了一个疑似二维码的东西 扫码&#xff0c;解码 得到“…–.----…–…”这样一串摩斯密码&#xff0c;对战照摩斯密码表…

攻防世界web

攻防世界web 前言 准备ctf比赛&#xff0c;这里把攻防世界分值低于5分的基本刷了一遍&#xff08;分值再高刷不动了…&#xff09; 练习 view_source 没难度知识禁用了右键点击&#xff0c;ctrlu查看源码拿到flag get_post 这题没什么好说的&#xff0c;按着提示来就能拿f…

攻防世界 key

这道题又是差一点&#xff0c;原谅我想吐槽一下这道题有点瑕疵&#xff0c;没看出来最后得到的是flag&#xff0c;也可能是我自己的原因吧。 32位程序&#xff0c;进入主函数&#xff1a; 通过动态调试与静态结合分析&#xff0c;发现46、47行引用了两个字符串&#xff0c;第5…

Cookie 攻防世界

1.第一步还是看题&#xff1a; 由题目信息我们可以知道&#xff0c;这次题目和Cookie有关 2. 进入题目进行分析&#xff1a; 题目问我们知道什么是Cookie&#xff0c;Cookie:&#xff08;比如说你进入一个网站&#xff0c;输入你的密码和用户名&#xff0c;客户端就会把你的信…

攻防世界 happyctf

1.下载附件&#xff0c;exeinfo查壳&#xff0c;无壳 2.32位IDA分析&#xff0c;进入主函数内 int __cdecl main(int argc, const char **argv, const char **envp) {int result; // eaxint v4; // [esp5Ch] [ebp-70h]char *v5; // [esp60h] [ebp-6Ch]char v6[27]; // [esp6Ch…

攻防世界 lucknum

1.下载附件&#xff0c;exeinfo查壳&#xff0c;无壳 2.64位反汇编 3.打开main函数&#xff0c;F5反汇编 即可看到flag flag{c0ngrtulti0n_f0r_luck_numb3r}

攻防世界 supersqli

本道题考查的是sql注入中的堆叠注入 该题只有一个查询框&#xff0c;我们尝试使用联合注入&#xff0c;但是发现select等被过滤了 所以我们尝试使用堆叠注入&#xff0c;堆叠注入就是使用分号隔开要执行的多条sql语句&#xff0c;且可执行任意的sql语句&#xff0c;而union联合…