-->

    Hiển thị thời gian thực bằng màn hình OLED 0.96 sử dụng NodeMCU ESP8266

    Màn hình OLED 0.96 là một màn hình đang được sử dụng khá nhiều vì sự tiện lợi của chúng. Trong nội dung bài viết hôm nay mình sẽ hướng dẫn các bạn cách để hiển thị thời gian thực lên OLED 0.96 bằng NodeMCU ESP8266.

    Tổng quan về màn hình OLED 0.96

    Màn hình Oled 0.96 inch sử dụng chuẩn giao tiếp bằng I2C, nên việc giao tiếp một cách dễ dàng và ổn định.
    Màn hình cho khả năng hiển thị đẹp, sang trọng, rõ nét và khả năng tiết kiệm pin rất tốt.

    Thông tin kỹ thuật

    • Điện áp sử dụng: 3.3~5VDC.
    • Công suất tiêu thụ: 0.04w
    • Góc hiển thị: lớn hơn 160 độ
    • Số điểm hiển thị: 128x64 điểm.
    • Độ rộng màn hình: 0.96 inch
    • Màu hiển thị: Trắng
    • Giao tiếp: I2C
    • Driver: SSD1306

    Sơ đồ đấu nối

    Màn hình OLED 0.96
    NodeMCU ESP8266
    VDD
    3V3
    GND
    GND
    SDA
    D2 (SDA)
    SCL
    D1 (SCL)

    Các linh kiện cần thiết cho dự án

    Tên linh kiệnSố lượng
    NodeMCU ESP82661
    Dây cắm4
    Màn Hình Oled 0.961

    Code mẫu

    #include <ESP8266WiFi.h>
    #include <time.h>
    
    #include <SPI.h>
    #include <Wire.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    
    #define OLED_RESET LED_BUILTIN  //4
    Adafruit_SSD1306 display(OLED_RESET);
    
    const char* ssid = "Nha Tro 4";
    const char* password = "nguyennam";
    
    int ledPin = 13;
    
    int timezone = 7 * 3600;
    int dst = 0;
    
    #if (SSD1306_LCDHEIGHT != 32)
    #error("Height incorrect, please fix Adafruit_SSD1306.h!");
    #endif
    
    void setup() {
    
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    
      // Clear the buffer.
      display.clearDisplay();
      display.display();
      
      pinMode(ledPin,OUTPUT);
      digitalWrite(ledPin,LOW);
    
      Serial.begin(115200);
    
      display.setTextSize(1);
      display.setTextColor(WHITE);
      
      display.setCursor(0,0);
      display.println("Wifi connecting to ");
      display.println( ssid );
    
      WiFi.begin(ssid,password);
     
      display.println("\nConnecting");
    
      display.display();
    
      while( WiFi.status() != WL_CONNECTED ){
          delay(500);
          display.print("."); 
          display.display();       
      }
    
      // Clear the buffer.
      display.clearDisplay();
      display.display();
      display.setCursor(0,0);
      
      display.println("Wifi Connected!");
      display.print("IP:");
      display.println(WiFi.localIP() );
    
      display.display();
    
      configTime(timezone, dst, "pool.ntp.org","time.nist.gov");
      display.println("\nWaiting for NTP...");
    
      while(!time(nullptr)){
         Serial.print("*");
         
         delay(1000);
      }
      display.println("\nTime response....OK"); 
      display.display();  
      delay(1000);
    
      display.clearDisplay();
      display.display();
    }
    
    void loop() {
      
      time_t now = time(nullptr);
      struct tm* p_tm = localtime(&now);
      
      Serial.print(p_tm->tm_mday);
      Serial.print("/");
      Serial.print(p_tm->tm_mon + 1);
      Serial.print("/");
      Serial.print(p_tm->tm_year + 1900);
      
      Serial.print(" ");
      
      Serial.print(p_tm->tm_hour);
      Serial.print(":");
      Serial.print(p_tm->tm_min);
      Serial.print(":");
      Serial.println(p_tm->tm_sec);
      
      // Clear the buffer.
      display.clearDisplay();
     
      display.setTextSize(3);
      display.setTextColor(WHITE);
      
      display.setCursor(0,0);
      display.print(p_tm->tm_hour);
      display.print(":");
      if( p_tm->tm_min <10)
        display.print("0"); 
      display.print(p_tm->tm_min);
      
      display.setTextSize(2);
      display.setCursor(90,5);
      display.print(".");
      if( p_tm->tm_sec <10)
        display.print("0"); 
      display.print(p_tm->tm_sec);
    
      display.setTextSize(1);
      display.setCursor(0,40);
      display.print(p_tm->tm_mday);
      display.print("/");
      display.print(p_tm->tm_mon + 1);
      display.print("/");
      display.print(p_tm->tm_year + 1900);
    
      display.display();
    
      delay(1000); // update every 1 sec
    
    }
    

    Thư viện

    • Download thư viện "Adafruit_GFX.h": Tải ngay
    • Download thư viện "Adafruit_SSD1306.h": Tải ngay

    ( Nguyên lý + Code chuẩn) Link Mediafire

    ------------------------------------------------------------------------------------
    DV1 - Nhận vẽ mạch thuê ONLINE Altium Designer/ Orcad 9.2/ Protues nhanh trong ngày



    -----------------------------------------------------------------------------------

    DV2 - Mua linh kiện về làm mạch nhanh - Miễn phí Ship




    DV3 - Kênh youtube chia sẻ kiến thức điện tử thực hành ngay


    DV4 - Kênh cộng đồng Facebook Điện Tử ChipKool




    eChipKool - Chia sẻ kiến thức Kết Nối đam mê điện tử

    Latest posts