! Заготовка
Дисплей GMG12864-06D — это графический ЖК-дисплей с разрешением 128×64 пикселя, основан на контроллере ST7565R. Дисплей имеет хорошие углы обзора и подходит для использования в устройствах с низким энергопотреблением. Он работает от 3,3 В и использует SPI для взаимодействия.
Название | ЖК-модуль |
Модель | GMG12864-06D |
Разрешение | 128×64 |
Размер корпуса | 61.8×45.8×6.8 |
Размер окна | 58×28 |
IC Драйвер | ST7565R |
IC | 20L16S1Y упрощенный китайский |
Температура | -20° — +70° |
Напряжение | 3.3В |
Интерфейс | SPI |
Подключение
LCD | ESP8266 |
---|---|
CS | D8(CS) |
RSE | 3.3v |
RS | D4 |
SCL | D5(SCLK) |
SI | D7(MOSI) |
VDD | 3.3v |
VSS | GND |
A | 3.3v или PWM D |
K | GND |
состояние пина RS где высокий уровень(лог. 1) означает передачу данных, а низкий(лог. 0) передачу команд.
A, K — управление подсветкой
Использование
#include <ESP8266WiFi.h>
#include <SPI.h>
#include <U8g2lib.h>
#include <time.h>
U8G2_ST7565_ERC12864_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/D8, /* dc=*/D4,
/* reset=*/0);
const char* ssid = "ssid";
const char* password = "password";
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"};
static unsigned char caticon[] U8X8_PROGMEM = {
0x10, 0x00, 0x02, 0x30, 0x00, 0x03, 0xf0, 0xf1, 0x03, 0xf0, 0xff, 0x03,
0xf0, 0xff, 0x03, 0xf8, 0xff, 0x07, 0x78, 0xdf, 0x07, 0xbc, 0xae, 0x0f,
0x3c, 0x8e, 0x0f, 0xbc, 0xae, 0x0f, 0x7c, 0xdf, 0x0f, 0xfc, 0xfb, 0x0f,
0xf8, 0xfb, 0x07, 0xf0, 0xf5, 0x03, 0xe0, 0xff, 0x01, 0x83, 0x7f, 0x00,
0x06, 0x3f, 0x00, 0x0c, 0x3f, 0x00, 0xb8, 0x3f, 0x00, 0xf8, 0x3f, 0x00,
0xe0, 0x3f, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3b, 0x00};
void setup() {
Serial.begin(9600);
u8g2.begin();
u8g2.enableUTF8Print();
u8g2.setFlipMode(1);
u8g2.setContrast(60);
// Вывести иконку пока будет идти загрузка остального
u8g2.clearBuffer();
u8g2.drawXBMP(54, 20, 20, 24, caticon);
u8g2.sendBuffer();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov");
while (!time(nullptr)) {
Serial.print("*");
delay(1000);
}
}
void loop() {
drawPage_0();
delay(1000);
}
void drawPage_0() {
u8g2.clearBuffer();
//
time_t now = time(nullptr);
struct tm* p_tm = localtime(&now);
//
String usec = (p_tm->tm_sec < 10) ? "0" + String(p_tm->tm_sec) : p_tm->tm_sec;
String umin = (p_tm->tm_min < 10) ? "0" + String(p_tm->tm_min) : p_tm->tm_min;
String uhour =
(p_tm->tm_hour < 10) ? "0" + String(p_tm->tm_hour) : p_tm->tm_hour;
String udotw = daysOfTheWeek[p_tm->tm_wday];
String umon = (p_tm->tm_mon + 1 < 10) ? "0" + String(p_tm->tm_mon + 1)
: p_tm->tm_mon + 1;
String udate =
String(p_tm->tm_mday) + "/" + umon + "/" + String(p_tm->tm_year + 1900);
//
u8g2.setFont(u8g2_font_inr16_mn);
u8g2.setCursor(8, 27);
u8g2.print(uhour + ":" + umin + ":" + usec);
u8g2.setFont(u8g2_font_profont12_mr);
u8g2.setCursor(64 - ((udotw.length() * 6) / 2), 42);
u8g2.print(udotw);
u8g2.setCursor(64 - ((udate.length() * 6) / 2), 57);
u8g2.print(udate);
//
u8g2.sendBuffer();
}