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

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP32基于Arduino框架下U8g2驱动I2C OLED 时间显示相关的知识,希望对你有一定的参考价值。

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


  • 📺演示:

  • ✨本案例采用1.3寸OLED屏幕,同时保留0.96屏幕接口函数,只要u8g2库支持的屏幕都可以,需要到\\U8g2\\src\\U8g2lib.h中匹配自己的屏幕函数接口。

📑I2C引脚接线说明

SDA-----> 21
SCL----->22

🛠所需库

🎉 所需库都可以在IDE管理库当中下载到。

U8g2库
Ticker库

📝驱动代码

#include <Arduino.h>
#include <U8g2lib.h>//包含u8g2头文件,用于OLED显示
//#include <ESP8266WiFi.h>//包含ESP8266头文件
#include <WiFi.h>

#include <Ticker.h> //调用Ticker.h库

#define NTP1  "ntp1.aliyun.com"
#define NTP2  "ntp2.aliyun.com"
#define NTP3  "ntp3.aliyun.com"

#ifndef STASSID
#define STASSID "MERCURY_D268G"
#define STAPSK  "pba5ayzk"
#endif

const char* ssid = STASSID;
const char* password = STAPSK;

#define U8X8_HAVE_HW_I2C

//U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // 1.3寸,默认引脚
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE, /* clock=*/22, /* data=*/21); // 1.3寸,指定引脚
//U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);//0.96寸,默认引脚
//U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE, /* clock=*/22, /* data=*/21); //0.96寸,指定引脚

#ifdef U8X8_HAVE_HW_I2C          //定义OLED连接方式为I2C
#include <Wire.h>
#endif

const String WDAY_NAMES[] = "Sun","Mon", "Tue",  "Wed", "Thu", "Fri", "Sat";  //星期


void printLocalTime()
 struct tm timeInfo;//声明一个结构体
 char buff[16];
  if (!getLocalTime(&timeInfo))
  
      Serial.println("Failed to obtain time");
      u8g2.setCursor(0,9);
      u8g2.print("NTP time failure");
      return;
  
 // Serial.println(&timeinfo, "%F %T %a"); // 格式化输出,串口显示
 String date = WDAY_NAMES[timeInfo.tm_wday];
  u8g2.clearBuffer();
  sprintf_P(buff, PSTR("%04d-%02d-%02d %s"), timeInfo.tm_year + 1900, timeInfo.tm_mon + 1, timeInfo.tm_mday, WDAY_NAMES[timeInfo.tm_wday].c_str());
  u8g2.setFont(u8g2_font_wqy14_t_gb2312a);
  u8g2.setCursor(9 , 20 ); //年份居中显示
  u8g2.println(buff);//显示出年份
   //Serial.println(buff);
  sprintf_P(buff, PSTR("%02d:%02d:%02d"), timeInfo.tm_hour, timeInfo.tm_min, timeInfo.tm_sec);//时间
  u8g2.setFont(u8g2_font_fur17_tn);
  u8g2.drawStr(19 , 45 , buff);
  u8g2.sendBuffer();



Ticker timer1(printLocalTime, 1000);


void setup() 
  // put your setup code here, to run once:
  Serial.begin(115200);
  u8g2.begin();          //初始化OLED
  WiFi.mode(WIFI_STA); //设置ESP32工作模式为无线终端模式
  WiFi.begin(ssid, password);
    // Wait for connection
  while (WiFi.status() != WL_CONNECTED) 
    delay(500);
    Serial.print(".");
  
    Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  
  configTime(8 * 3600, 0, NTP1, NTP2,NTP3);   
  u8g2.setPowerSave(0);// 关省电模式
  timer1.start();


void loop() 
timer1.update();

以上是关于ESP32基于Arduino框架下U8g2驱动I2C OLED 时间显示的主要内容,如果未能解决你的问题,请参考以下文章

Arduino框架下轻量级ssd1306 I2C屏幕驱动库

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

基于Lua框架下Air103使用U8g2库驱动I2C OLED图像显示

基于Lua框架下的合宙ESP32C3+1.5‘’Eink墨水屏天气时钟+OLED开源项目分享

ESP32/8266 + Arduino SSD1306库驱动OLED

ESP32开源驱动库Easyio的使用,基于ESP-IDF开发框架,非Arduino