飛書文檔https://x509p6c8to.feishu.cn/docx/N45Pd0tA1oaC4CxUWZjc8Ekyn0b
屏幕應用場景
| |
課程使用的SSD1306是一款128*64像素可以使用IIC驅動的OLED屏幕。
| |
SSD1306 Oled顯示模塊共有4個引腳,標記為GND, VCC, SCL和SDA。這種Oled顯示模塊可以使用3.3V到5V輕松上電。
u8g2是什么?
u8g2是一套圖形庫工具庫,內部是提供了多種屏幕的驅動方案,如SSD1306_128X64、UC1638_192X96等,使用u8g2我們可以快速實現屏幕應用的開發。
u8g2開發流程
簡單顯示:
首先先安裝對應的u8g2庫,直接去PIO Home中搜導入就ok。
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>#define SCL 22
#define SDA 23// IIC version 方向 時鐘信號 數據信號 復位數據
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, SCL, SDA, U8X8_PIN_NONE);void setup(void)
{u8g2.begin();
}void loop(void)
{u8g2.clearBuffer();u8g2.setFont(u8g2_font_ncenB14_tr);u8g2.drawStr(0, 24, "Hello World!");u8g2.sendBuffer();delay(1000);u8g2.clearBuffer();u8g2.setFont(u8g2_font_ncenB14_tr);u8g2.drawStr(0, 24, "embeded!");u8g2.sendBuffer();delay(1000);
}
顯示時間:
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <WiFi.h>
#include <Ticker.h> //調用Ticker.h庫#define NTP1 "ntp1.aliyun.com"
#define NTP2 "ntp2.aliyun.com"
#define NTP3 "ntp3.aliyun.com"#define STASSID "leo"
#define STAPSK "123456789"const char *ssid = STASSID;
const char *password = STAPSK;#define SCL 22
#define SDA 23Ticker timer1;// IIC version 方向 時鐘信號 數據信號 復位數據
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, SCL, SDA, U8X8_PIN_NONE);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();
}void setup(void)
{Serial.begin(9600);u8g2.begin();WiFi.mode(WIFI_STA); // 設置ESP32工作模式為無線終端模式WiFi.begin(ssid, password);// Wait for connectionwhile (WiFi.status() != WL_CONNECTED){delay(1000);Serial.print("wait connect to wifi...\n");}Serial.println(ssid);Serial.print("IP address: ");Serial.println(WiFi.localIP());configTime(8 * 3600, 0, NTP1, NTP2, NTP3);u8g2.setPowerSave(0); // 關省電模式timer1.attach_ms(1000,printLocalTime);
}void loop(void)
{}
中文字符顯示:
下載庫,解壓后放到本地電腦路徑:
C:\Users\kemp\.platformio\packages\framework-arduinoespressif32\libraries
在VSCode的工程配置文件中,添加該庫
"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/u8g2_wqy/src",
#include <Arduino.h>
#include <U8g2lib.h>
#include <u8g2_wqy.h>#define SCL 22
#define SDA 23U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/SCL, /* data=*/SDA, /* reset=*/U8X8_PIN_NONE);void setup(void)
{u8g2.begin();u8g2.enableUTF8Print();
}
void loop(void)
{u8g2.setFont(u8g2_font_wqy12_t_gb2312); // 此處建議用gb2312字庫,完整支持所有中文編碼u8g2.firstPage();do{u8g2.setCursor(0, 20);u8g2.print("小智學長");u8g2.setCursor(0, 40);u8g2.print("你好啊");} while (u8g2.nextPage());delay(1000);
}
注意:如果使用vscode寫代碼,要把main.cpp文件用記事本打開另存為utf8格式,否則會顯示亂碼