(SKU:DFR0647) 0.91”128x32 I2C OLED贴片焊盘单色显示屏
来自DFRobot Product Wiki
目录 |
简介
这款OLED显示器具有体积小巧、接线简单、功耗较低的特点;它的屏幕尺寸为0.91英寸的OLED显示屏,分辨率为128x32像素;采用了IIC的接口,并且是背部的贴片焊盘。 它的工作电压为3.3-5V,全屏的最大功耗为25Ma左右;模块的长度不超过41MM,宽度不超过12MM。 它可以适用于可穿戴显示设备、传感器数值显示、图形显示或者简单动画显示、字体或者歌词显示(MP3)等。
技术规格
- 工作电压:3.3V~5V
- 显示颜色:白色像素点
- 像素个数:128列 × 32行
- 接口方式:I2C
- 驱动芯片:SSD1306
- 亮度:180 (Typ) cd/m2
- 全屏点亮功耗:约25mA(3.3V)25mA(5V)
- 全屏熄灭功耗:约2mA(3.3V)2mA(5V)
- 工作温度:-30℃~+70℃
- 显示面积:22.38×5.58 mm
- 安装孔直径:2 mm
- 尺寸:41x12 mm
- 重量:2.2 g
引脚说明
|
|
使用教程
注意: |
准备 |
- 硬件
- 1 x Arduino UNO控制板
- 1 x 0.91" 128x32 OLED-A
- 若干 杜邦线
- 软件
关于如何安装库文件,点击链接
u8g2 API接口函数,点击链接了解详情
u8g2 字体参数列表,点击链接了解详情
DFRobot_GDL API接口函数,点击链接了解详情
接线图 |
Arduino 连接图
U8G2支持多种的方式的画图形,例如长方形、圆形、椭圆、三角形等 |
/* GraphicsTest.ino Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Modify by [Ajax](Ajax.zhong@dfrobot.com) url https://github.com/DFRobot/U8g2_Arduino 2019-11-29 */ #include <Arduino.h> #include <U8g2lib.h> #include <Wire.h> /* U8g2lib Example Overview: Frame Buffer Examples: clearBuffer/sendBuffer. Fast, but may not work with all Arduino boards because of RAM consumption Page Buffer Examples: firstPage/nextPage. Less RAM usage, should work with all Arduino boards. U8x8 Text Only Example: No RAM usage, direct communication with display controller. No graphics, 8x8 Text only. */ // Please UNCOMMENT one of the contructor lines below // U8g2 Contructor List (Frame Buffer) // The complete list is available here: https://github.com/olikraus/u8g2/wiki/u8g2setupcpp // Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // M0/ESP32/ESP8266/mega2560/Uno/Leonardo void u8g2_prepare(void) { u8g2.setFont(u8g2_font_6x10_tf); //设置字体为"u8g2_font_6x10_tf" u8g2.setFontRefHeightExtendedText();//Ascent will be the largest ascent of "A", "1" or "(" of the current font. Descent will be the descent of "g" or "(" of the current font. u8g2.setDrawColor(1); //定义所有绘图功能的位值(颜色索引)。所有绘图功能都会将显示存储器更改为该位值。默认值为1。 u8g2.setFontPosTop(); /*使用drawStr显示字符串时,默认标准为显示字符的左下角坐标。 本函数的功能可理解为将坐标位置改为显示字符串的左上角为坐标标准。*/ u8g2.setFontDirection(0); //设置屏幕方向:0--为正常显示 } /* * 绘制边框主题 */ void u8g2_box_title(uint8_t a) { u8g2.drawStr( 10+a*2, 5, "U8g2");//绘制字符串“U8g2” u8g2.drawStr( 10, 20, "GraphicsTest"); u8g2.drawFrame(0,0,u8g2.getDisplayWidth(),u8g2.getDisplayHeight() );//在坐标为(0,0)的位置开始绘制一个宽度w和高度h的空框 } /* * 绘制实心方形和空心方形 */ void u8g2_box_frame(uint8_t a) { u8g2.drawStr(0,0,"drawBox-drawFrame"); u8g2.drawBox(5+a,9,50,10); //在坐标为(5+a,9)的位置开始绘制一个宽度w和高度h的实心方形 u8g2.drawFrame(5+a,20,50,10);//在坐标为(5+a,20)的位置开始绘制一个宽度w和高度h的空心方形 } /* * 绘制实心圆和空心圆 */ void u8g2_circle_disc(uint8_t a){ u8g2.drawStr(0,0,"drawDisc-drawCircle"); u8g2.drawCircle(10+a,20,10); //在位置(10+a,20)绘制一个半径为10的实心圆 u8g2.drawDisc(118-a,20,10); //在位置(118-a,20)绘制一个半径为10的空心圆 } /* * 绘制实心圆和空心圆 */ void u8g2_RBox_RFrame(uint8_t a){ u8g2.drawStr(0,0,"drawRBox-drawRFrame"); u8g2.drawRBox(5+a,9,30,20,a+1); //在位置(5+a,9)开始绘制宽度为40,高度为30一个具有半径为a+1的圆形边缘的框(空心)。 u8g2.drawRFrame(90-a,9,30,20,a+1); //在位置(90-a,9)开始绘制宽度为25,高度为40一个具有半径为a+1的圆形边缘的框(实心)。 } /* * 绘制射线 */ void u8g2_Hline(uint8_t a){ u8g2.drawStr(0,0,"drawHLine"); u8g2.drawHLine(1,10,40+a*5); //在坐标为(1,10)画一条射线 u8g2.drawHLine(10,20,40+a*5); u8g2.drawHLine(20,30,40+a*5); } /* * 绘制线段 */ void u8g2_line(uint8_t a){ u8g2.drawStr(0,0,"drawLine"); u8g2.drawLine(10+a,10,80-a,32); //在两点之间画一条线。(参数为两点坐标) u8g2.drawLine(10+a*2,10,80-a*2,32); u8g2.drawLine(10+a*3,10,80-a*3,32); u8g2.drawLine(10+a*4,10,80-a*4,32); } /* * 绘制实心三角形和空心三角形 */ void u8g2_triangle(uint8_t a) { uint16_t offset = a; u8g2.drawStr( 0, 0, "drawTriangle"); u8g2.drawTriangle(14,7, 45,30, 10,40); //绘制一个三角形(实心多边形)。(参数为三角形三个顶点坐标) u8g2.drawTriangle(14+offset,7-offset, 45+offset,30-offset, 57+offset,10-offset); u8g2.drawTriangle(57+offset*2,10, 45+offset*2,30, 86+offset*2,53); u8g2.drawTriangle(10+offset,40+offset, 45+offset,30+offset, 86+offset,53+offset); } /* * 显示ASCII码表中的字符 */ void u8g2_ascii_1() { char s[2] = " "; uint8_t x, y; u8g2.drawStr( 0, 0, "ASCII page 1"); for( y = 0; y < 2; y++ ) { for( x = 0; x < 16; x++ ) { s[0] = y*16 + x + 32; u8g2.drawStr(x*7, y*10+10, s); } } } void u8g2_ascii_2() { char s[2] = " "; uint8_t x, y; u8g2.drawStr( 0, 0, "ASCII page 2"); for( y = 0; y < 2; y++ ) { for( x = 0; x < 16; x++ ) { s[0] = y*16 + x + 160; u8g2.drawStr(x*7, y*10+10, s); } } } /* * 绘制UTF-8编码中的字符串图标 */ void u8g2_extra_page(uint8_t a) { u8g2.drawStr( 0, 0, "Unicode"); u8g2.setFont(u8g2_font_unifont_t_symbols); u8g2.setFontPosTop(); u8g2.drawUTF8(0, 9, "☀ ☁");//在位置(0,24)开始绘制一个编码为UTF-8的字符串图标 switch(a) { case 0: case 1: case 2: case 3: u8g2.drawUTF8(a*3, 20, "☂"); break; case 4: case 5: case 6: case 7: u8g2.drawUTF8(a*3, 20, "☔"); break; } } /* * 显示字体的反显 */ void u8g2_xor(uint8_t a) { uint8_t i; u8g2.drawStr( 0, 0, "XOR"); u8g2.setFontMode(1); u8g2.setDrawColor(2); for( i = 0; i < 5; i++) { u8g2.drawBox(10+i*16, 18, 21,10); } u8g2.drawStr( 5+a, 19, "XOR XOR XOR XOR"); } /* *这是一个图形转换成位图的数据,用于使用drawXBMP()显示 */ #define cross_width 24 #define cross_height 24 static const unsigned char cross_bits[] U8X8_PROGMEM = { 0x00, 0x18, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, 0xC0, 0x00, 0x03, 0x38, 0x3C, 0x1C, 0x06, 0x42, 0x60, 0x01, 0x42, 0x80, 0x01, 0x42, 0x80, 0x06, 0x42, 0x60, 0x38, 0x3C, 0x1C, 0xC0, 0x00, 0x03, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x18, 0x00, }; #define cross_fill_width 24 #define cross_fill_height 24 static const unsigned char cross_fill_bits[] U8X8_PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x64, 0x00, 0x26, 0x84, 0x00, 0x21, 0x08, 0x81, 0x10, 0x08, 0x42, 0x10, 0x10, 0x3C, 0x08, 0x20, 0x00, 0x04, 0x40, 0x00, 0x02, 0x80, 0x00, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x00, 0x01, 0x40, 0x00, 0x02, 0x20, 0x00, 0x04, 0x10, 0x3C, 0x08, 0x08, 0x42, 0x10, 0x08, 0x81, 0x10, 0x84, 0x00, 0x21, 0x64, 0x00, 0x26, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #define cross_block_width 14 #define cross_block_height 14 static const unsigned char cross_block_bits[] U8X8_PROGMEM = { 0xFF, 0x3F, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0xC1, 0x20, 0xC1, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0xFF, 0x3F, }; /* * 绘制位图 */ void u8g2_bitmap_overlay(uint8_t a) { uint8_t frame_size = 28; u8g2.drawStr(0, 0, "Bitmap overlay"); u8g2.drawStr(0, frame_size + 12, "Solid / transparent"); /* * 设置位图的模式,定义位图函数是否将写入背景色(模式0 / solid,is_transparent = 0) * 或不写入背景颜色(模式1 / transparent,is_transparent = 1)。默认模式为0(固定模式) */ u8g2.setBitmapMode(false /* solid */); u8g2.drawFrame(0, 10, frame_size, frame_size); /* * 位置(x,y)是位图的左上角。XBM包含单色的1位位图。 * 当前的颜色索引用于绘制(请参阅setColorIndex)像素值1 */ u8g2.drawXBMP(2, 12, cross_width, cross_height, cross_bits); if(a & 4) u8g2.drawXBMP(7, 17, cross_block_width, cross_block_height, cross_block_bits);//绘制位图 u8g2.setBitmapMode(true /* transparent*/); u8g2.drawFrame(frame_size + 5, 10, frame_size, frame_size); u8g2.drawXBMP(frame_size + 7, 12, cross_width, cross_height, cross_bits); if(a & 4) u8g2.drawXBMP(frame_size + 12, 17, cross_block_width, cross_block_height, cross_block_bits); } //定义绘制状态的初始变量 uint8_t draw_state = 0; /* * 绘制函数,用于对其他函数的有序调用 */ void draw(void) { u8g2_prepare(); switch(draw_state >> 3) { case 0: u8g2_box_title(draw_state&7); break; case 1: u8g2_box_frame(draw_state&7); break; case 2: u8g2_circle_disc(draw_state&7); break; case 3: u8g2_RBox_RFrame(draw_state&7); break; case 4: u8g2_Hline(draw_state&7); break; case 5: u8g2_line(draw_state&7); break; case 6: u8g2_triangle(draw_state&7); break; case 7: u8g2_ascii_1(); break; case 8: u8g2_ascii_2(); break; case 9: u8g2_extra_page(draw_state&7); break; case 10: u8g2_xor(draw_state&7); break; case 11: u8g2_bitmap_overlay(draw_state&7); break; } } void setup(void) { u8g2.begin(); //初始化函数 } void loop(void) { //图片循环 u8g2.firstPage(); do { draw(); } while( u8g2.nextPage() ); //状态变量增加 draw_state++; if ( draw_state >= 14*8 ) draw_state = 0; delay(150); } |
结果 |
兼容性测试
MCU | 测试通过 | 测试失败 | 未测试 | 特别标注 |
FireBeetle-ESP32 | √ | |||
FireBeetle-ESP8266 | √ | |||
Arduino Uno | √ | |||
Leonardo | √ | |||
Mega2560 | √ | |||
Arduino M0 | √ |
常见问题
问: 液晶提供了u8g2和DFRobot_GDL驱动,是否2个我都要安装 |
- 答: 二者使用一个就可以了,u8g2是一款针对黑白液晶的强大液晶库;DFRobot_SDL内置了电容电阻触摸,简单UI及u8g2的部分功能,支持黑白和彩色液晶。
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。