اطلاعیه

Collapse
No announcement yet.

ماژول نمایشگر 128x64 oled

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ماژول نمایشگر 128x64 oled

    ماژول نمایشگر 128X64 OLED
    ماژول نمایشگر OLED یک نمایشگر تک رنگ 0.96 اینچی با رزولیشن 128x64 پیکسل است که به دلیل کنتراست بالا قابلیت خوانایی زیادی را برای کاربر فراهم می آورد. این ماژول نور پس زمینه را خود ایجاد کرده و فاقد Backlight می باشد که از این نظر در مقایسه با LCD باریکتر و شفافیت و کنتراست آن بیشتر است. چیپ درایور این ماژول SSD1306 است که توانایی ارتباط I2C را برای این ماژول فراهم می آورد. این ماژول را می توان در کاربرد های مختلف تجاری نظیر نمایشگر های تلفن همراه ، مدیا پلیرهای دیجیتال قابل حمل رادیو و دوربین های دیجیتال بکار برد. ولتاژ تغذیه برای این ماژول 3.3V و جریان مصرفی آن بطور میانگین 20mA می باشد. این ماژول به آسانی توسط آردینو قابل راه اندازی است.

    ویژگی ها
    اندازه صفحه نمایش: 0.96 اینچ
    دارای کنترلر داخلی SSD1306
    قابلیت نمایش دو رنگ آبی و زرد
    رزولیشن: 128x64
    تغذیه: 3.3V
    رابط I2C

    مثال
    با اتصال این ماژول به آردوینو می توانید تصویر را بر روی OLED نمایش دهید.
    کد HTML:
    #include <Wire.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    
    #define OLED_RESET 4
    Adafruit_SSD1306 display(OLED_RESET);
    
    #define NUMFLAKES 10
    #define XPOS 0
    #define YPOS 1
    #define DELTAY 2
    
    
    #define LOGO16_GLCD_HEIGHT 16 
    #define LOGO16_GLCD_WIDTH  16 
    static unsigned char PROGMEM logo16_glcd_bmp[] =
    { B00000000, B11000000,
      B00000001, B11000000,
      B00000001, B11000000,
      B00000011, B11100000,
      B11110011, B11100000,
      B11111110, B11111000,
      B01111110, B11111111,
      B00110011, B10011111,
      B00011111, B11111100,
      B00001101, B01110000,
      B00011011, B10100000,
      B00111111, B11100000,
      B00111111, B11110000,
      B01111100, B11110000,
      B01110000, B01110000,
      B00000000, B00110000 };
    
    #if (SSD1306_LCDHEIGHT != 64)
    #error("Height incorrect, please fix Adafruit_SSD1306.h!");
    #endif
    
    void setup()   {                
      Serial.begin(9600);
    
      // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
      display.begin(SSD1306_SWITCHCAPVCC, 0x3D);  // initialize with the I2C addr 0x3D (for the 128x64)
      // init done
      
      display.display(); // show splashscreen
      delay(2000);
      display.clearDisplay();   // clears the screen and buffer
    
      // draw a single pixel
      display.drawPixel(10, 10, WHITE);
      display.display();
      delay(2000);
      display.clearDisplay();
    
      // draw many lines
      testdrawline();
      display.display();
      delay(2000);
      display.clearDisplay();
    
      // draw rectangles
      testdrawrect();
      display.display();
      delay(2000);
      display.clearDisplay();
    
      // draw multiple rectangles
      testfillrect();
      display.display();
      delay(2000);
      display.clearDisplay();
    
      // draw mulitple circles
      testdrawcircle();
      display.display();
      delay(2000);
      display.clearDisplay();
    
      // draw a white circle, 10 pixel radius
      display.fillCircle(display.width()/2, display.height()/2, 10, WHITE);
      display.display();
      delay(2000);
      display.clearDisplay();
    
      testdrawroundrect();
      delay(2000);
      display.clearDisplay();
    
      testfillroundrect();
      delay(2000);
      display.clearDisplay();
    
      testdrawtriangle();
      delay(2000);
      display.clearDisplay();
       
      testfilltriangle();
      delay(2000);
      display.clearDisplay();
    
      // draw the first ~12 characters in the font
      testdrawchar();
      display.display();
      delay(2000);
      display.clearDisplay();
    
      // draw scrolling text
      testscrolltext();
      delay(2000);
      display.clearDisplay();
    
      // text display tests
      display.setTextSize(1);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
      display.println("Hello, world!");
      display.setTextColor(BLACK, WHITE); // 'inverted' text
      display.println(3.141592);
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.print("0x"); display.println(0xDEADBEEF, HEX);
      display.display();
      delay(2000);
    
      // miniature bitmap display
      display.clearDisplay();
      display.drawBitmap(30, 16,  logo16_glcd_bmp, 16, 16, 1);
      display.display();
    
      // invert the display
      display.invertDisplay(true);
      delay(1000); 
      display.invertDisplay(false);
      delay(1000); 
    
      // draw a bitmap icon and 'animate' movement
      testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH);
    }
    
    
    void loop() {
      
    }
    
    
    void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
      uint8_t icons[NUMFLAKES][3];
      srandom(666);     // whatever seed
     
      // initialize
      for (uint8_t f=0; f< NUMFLAKES; f++) {
        icons[f][XPOS] = random() % display.width();
        icons[f][YPOS] = 0;
        icons[f][DELTAY] = random() % 5 + 1;
        
        Serial.print("x: ");
        Serial.print(icons[f][XPOS], DEC);
        Serial.print(" y: ");
        Serial.print(icons[f][YPOS], DEC);
        Serial.print(" dy: ");
        Serial.println(icons[f][DELTAY], DEC);
      }
    
      while (1) {
        // draw each icon
        for (uint8_t f=0; f< NUMFLAKES; f++) {
          display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE);
        }
        display.display();
        delay(200);
        
        // then erase it + move it
        for (uint8_t f=0; f< NUMFLAKES; f++) {
          display.drawBitmap(icons[f][XPOS], icons[f][YPOS],  logo16_glcd_bmp, w, h, BLACK);
          // move it
          icons[f][YPOS] += icons[f][DELTAY];
          // if its gone, reinit
          if (icons[f][YPOS] > display.height()) {
        icons[f][XPOS] = random() % display.width();
        icons[f][YPOS] = 0;
        icons[f][DELTAY] = random() % 5 + 1;
          }
        }
       }
    }
    
    
    void testdrawchar(void) {
      display.setTextSize(1);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
    
      for (uint8_t i=0; i < 168; i++) {
        if (i == '\n') continue;
        display.write(i);
        if ((i > 0) && (i % 21 == 0))
          display.println();
      }    
      display.display();
    }
    
    void testdrawcircle(void) {
      for (int16_t i=0; i<display.height(); i+=2) {
        display.drawCircle(display.width()/2, display.height()/2, i, WHITE);
        display.display();
      }
    }
    
    void testfillrect(void) {
      uint8_t color = 1;
      for (int16_t i=0; i<display.height()/2; i+=3) {
        // alternate colors
        display.fillRect(i, i, display.width()-i*2, display.height()-i*2, color%2);
        display.display();
        color++;
      }
    }
    
    void testdrawtriangle(void) {
      for (int16_t i=0; i<min(display.width(),display.height())/2; i+=5) {
        display.drawTriangle(display.width()/2, display.height()/2-i,
                         display.width()/2-i, display.height()/2+i,
                         display.width()/2+i, display.height()/2+i, WHITE);
        display.display();
      }
    }
    
    void testfilltriangle(void) {
      uint8_t color = WHITE;
      for (int16_t i=min(display.width(),display.height())/2; i>0; i-=5) {
        display.fillTriangle(display.width()/2, display.height()/2-i,
                         display.width()/2-i, display.height()/2+i,
                         display.width()/2+i, display.height()/2+i, WHITE);
        if (color == WHITE) color = BLACK;
        else color = WHITE;
        display.display();
      }
    }
    
    void testdrawroundrect(void) {
      for (int16_t i=0; i<display.height()/2-2; i+=2) {
        display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, WHITE);
        display.display();
      }
    }
    
    void testfillroundrect(void) {
      uint8_t color = WHITE;
      for (int16_t i=0; i<display.height()/2-2; i+=2) {
        display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, color);
        if (color == WHITE) color = BLACK;
        else color = WHITE;
        display.display();
      }
    }
       
    void testdrawrect(void) {
      for (int16_t i=0; i<display.height()/2; i+=2) {
        display.drawRect(i, i, display.width()-2*i, display.height()-2*i, WHITE);
        display.display();
      }
    }
    
    void testdrawline() {  
      for (int16_t i=0; i<display.width(); i+=4) {
        display.drawLine(0, 0, i, display.height()-1, WHITE);
        display.display();
      }
      for (int16_t i=0; i<display.height(); i+=4) {
        display.drawLine(0, 0, display.width()-1, i, WHITE);
        display.display();
      }
      delay(250);
      
      display.clearDisplay();
      for (int16_t i=0; i<display.width(); i+=4) {
        display.drawLine(0, display.height()-1, i, 0, WHITE);
        display.display();
      }
      for (int16_t i=display.height()-1; i>=0; i-=4) {
        display.drawLine(0, display.height()-1, display.width()-1, i, WHITE);
        display.display();
      }
      delay(250);
      
      display.clearDisplay();
      for (int16_t i=display.width()-1; i>=0; i-=4) {
        display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE);
        display.display();
      }
      for (int16_t i=display.height()-1; i>=0; i-=4) {
        display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE);
        display.display();
      }
      delay(250);
    
      display.clearDisplay();
      for (int16_t i=0; i<display.height(); i+=4) {
        display.drawLine(display.width()-1, 0, 0, i, WHITE);
        display.display();
      }
      for (int16_t i=0; i<display.width(); i+=4) {
        display.drawLine(display.width()-1, 0, i, display.height()-1, WHITE); 
        display.display();
      }
      delay(250);
    }
    
    void testscrolltext(void) {
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.setCursor(10,0);
      display.clearDisplay();
      display.println("scroll");
      display.display();
     
      display.startscrollright(0x00, 0x0F);
      delay(2000);
      display.stopscroll();
      delay(1000);
      display.startscrollleft(0x00, 0x0F);
      delay(2000);
      display.stopscroll();
      delay(1000);    
      display.startscrolldiagright(0x00, 0x07);
      delay(2000);
      display.startscrolldiagleft(0x00, 0x07);
      delay(2000);
      display.stopscroll();
    لینک دانلود پروژه
    جدیدترین ویرایش توسط ali_ezzati; ۱۰:۳۰ ۱۳۹۵/۰۷/۱۹.

    #2
    پاسخ : ماژول نمایشگر 128x64 oled

    آیا امکانش هست که پروتکل ارسال دستور و داده به این نوع نمایشگر رو هم توضیح بدین؟

    دیدگاه


      #3
      پاسخ : ماژول نمایشگر 128x64 oled

      سلام
      PDF قرار داده شده حاوی اطلاعات مورد نیاز شما برای راه اندازی این نمایشگر با انواع پردازنده هاست.

      موفق باشید
      چرا ناراحتی پاتریک!
      + امروز ی بچه دیدم سرچهارراه گل میفروخت
      - از دیدنش ناراحت شدی؟
      + نه
      پس چی ناراحتت کرده
      + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
      ------------------------------------------------------------------------------------------------------
      تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
      ------------------------------------------------------------------------------------------------------
      محصولات

      دیدگاه


        #4
        پاسخ : ماژول نمایشگر 128x64 oled

        سلام من کدهای این پروژه رو کامپایل کردم ارور میده
        کتابخانه ها نصب شدند
        اما باز ارور میده
        static unsigned char PROGMEM logo16_glcd_bmp[] =
        به این متغیر گیر میده
        لطفا بررسی کنین
        ممنونم

        دلیل: ادغام دو پست برای جلوگیری از اسپم

        اروری که میده اینه
        exit status 1
        variable 'logo16_glcd_bmp' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

        دلیل: ادغام دو پست برای جلوگیری از اسپم

        مشکل رو حل کردم کدهای جدید این پروژه
        [LEFT][INDENT]

        #include <Wire.h>
        #include <Adafruit_GFX.h>
        #include <Adafruit_SSD1306.h>

        #define OLED_RESET 4
        Adafruit_SSD1306 display(OLED_RESET);

        #define NUMFLAKES 10
        #define XPOS 0
        #define YPOS 1
        #define DELTAY 2


        #define LOGO16_GLCD_HEIGHT 16
        #define LOGO16_GLCD_WIDTH 16
        const unsigned char PROGMEM logo16_glcd_bmp[] =
        { B00000000, B11000000,
        B00000001, B11000000,
        B00000001, B11000000,
        B00000011, B11100000,
        B11110011, B11100000,
        B11111110, B11111000,
        B01111110, B11111111,
        B00110011, B10011111,
        B00011111, B11111100,
        B00001101, B01110000,
        B00011011, B10100000,
        B00111111, B11100000,
        B00111111, B11110000,
        B01111100, B11110000,
        B01110000, B01110000,
        B00000000, B00110000
        };

        #if (SSD1306_LCDHEIGHT != 64)
        #error("Height incorrect, please fix Adafruit_SSD1306.h!");
        #endif

        void setup() {
        Serial.begin(9600);

        // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
        display.begin(SSD1306_SWITCHCAPVCC, 0x3D); // initialize with the I2C addr 0x3D (for the 128x64)
        // init done

        display.display(); // show splashscreen
        delay(2000);
        display.clearDisplay(); // clears the screen and buffer

        // draw a single pixel
        display.drawPixel(10, 10, WHITE);
        display.display();
        delay(2000);
        display.clearDisplay();

        // draw many lines
        testdrawline();
        display.display();
        delay(2000);
        display.clearDisplay();

        // draw rectangles
        testdrawrect();
        display.display();
        delay(2000);
        display.clearDisplay();

        // draw multiple rectangles
        testfillrect();
        display.display();
        delay(2000);
        display.clearDisplay();

        // draw mulitple circles
        testdrawcircle();
        display.display();
        delay(2000);
        display.clearDisplay();

        // draw a white circle, 10 pixel radius
        display.fillCircle(display.width()/2, display.height()/2, 10, WHITE);
        display.display();
        delay(2000);
        display.clearDisplay();

        testdrawroundrect();
        delay(2000);
        display.clearDisplay();

        testfillroundrect();
        delay(2000);
        display.clearDisplay();

        testdrawtriangle();
        delay(2000);
        display.clearDisplay();

        testfilltriangle();
        delay(2000);
        display.clearDisplay();

        // draw the first ~12 characters in the font
        testdrawchar();
        display.display();
        delay(2000);
        display.clearDisplay();

        // draw scrolling text
        testscrolltext();
        delay(2000);
        display.clearDisplay();

        // text display tests
        display.setTextSize(1);
        display.setTextColor(WHITE);
        display.setCursor(0,0);
        display.println("Hello, world!");
        display.setTextColor(BLACK, WHITE); // 'inverted' text
        display.println(3.141592);
        display.setTextSize(2);
        display.setTextColor(WHITE);
        display.print("0x"); display.println(0xDEADBEEF, HEX);
        display.display();
        delay(2000);

        // miniature bitmap display
        display.clearDisplay();
        display.drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1);
        display.display();

        // invert the display
        display.invertDisplay(true);
        delay(1000);
        display.invertDisplay(false);
        delay(1000);

        // draw a bitmap icon and 'animate' movement
        testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH);
        }


        void loop() {

        }


        void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
        uint8_t icons[NUMFLAKES][3];
        srandom(666); // whatever seed

        // initialize
        for (uint8_t f=0; f< NUMFLAKES; f++) {
        icons[f][XPOS] = random() % display.width();
        icons[f][YPOS] = 0;
        icons[f][DELTAY] = random() % 5 + 1;

        Serial.print("x: ");
        Serial.print(icons[f][XPOS], DEC);
        Serial.print(" y: ");
        Serial.print(icons[f][YPOS], DEC);
        Serial.print(" dy: ");
        Serial.println(icons[f][DELTAY], DEC);
        }

        while (1) {
        // draw each icon
        for (uint8_t f=0; f< NUMFLAKES; f++) {
        display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE);
        }
        display.display();
        delay(200);

        // then erase it + move it
        for (uint8_t f=0; f< NUMFLAKES; f++) {
        display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, BLACK);
        // move it
        icons[f][YPOS] += icons[f][DELTAY];
        // if its gone, reinit
        if (icons[f][YPOS] > display.height()) {
        icons[f][XPOS] = random() % display.width();
        icons[f][YPOS] = 0;
        icons[f][DELTAY] = random() % 5 + 1;
        }
        }
        }
        }


        void testdrawchar(void) {
        display.setTextSize(1);
        display.setTextColor(WHITE);
        display.setCursor(0,0);

        for (uint8_t i=0; i < 168; i++) {
        if (i == '\n') continue;
        display.write(i);
        if ((i > 0) && (i % 21 == 0))
        display.println();
        }
        display.display();
        }

        void testdrawcircle(void) {
        for (int16_t i=0; i<display.height(); i+=2) {
        display.drawCircle(display.width()/2, display.height()/2, i, WHITE);
        display.display();
        }
        }

        void testfillrect(void) {
        uint8_t color = 1;
        for (int16_t i=0; i<display.height()/2; i+=3) {
        // alternate colors
        display.fillRect(i, i, display.width()-i*2, display.height()-i*2, color%2);
        display.display();
        color++;
        }
        }

        void testdrawtriangle(void) {
        for (int16_t i=0; i<min(display.width(),display.height())/2; i+=5) {
        display.drawTriangle(display.width()/2, display.height()/2-i,
        display.width()/2-i, display.height()/2+i,
        display.width()/2+i, display.height()/2+i, WHITE);
        display.display();
        }
        }

        void testfilltriangle(void) {
        uint8_t color = WHITE;
        for (int16_t i=min(display.width(),display.height())/2; i>0; i-=5) {
        display.fillTriangle(display.width()/2, display.height()/2-i,
        display.width()/2-i, display.height()/2+i,
        display.width()/2+i, display.height()/2+i, WHITE);
        if (color == WHITE) color = BLACK;
        else color = WHITE;
        display.display();
        }
        }

        void testdrawroundrect(void) {
        for (int16_t i=0; i<display.height()/2-2; i+=2) {
        display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, WHITE);
        display.display();
        }
        }

        void testfillroundrect(void) {
        uint8_t color = WHITE;
        for (int16_t i=0; i<display.height()/2-2; i+=2) {
        display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, color);
        if (color == WHITE) color = BLACK;
        else color = WHITE;
        display.display();
        }
        }

        void testdrawrect(void) {
        for (int16_t i=0; i<display.height()/2; i+=2) {
        display.drawRect(i, i, display.width()-2*i, display.height()-2*i, WHITE);
        display.display();
        }
        }

        void testdrawline() {
        for (int16_t i=0; i<display.width(); i+=4) {
        display.drawLine(0, 0, i, display.height()-1, WHITE);
        display.display();
        }
        for (int16_t i=0; i<display.height(); i+=4) {
        display.drawLine(0, 0, display.width()-1, i, WHITE);
        display.display();
        }
        delay(250);

        display.clearDisplay();
        for (int16_t i=0; i<display.width(); i+=4) {
        display.drawLine(0, display.height()-1, i, 0, WHITE);
        display.display();
        }
        for (int16_t i=display.height()-1; i>=0; i-=4) {
        display.drawLine(0, display.height()-1, display.width()-1, i, WHITE);
        display.display();
        }
        delay(250);

        display.clearDisplay();
        for (int16_t i=display.width()-1; i>=0; i-=4) {
        display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE);
        display.display();
        }
        for (int16_t i=display.height()-1; i>=0; i-=4) {
        display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE);
        display.display();
        }
        delay(250);

        display.clearDisplay();
        for (int16_t i=0; i<display.height(); i+=4) {
        display.drawLine(display.width()-1, 0, 0, i, WHITE);
        display.display();
        }
        for (int16_t i=0; i<display.width(); i+=4) {
        display.drawLine(display.width()-1, 0, i, display.height()-1, WHITE);
        display.display();
        }
        delay(250);
        }

        void testscrolltext(void) {
        display.setTextSize(2);
        display.setTextColor(WHITE);
        display.setCursor(10,0);
        display.clearDisplay();
        display.println("scroll");
        display.display();

        display.startscrollright(0x00, 0x0F);
        delay(2000);
        display.stopscroll();
        delay(1000);
        display.startscrollleft(0x00, 0x0F);
        delay(2000);
        display.stopscroll();
        delay(1000);
        display.startscrolldiagright(0x00, 0x07);
        delay(2000);
        display.startscrolldiagleft(0x00, 0x07);
        delay(2000);
        display.stopscroll();
        }
        [/INDENT]
        [/LEFT]

        دلیل: ادغام دو پست برای جلوگیری از اسپم

        برای رفع ارور متغیر >>>> static unsigned char PROGMEM logo16_glcd_bmp
        رو به >>>>>>const unsigned char PROGMEM logo16_glcd_bmp
        تغییر دادم و در آخرین خط برنامه یک پرانتز کم بود اضافه کردم
        شما هم اگر ارور داشتین همین کار رو انجام بدین درست میشه
        جدیدترین ویرایش توسط اشکان غفارزاده; ۲۰:۲۲ ۱۳۹۵/۰۸/۲۷.

        دیدگاه

        لطفا صبر کنید...
        X