我们大多数人都会熟悉大多数项目中用来向用户显示某些信息的16×2点矩阵LCD显示器。但是这些LCD显示器在功能上有很多限制。在本教程中,我们将学习OLED显示器以及如何使用Arduino。市场上有很多类型的OLED显示器,并且有很多使它们工作的方法。在本教程中,我们将讨论其分类以及最适合您的项目的分类。
所需硬件:
- 7pin 128×64 OLED显示模块(SSD1306)
- Arduino UNO /纳米
- 面包板
- 连接线
- 电脑/笔记本电脑
了解OLED显示器:
OLED一词代表“ 有机发光二极管”, 它使用了与我们大多数电视相同的技术,但与之相比像素更少。将这些看起来很酷的显示模块与Arduino交互是非常有趣的,因为这会使我们的项目看起来很酷。我们在这里涵盖了有关OLED显示器及其类型的完整文章。
我们使用的是单色7针SSD1306 0.96英寸OLED显示屏。选择此显示器的原因是它可以在三种不同的通信协议上工作,例如SPI 3线模式,SPI四线模式和IIC模式。本教程将介绍如何以SPI 4线模式使用该模块,因为它是最快的通信模式,也是默认模式。
引脚及其功能在下表中说明。
针号 |
引脚名称 |
其他名称 |
用法 |
1个 |
nd |
地面 |
模块的接地引脚 |
2 |
Vdd |
Vcc,5V |
电源引脚(可承受3-5V) |
3 |
SCK |
D0,SCL,时钟 |
充当时钟引脚。用于I2C和SPI |
4 |
SDA |
D1,MOSI |
模块的数据引脚。用于IIC和SPI |
5 |
RES |
复位 |
重置模块(在SPI期间有用) |
6 |
直流电 |
A0 |
数据命令引脚。用于SPI协议 |
7 |
CS |
片选 |
在SPI协议下使用多个模块时很有用 |
在本教程中,我们将仅以4线SPI模式操作模块,其余部分将留给其他教程。
Arduino社区已经为我们提供了许多库,可以直接使用它们来简化此过程。我试用了一些库,发现Adafruit_SSD1306库非常易于使用,并且具有少量图形选项,因此在本教程中将使用相同的库。但是,如果您的项目有内存/速度限制,请尝试使用U8g库,因为它的运行速度更快且占用的程序内存更少。
硬件和连接:
该电路图的SSD1306 OLED与Arduino的接口是非常简单的,如下所示
我们只是在OLED模块和Arduino之间建立了SPI通信。由于OLED以3V-5V供电,并且消耗的功率非常小,因此不需要外部电源。您可以简单地使用电线进行连接,也可以使用面包板(如我以前使用的那样),以便于实验。下面的故事中也列出了连接
序号 |
OLED模块上的引脚名称 |
Arduino上的引脚名称 |
1个 |
地线 |
地面 |
2 |
Vdd,Vcc,5V |
5伏 |
3 |
SCK,D0,SCL,CLK |
10 |
4 |
SDA,D1,MOSI |
9 |
5 |
RES,RST,RESET |
13 |
6 |
直流,A0 |
11 |
7 |
CS,片选 |
12 |
注意: 仅通过通电将无法显示OLED模块上的任何背光/发光。您必须对其进行正确的编程才能注意到OLED显示屏上的任何变化。
为Arduino编程SSD1306 OLED显示器:
连接准备就绪后,您就可以开始对Arduino进行编程了。如前所述,我们将使用Adafruit库和GFX库来处理此OLED模块。请按照以下步骤测试您的OLED显示器。
步骤1:使用以下链接从Github下载Adafruit库和GFX库
- Adafruit图书馆
- GFX图形库
步骤2:您应该已经下载了两个Zip文件。现在按照以下步骤将它们添加到您的Arduino中
草图->包含库->添加压缩库 ,如下所示。然后选择我们刚刚下载的库。您一次只能选择一个库,因此您必须再次重复此步骤。
步骤3:通过选择 File-> Examples-> Adafruit SSD1306-> SSD1306_128 * 64_SPI.ino ,启动示例程序,如下图所示。
步骤4:在示例程序的第64行顶部,添加行 “ #define SSD1306_LCDHEIGHT 64” ,如下图所示。
步骤5:现在上传程序,您应该会看到OLED显示屏启动,并带有默认的Adafruit示例代码,如下图所示。在全工作的视频在最后给出。
该示例程序向您显示了可以在OLED屏幕上显示的所有可能的图形。此代码应足以创建位图,绘制线/圆/矩形,播放像素,以不同的字体和大小显示字符和字符串等。
如果您想更好地理解库及其功能,可以进一步阅读。该代码的每个垃圾都会在注释行的帮助下进行拆分和解释。完整的代码在本文末尾给出
显示和清除屏幕:
在OLED屏幕上书写就像在黑板上书写一样,我们必须先写入这些值,然后对其进行清理,然后才能将其覆盖。以下命令用于写入和清除显示
display.display(); //写入以显示display.clearDisplay(); //清除显示
显示字符变量:
要在变量内显示内容,可以使用以下代码。
字符i = 5; //要显示的变量display.setTextSize(1); //选择文本显示的大小。setTextColor(WHITE); //对于单色显示,只能显示白色。setCursor(0,0); // 0,0是OLED屏幕显示的左上角。write(i); //写出要显示的变量
画一条线,圆,矩形,三角形:
如果要在显示器上添加一些符号,则可以使用以下代码绘制以下任何内容
display.drawLine(display.width()-1,0,i,display.height()-1,WHITE); // void drawLine(x0,y0,x1,y1,color); display.drawRect(i,i,display.width()-2 * i,display.height()-2 * i,WHITE); // void drawRect(x0,y0,w,h,color); 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); // void drawTriangle(x0,y0,x1,y1,x2,y2,color); display.drawCircle(display.width()/ 2,display.height()/ 2,i,WHITE); // void drawCircle(x0,y0,r,color);
在屏幕上绘制字符串:
可以使用以下代码块在屏幕上的特定位置和大小显示任何消息
display.setTextSize(2); //设置文本显示的大小。setTextColor(WHITE); //颜色设置display.setCursor(10,0); //字符串将从10,0(x,y)display.clearDisplay();开始 //清除屏幕上的所有先前显示display.println(“ Circuit Digest”); //在此处打印字符串“ Circuit Digest” display.display(); //将文字发送到屏幕
显示位图图像:
OLED模块可以完成的一项不可信赖的事情是它可以用于显示位图。以下代码用于显示位图图像
静态const无符号字符PROGMEM徽标16_glcd_bmp = {B00000000,B11000000,B00000001,B11000000,B00000001,B11000000,B00000011,B11100000,B11110011,B11100000,B11111110,B11111000,B01111110,B11111111,B00110011,B10011111,B00011111, B10100000,B00111111,B11100000,B00111111,B11110000,B01111100,B11110000,B01110000,B01110000,B00000000,B00110000};display.drawBitmap(XPO],YPOS,位图,w,h,WHITE);// void drawBitmap(x,y,* bitmap,w,h,color);
如您所见,为了显示图像,位图数据必须以PROMGMEM指令的形式存储在程序存储器中。简而言之,我们必须通过向OLED传递序列或序列中的值来指示OLED显示器,如上所示。该数组将包含图像的位图数据。
听起来可能很复杂,但是借助Web工具,将图像转换为位图值并将它们加载到上述数组中非常容易。
只需加载图像并调整设置即可获得所需的图像预览。然后单击“生成代码”,复制代码并将其粘贴到您的阵列中。上传程序,您就完成了。我尝试显示蝙蝠侠徽标,结果就是这样。
这些库仍然可以做很多事情。要了解完整的可能性,请访问Adafruit GFX图形“原语”页面。
希望您能够运行并准备在某些项目中实现OLED显示屏。如果您有任何问题,请在评论部分中分享它们,我将尽力予以纠正。