课程设计 基于ESP32的万年历

###功能:从NTP网络时间服务器上获取当前时间,从聚合数据处获取阳历阴历时间。效果图如下。

一些初始化

//包含一下相关头文件
#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>
//按照u8g2教程配置
U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, 22,  21,  U8X8_PIN_NONE);
//实例化HTTP对象
HTTPClient http;//WIFI相关参数
const char * ID = "填你的WIFIID";
const char * PASSWORD = "填你的WIFI密码";
const char *ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 8 * 3600;
const int daylightOffset_sec = 0;//天气相关参数
String LunarURL = "";
String url_JuHe = "";
String Lunar = "0";
char Lunar1[10];
String Sun = "0";
String lunarYear = "0";
String Yeartime;//时间相关参数struct tm timeinfo;int ss;int mm;int hh;int mday;int mon;int year;String sec;String minute;String hour;String day;String month;String yeart;
/* 创建实例 */

获取聚合API数据

String GitURL(String URL)
{url_JuHe =  "http://v.juhe.cn/calendar/day?date=";url_JuHe = url_JuHe+URL;url_JuHe = url_JuHe+"&key=可在聚合申请免费key";return url_JuHe;
}

解析获得的JSON数据

void ParseLunar(String url)
{  DynamicJsonDocument doc(1024); //分配内存,动态http.begin(url);int httpGet = http.GET();if(httpGet > 0){Serial.printf("HTTPGET is %d",httpGet);if(httpGet == HTTP_CODE_OK){String json = http.getString();Serial.println(json);deserializeJson(doc, json);Lunar = doc["result"]["data"]["lunar"].as<String>();Sun =   doc["result"]["data"]["date"].as<String>();lunarYear =   doc["result"]["data"]["lunarYear"].as<String>();}else{Serial.printf("ERROR1!!");}}else{Serial.printf("ERROR2!!");}http.end();
}
#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, 22,  21,  U8X8_PIN_NONE);
HTTPClient http;//WIFI相关参数
const char * ID = "填你的WIFIID";
const char * PASSWORD = "填你的WIFI密码";
const char *ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 8 * 3600;
const int daylightOffset_sec = 0;//天气相关参数
String LunarURL = "";
String url_JuHe = "";
String Lunar = "0";
char Lunar1[10];
String Sun = "0";
String lunarYear = "0";
String Yeartime;//时间相关参数struct tm timeinfo;int ss;int mm;int hh;int mday;int mon;int year;String sec;String minute;String hour;String day;String month;String yeart;
/* 创建实例 */String GitURL(String URL)
{url_JuHe =  "http://v.juhe.cn/calendar/day?date=";url_JuHe = url_JuHe+URL;url_JuHe = url_JuHe+"&key=可在聚合申请免费key";return url_JuHe;
}void ParseLunar(String url)
{  DynamicJsonDocument doc(1024); //分配内存,动态http.begin(url);int httpGet = http.GET();if(httpGet > 0){Serial.printf("HTTPGET is %d",httpGet);if(httpGet == HTTP_CODE_OK){String json = http.getString();Serial.println(json);deserializeJson(doc, json);Lunar = doc["result"]["data"]["lunar"].as<String>();Sun =   doc["result"]["data"]["date"].as<String>();lunarYear =   doc["result"]["data"]["lunarYear"].as<String>();}else{Serial.printf("ERROR1!!");}}else{Serial.printf("ERROR2!!");}http.end();
}void setup()
{pinMode(2,OUTPUT);pinMode(17,OUTPUT);Serial.begin(115200);//==================OLED==================//初始化屏幕u8g2.begin();//使能UTF8字体打印u8g2.enableUTF8Print(); //==================OLED==================//==================wifi连接==================Serial.println("WiFi:");Serial.println(ID);Serial.println("PASSWORLD:");Serial.println(PASSWORD);WiFi.begin(ID,PASSWORD);while(WiFi.status()!=WL_CONNECTED){delay(500);Serial.println("正在连接...");}Serial.println("连接成功!");//==================wifi连接==================//==================获取时间==================configTime(gmtOffset_sec, daylightOffset_sec, ntpServer); getLocalTime(&timeinfo,5000);delay(5000); if (!getLocalTime(&timeinfo)){Serial.println("Failed to obtain time");return;}ss = timeinfo.tm_sec;mm = timeinfo.tm_min;hh = timeinfo.tm_hour;mday = timeinfo.tm_mday;mon = timeinfo.tm_mon;year = timeinfo.tm_year;//做类型转换是为了适配u8g2的显示sec = String(ss);minute = String(mm);hour = String(hh);day = String(mday);month = String(mon+1);yeart = String(year+1900);Yeartime = yeart + "-" + month +"-" + day;Serial.println(Yeartime);LunarURL = GitURL(Yeartime); ParseLunar(LunarURL);Serial.println(LunarURL);//==================获取时间==================
}void loop()
{Serial.println(Lunar);Serial.println(Sun);u8g2.firstPage();do {//==================时间显示==================if (!getLocalTime(&timeinfo)){Serial.println("Failed to obtain time");return;}ss = timeinfo.tm_sec;mm = timeinfo.tm_min;hh = timeinfo.tm_hour;sec = String(ss);minute = String(mm);hour = String(hh);if(ss == 00&&mm == 00 &&hh ==16){digitalWrite(17,HIGH);}if(ss == 10&&mm == 00 &&hh ==16){digitalWrite(17,LOW);}u8g2.setFont(u8g2_font_ncenB14_tr);u8g2.setCursor(0, 20);u8g2.print(hour);u8g2.setCursor(24, 20);u8g2.print(":");u8g2.setCursor(31, 20);u8g2.print(minute);u8g2.setCursor(54, 20);u8g2.print(":");u8g2.setCursor(61, 20);u8g2.print(sec);//==================时间显示==================//==================日历显示==================u8g2.setFont(u8g2_font_unifont_t_chinese3); u8g2.setCursor(0, 40);u8g2.print("阳历 ");u8g2.setCursor(36, 40);u8g2.print(Sun);u8g2.setFont(u8g2_font_unifont_t_chinese1); u8g2.setCursor(0, 60);u8g2.print(lunarYear);u8g2.setCursor(56, 60);u8g2.print(Lunar);//==================日历显示==================
//    u8g2.setCursor(30, 60);
//    u8g2.print(LYeartime);} while ( u8g2.nextPage() );
}

字库方面,我找了本站的一个u8g2自制字库的教程,做了个可以显示“零壹贰叁肆伍陆柒捌玖拾廿卅卌一二三四五六七八九十丑寅卯辰巳午未申酉戌亥甲乙丙丁戊己庚辛壬癸年月日鼠牛虎兔龙蛇马羊猴鸡狗猪”的字库 以供农历显示。有需要可留言

参考资料https://blog.csdn.net/qq_41650023/article/details/124697234?ops_request_misc=&request_id=&biz_id=102&utm_term=esp32%E5%A4%A9%E6%B0%94&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-124697234.142v50control,201v3control_2&spm=1018.2226.3001.4187,《心知天气天气状况获取,ESP32获取天气信息》

ESP32万年历 Arduino编程 U8g2库 OLED显示相关推荐

  1. 基于STM32移植U8g2图形库——OLED显示(HAL库)

    前言:本文主要内容为将优秀的图形库U8g2移植到STM32单片机上,用于OLED显示精美UI.其实,目前GitHub上有需要优秀的开源GUI库,但是大部分的GUI解决方案并不适合0.96 OLED(1 ...

  2. Arduino教程四——u8g2库OLED屏幕显示

    1)    功能 u8g2库OLED屏幕显示英文 OLED 0.96寸 128X64 对于这几个参数进行说明, 0.96指的是屏幕的显示尺寸0.96inch, 128×64指的是屏幕的分辨率为128× ...

  3. Arduino+HC-SR04超声波模块+OLED显示

    Arduino+HC-SR04超声波模块+OLED显示 1)超声波测距的代码从我之前发的文章中学习 使用HC-SR04超声波模块与Arduino结合进行测距并串口显示 2)OLED的显示也可以从下面这 ...

  4. 玩转 ESP32 + Arduino (八) U8G2驱动OLED

    OLED驱动芯片:SSD1306 开发平台: vscode+platformIO 开发板:ESP32 Divkit v1 目前Arduino平台上使用最广泛的OLED库: U8G2 github地址: ...

  5. ESP32用Arduino编程实现CAN总线通讯

    ESP32 Arduino CAN通信 库下载 硬件连接 程序 后记 想用ESP32实现CAN通讯,上网查有一篇文章关于ESP32实现CAN通讯的.实验了,可以用,但当CAN的线断开会发生死机,必须是 ...

  6. RK3399应用开发 | 基于u8g2驱动oled显示系统基本信息(时间、IP、CPU负载、CPU温度)

    文章目录 一.u8g2 二.编译测试 1. 拉取源码 2. 编译环境 3. 编译demo 4. 测试 三.应用开发 1. 界面初始化 2. 获取CPU温度并更新显示 3. 获取系统时间并更新显示 4. ...

  7. [arduino][u8g2][12864] oled—u8g2库使用说明(例子是12864液晶屏)

    [arduino][u8g2][12864] oled-u8g2库使用说明(例子是12864液晶屏) 首先说一下写这个文档的目的,一是给自己做个笔记来以备后边使,二是写个文档给大家看,我从网上找了很多 ...

  8. Mixly第三方库开发的两种方法——U8g2库二次开发

    Mixly第三方库开发的两种方法--U8g2库二次开发 前言 方法一:自定义库 1.创建库文件夹 2.开始编程 2.1.定义图形块的基本信息 2.2.定义图形块的外观样式 2.3.定义图形块与C语言的 ...

  9. ESP32基于Arduino框架下U8g2驱动I2C OLED 时间显示

    ESP32基于Arduino框架下U8g2驱动I2C OLED时间显示

最新文章

  1. 2021年大数据常用语言Scala(二十七):函数式编程 聚合操作
  2. 如何根据原理图画封装_生物水处理专用消泡剂是如何根据生物水处理工艺原理进行消泡的?...
  3. Maven学习(六):灵活的构建
  4. GraphPad Prism 9 for Win版 Mac版 2021最新完美版下载 科学绘图
  5. PTA浙大版python程序设计题目集--第3章-5 字符转换 (15 分)
  6. 前端开发时间格式的转换方法_开发人员投资时间而不浪费时间的10种方法
  7. 聚焦2020云栖大会 边缘计算专场畅谈技术应用创新
  8. HTML与css语法笔记
  9. Windows 命令行cmd破解WiFi密码
  10. 哇塞!这是我见过的最牛逼的性能监控系统,集强大功能于一身~
  11. 高数 | 导数零点定理为什么导数可以不连续?
  12. 再掀融资潮 团购网仍后劲不足(团购现状分析)
  13. QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样
  14. IOS 制作app 预览视频
  15. html页面设计参考文献英文,网页设计网站参考文献(国外英文资料).doc
  16. 第二十章:因特网协议第四版(IPv4):转发和本地传递
  17. 最新云豹二开直/播短视频完整系统源码+带开发文档/教程
  18. Noip2016PJ复赛总结
  19. 免费的图片服务器https://sm.ms
  20. layui 图片上传控件 自定义基础参数的获取

热门文章

  1. P60:类变量 static
  2. 漂亮的PHP网店系统源码(2011年1月更新)
  3. java计算机毕业设计建筑劳务监管平台MyBatis+系统+LW文档+源码+调试部署
  4. 个人认为最好的Mac端的视频播放软件___movist
  5. SONM月报_2018年9月
  6. 安卓手机阅读器_罗辑思维旗下得到APP发布全新阅读器,7.8英寸安卓9.0系统
  7. 乔布斯生母不知儿子去世
  8. eps8266使用详解
  9. 实名登记下的NFC手机读取二代证方法
  10. 达内python培训费_达内python的费用是多少?学习时间长吗?