0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何让Arduino显示“ Hello World!”

454398 来源:网络整理 作者:网络整理 2020-01-28 17:49 次阅读

步骤1:我们要做的事情今日学习

我们将讨论:

-什么是OLED显示器?

-然后我们将仔细研究0.91(128x32)和0.96(128x64)I2C OLED显示器

-接下来,我们将讨论将Adafruit库安装到Arduino IDE

-然后我们将NodeMCU和Arduino连接到OLED显示器

-接下来,我们将看一下代码并在其中显示一些图形和文本

-我们还将讨论应用自定义字体和显示图像

-然后,我们将使用I2C多路复用器将多个OLED连接到微控制器

-最后,我们将讨论人们在使用OLED显示器时犯的一些常见错误

步骤2:硬件要求

对于本教程,我们需要:

-A面包板

-一个0.91英寸(128x32)和0.96英寸(128x64)I2C OLED显示器

-Arduino UNO/NANO(方便使用)

-NodeMCU

-TCA9548A I2C多路复用器

-很少使用连接电缆

-和一根USB电缆来上传代码

步骤3:什么是OLED显示器?

OLED或有机发光二极管是发光的

二极管(LED),其中的电致发光元件该层是一层有机化合物薄膜(数百万个小的LED灯),可响应电流而发光。

OLED用于在电视屏幕,计算机显示器,便携式系统等设备中创建数字显示器。例如手机,手持游戏机和PDA。 OLED显示器不发光,因为它发出可见光。

步骤4:

OLED显示器的类型很多

市场上的

-尺寸

-颜色

-品牌

-协议

-SPI(串行外围接口)或I2C

-无源矩阵(PMOLED)或有源矩阵(AMOLED)控制方案

我将讨论将蓝色的0.91(128x32 OLED)和0.96(128x64 OLED)I2C OLDE显示器连接到Arduino NANO和NodeMCU。 I2C总线技术仅使用MCU的2个引脚,因此我们可以为其他传感器提供堆。

步骤5:细看

在这两个显示器上放个更近些。

在这些显示器的背面,有很多贴片SMD电容器电阻器焊接在板上。但是,由于它是I2C设备,我们只关心这2个引脚(SCL和SDA)

显示器仅使用四根电线连接到Arduino –两根用于电源(VCC和GND),两根用于数据(串行)时钟SCL和

串行数据SDA),从而使接线非常简单。数据连接为I2C(I²C,IIC或内部集成电路),该接口也称为TWI(两线接口)。

-板载引脚的顺序可以不同,因此始终为三重在将其连接到项目之前,请进行检查。

-工作电压在3v至5v之间,但是,最好使用制造商数据表中的指导。

-有时我们需要在项目中使用2个显示器。那么,我们如何实现呢?

诀窍是在显示器上显示一个可配置的地址。该单元的可配置地址在0x78和0x7A之间。只需从一侧解焊0Ohm电阻器并将其连接到另一侧,或者仅通过放置全局焊料即可更改地址。在本教程后面的部分中,当我们将多个显示器连接到Arduino时,我们将深入讨论它。

在图中,这些显示器看起来非常大。但是,实际上,它们很小。它们由128 x 32/64个单独的OLED像素制成,不需要任何背光。看看这个,看看它有多小。即使它们很小,它们也可以在任何电子项目中非常有用。

步骤6:库

有几个库可以控制这些显示

。过去我曾经使用过“ u8glib库”,但是我发现AdaFruit库在我们的项目中非常易于理解和使用。因此,我将在本教程中使用AdaFruit库。

要控制OLED显示,您需要“ adafruit_GFX.h”库和“ adafruit_SSD1306.h”库。

有两种下载库并将其安装到Arduino IDE的方法。

方法1

转到“库管理器”并搜索“ adafruit_SSD1306”和“ adafruit_gfx” “

选择最新版本,然后单击“安装”按钮。

安装后,您可以在程序中使用这些库。

方法2

这两个库也可以从github下载(两者都需要):

我将在下面的描述中提供链接。

显示库:https://github.com/adafruit/Adafruit_SSD1306

GFX库:https://github.com/adafruit/Adafruit-GFX-Library

下载后,从以下位置复制Adafruit_SSD1306-master文件夹将下载的压缩文件下载到Arduino库文件夹中。通常在Windows系统上的文档》 Arduino》库中可以找到此文件夹。在Linux上,通常位于主文件夹》 Arduino》库中。最后,在Arduino库文件夹中,将Adafruit_SSD1306-master文件夹重命名为Adafruit_SSD1306。

步骤7:

现在,让我们看一下“ Adafruit_SSD1306” .h“

文件

在此库中我们需要了解两件事:

1。如果要使用较小的显示器,请使用默认的128_32,否则对于较大的显示器请注释128_32,然后取消注释128_64

2。如果您已将0x7A地址焊接在板上(稍后将讨论),则将7位0x3D地址用于较大的显示器,否则使用默认的0x3C地址。对于较小的显示器,地址为0x3C。

步骤8:为128 X 64/32 OLED布线

让我们从连接开始

要注意的第一件事,也是最重要的一点是,某些显示器可能会交换GND和VCC电源引脚。检查您的显示器以确保它与图像相同。如果引脚被交换,请确保更改与Arduino或NodeMCU的连接。

-NodeMCU OLED接线

OLED VCC – NodeMCU 3.3V

OLED GND – NodeMCU GND

OLED SCL – NodeMCU D1

OLED SDA – NodeMCU D2

-Arduino Uno OLED接线

OLED VCC – Arduino 5V

OLED GND – Arduino GND

OLED SCL – Arduino Uno A5

OLED SDA – Arduino Uno A4

-Arduino MEGA 2560 OLED接线

OLED VCC – Arduino 5V

OLED GND – Arduino GND

OLED SCL – Arduino MEGA 2560引脚21

OLED SDA – Arduino MEGA 2560引脚20

第9步:代码

Adafruit库提供了非常好的示例,用于显示128x32和128x64。

该库位于“文件”》“示例”》“ Adafruit SSD1306”下,然后显示

我们将使用128x32 I2C示例,并将其修改为可与128x64和128x32显示器一起使用通过将其连接到Arduino,然后连接到NodeMCU板。

代码首先包括两个Adafruit库。在本教程中,我将只强调代码的那些部分,这些部分是我们在板上和显示器上加载所必需的。如果您想了解更多有关代码的信息,请在我的博客或下面的评论部分中添加评论,我会尽力与您联系。

-首先,我们将代码加载到Arduino Nano连接到128x32显示器。

我们可以按原样使用该代码,而无需进行任何修改。

128x32使用0x3C地址,因此此位看起来很好,让我们仔细检查标头库,是的,它也使用0x3C地址,显示类型为128x32。

-现在可以连接128x64显示器。我们知道它默认情况下使用0x3C地址,因此我们不需要在代码或库中更新地址。

我们只需要注释128_32并在注释中取消注释128_64。标头库,然后在我们的代码中将LCDHEIGHT更改为64。

-现在要在NodeMCU上运行相同的代码,我们需要在代码中再更改一行。

“ #define OLED_RESET 4”》“ #define OLED_RESET LED_BUILTIN”其余部分代码与Arduino

差不多,显示所有我们首先需要使用

display.clearDisplay()清除上一个屏幕的内容。//清除缓冲区

然后绘制对象

testdrawline();//画一条线

在硬件上显示它

display.display();//使它们在显示硬件上可见!

等待一段时间,然后显示下一个项目。

delay(2000);//等待2秒

在此示例中,我们将显示一些项目,例如文本,线条,圆圈,滚动文本,三角形等等。继续发挥您的想象力,并在这些微型显示屏上显示任何内容。

步骤10:自定义文本和添加图像

有时您的代码需要显示自定义字体和

图像。如果您在位映射方面非常擅长,那么您只需要通过打开或关闭显示器的微小LED来创建自定义字体和图像来创建字节数组即可。

但是,我在进行这些映射,并且不想花费数小时来创建位图表。

那么,我有什么选择?我通常使用两个网站来生成自定义字体和图像。链接在下面的描述中提供。

自定义字体

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

转到字体转换器网站,选择字体系列,样式,大小,库版本作为“ Adafruit GFX字体”,然后单击“创建”按钮。在此页面的右侧,您可以看到实际显示的字体。

根据您的选择,网页将生成字体头文件。在您的代码所在的文件夹中创建一个名为“ modified_font.h”的文件,并将生成的代码复制并保存到其中。然后,您只需要在代码中包括头文件即可使用自定义字体。

#include“ modified_font.h”

然后,您只需要在显示之前设置字体即可

display.setFont(&Your_Fonts_Name);

您可以从刚添加到项目中的头文件中获取字体的名称。就是这样,很容易。

使用自定义字体时,内存始终是个问题,因此请始终考虑内存将消耗的字节。只要记住Arduino UNO只有32K的内存即可。

自定义图像

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

显示位图屏幕上的图像,您首先需要创建一个128 x 64/32尺寸的图像。

我正在使用旧的“ MS Paint”创建一个128 x 64位图图像,然后将其上传到此图像。图像转换器网站。该网站将图像转换为字节串,可与Arduino和OLED显示器一起使用。

首先将图像上传到网站。然后选中“反转图像颜色”复选框,然后将“输出代码格式”更改为“ Arduino代码”,然后选择方向并单击“生成代码”按钮以生成字节数组。 “预览”部分向您显示图像在实际显示器上的外观。

我在本教程中随附了代码,可用于显示图像。您只需要用刚生成的阵列替换我的代码中的阵列,然后将其加载到Arduino。

步骤11:连接2台显示器

将两个128 x 64显示器连接到您的项目很容易。

您只需要从0x78地址上拆下0Ohm电阻并将其放在0x7A上,然后在代码中使用0x3D地址而不是默认的0x3C。

您一定想知道为什么我们使用0x3C和0x3D地址而不是实际的0x78和0x7A。 Arduino接受7位地址,而不接受8位硬件地址。因此,我们首先需要将8位地址转换为二进制,然后将最低有效位切掉以获得7位。然后将7位转换为十六进制,以获取您在代码中输入的0x3C或0x3D地址。

首先,通过为显示指定一个唯一的名称来初始化显示:

Adafruit_SSD1306 display1( OLED_REST);

Adafruit_SSD1306 display2(OLED_REST);

然后在代码中使用显示1和显示2调用带有其中设备地址的begin语句:

display1.begin(SSD1306_SWITCHCAPVCC,0x3C);//显示1个op地址0x3C

display2.begin(SSD1306_SWITCHCAPVCC,0x3D);//显示2个操作地址0x3D

就是这样,您现在可以继续使用其余代码中的Display 1或Display 2来做您想做的任何事情。我在本教程中提供了一个示例。

接线与我们之前所做的完全相同,几乎您只需要在Arduino或NodeMCU的相同I2C引脚上添加另一个显示器即可。然后,MCU将根据这些地址在I2C数据线上发送数据。

步骤12:连接2个以上的显示器

现在,如果要连接两个以上的显示器怎么办?

Arduino的引脚数量有限,因此您所连接的屏蔽数量不能超过一定数量。而且,它只有一对I2C总线。

那么,如何将两个以上的I2C显示器连接到Arduino?诀窍是使用TCA9548多路复用器。

TCA9548通过为每个传感器从属子分配一个唯一的通道,使单个微控制器可以与多达64个具有相同或不同I2C地址的传感器进行通信。 -bus。

当我们谈论通过2根线将数据发送到多个设备时,我们需要一种解决它们的方法。就像邮递员走一条路,将邮件包投到不同的房子一样,因为它们上面写有不同的地址。

多路复用器连接到微型计算机的3V3,GND,SDA和SCL线路控制器。从传感器连接到板上的八个SCL/SDA从端口之一。通过向TCA9548A发送其I2C地址(0x70 {默认}-0x77),然后是通道号(0b00000001-0b10000000)来选择通道。为了控制64个相同的I2C寻址部分,您最多可以将8个这些多路复用器连接在一起在0x70-0x77地址上。通过将三个地址位A0,A1和A2连接到VIN,您可以获得地址的不同组合。我将在我的下一个关于TCA9548A突破板的教程中对此进行深入解释。现在,让我们将8个OLED连接到该板上并快速查看代码。

连接:

VIN至5V(或3.3V)

GND接地

SCL到I2C时钟

SDA到I2C数据

然后将传感器连接到VIN,GND并使用SCn/SDn多路复用总线

现在,Int代码首先要包含“ Wire”库并定义多路复用器地址。

#include“ Wire.h”

#include

#define MUX_Address 0x70//TCA9548A编码器地址

然后我们需要使用此功能选择我们要通信的端口并在其上发送数据:

void tcaselect(uint8_t i){

if(i》 7)return;

Wire.beginTransmission(MUX_Address);

Wire.write(1 《

Wire.endTransmission();

}

接下来,我们将通过调用“ u8g.begin();”来初始化设置部分的显示。对于连接到MUX“ tcaselect(i);”的每个显示,一旦初始化,我们就可以通过调用函数“ tcaselect(i);”来完成我们想要的任何操作。其中“ i”是多路复用总线的值,然后相应地发送数据和时钟。

步骤13:优点和缺点

OLED的图像很漂亮。但是,OLED也有

的缺点。由于OLED屏幕包含有机材料,因此其寿命比LCD显示器短。此外,许多OLED显示器长时间显示同一图像后会出现烙印。老化后,即使显示了其他图像,图像仍保留在屏幕上。因此,请确保每隔几秒钟不断刷新屏幕。水会立即损坏这些显示器的有机材料。

优点

无需背光

显示器非常薄且轻巧

低功耗

视角比LCD宽

亮度和对比度都很好

高速且响应时间短

深黑色

缺点

昂贵的技术

寿命短

OLEDS更容易老化

水灾

第14步:常见错误

总而言之,本教程仅讨论一些常见错误

人们在使用这些显示器时所做的事情:

-在项目中使用它之前,请务必三遍检查引脚

-在头文件和代码中选择正确的库地址

#define SSD1306_I2C_ADDRESS 0x3C//在Adafruit_SSD1306.h

display.begin(SSD1306_SWITCHCAPVCC,0x3C);//在代码中//

如果地址错误,则OLED将不会显示任何内容

-必须在驱动程序中更改显示大小,然后才能使用它。如果未更改,则在尝试验证代码时会收到错误消息

#error(“高度不正确,请修复Adafruit_SSD1306.h!”);

-如果使用NodeMCU确保将OLED_RESET从4替换为LED_BUILTIN

#define OLED_RESET LED_BUILTIN

我有现场人员使用此OLED显示器进行各种操作。有些甚至制作了电子游戏。我真的对使用这种小显示屏制作视频游戏不感兴趣。但是,我现在将离开您去探索您的想象力,并提出令人惊讶的想法。

步骤15:链接

-博客:http://diyfactory007.blogspot.com.au

-添加图像:http://javl.github.io/image2cpp/

-自定义文本:http://oleddisplay.squix.ch/#/home

-Adafruit显示库:https://github.com/adafruit/Adafruit_SSD1306

- Adafruit GFX库:https://github.com/adafruit/Adafruit -GFX库

-u8glib库:https://code.google.com/archive/p/u8glib/或https://github.com/olikraus/u8glib

如果要使用较小的显示器,请使用默认的128_32,否则,对于较大的显示器请注释128_32并取消注释代码中的128X64 NO_ACK(只需取消注释所使用的屏幕类型)(字体在字体库中)
责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6812

    浏览量

    147649
  • 显示器
    +关注

    关注

    21

    文章

    4738

    浏览量

    137877
  • Arduino
    +关注

    关注

    184

    文章

    6428

    浏览量

    184847
收藏 人收藏

    评论

    相关推荐

    鸿蒙OpenHarmony【小型系统编写“Hello World”程序】 (基于Hi3516开发板)

    下方将展示如何在单板上运行第一个应用程序,其中包括新建应用程序、编译、烧写、运行等步骤,最终输出“Hello World!”。
    的头像 发表于 04-22 21:55 93次阅读
    鸿蒙OpenHarmony【小型系统编写“<b class='flag-5'>Hello</b> <b class='flag-5'>World</b>”程序】 (基于Hi3516开发板)

    ESP32使用Arduino_GFX点亮1.54寸IPS全视角TFT屏幕

    凌顺实验室(lingshunlab.com)在本示例中,主要运行Arduino_GFX库的Hello World的程序。
    的头像 发表于 03-21 11:38 943次阅读
    ESP32使用<b class='flag-5'>Arduino</b>_GFX点亮1.54寸IPS全视角TFT屏幕

    用于EK-RA8D1 MIPI LCD显示器的GUIX Hello World

    电子发烧友网站提供《用于EK-RA8D1 MIPI LCD显示器的GUIX Hello World.pdf》资料免费下载
    发表于 02-20 09:48 0次下载
    用于EK-RA8D1 MIPI LCD<b class='flag-5'>显示</b>器的GUIX <b class='flag-5'>Hello</b> <b class='flag-5'>World</b>

    修改蜂鸟E203 v2内核源码后,hello world报错是哪里出了问题?

    修改蜂鸟E203 v2内核源码后,测试“hello world”程序,vivado仿真可以顺利通过,再输出界面打印出“hello world”字样,但上板后出现问题,
    发表于 01-10 06:12

    DshanMCU-R128s2 Hello World!

    本文将介绍使用 R128 开发板从串口输出 Hello World 的方式介绍 SDK 软件开发流程。 载入方案 我们使用的开发板是 R128-Devkit,需要开发 C906 核心的应用程序,所以
    的头像 发表于 12-22 17:24 284次阅读
    DshanMCU-R128s2 <b class='flag-5'>Hello</b> <b class='flag-5'>World</b>!

    c语言hello world程序编写

    C语言是一种非常经典和常用的编程语言,而"Hello world"程序是每一个编程入门者的必修课。它是用来熟悉编程语言基本语法、环境配置,以及验证编程环境是否正常工作的第一个程序。本文将详细介绍
    的头像 发表于 11-26 09:23 1337次阅读

    我的第一个UVM代码——Hello world

    以下文章来源于ExASIC ,作者陈锋 你刚开始是怎么学UVM的?白皮书还是红皮书?而我是从hello world实验开始的。 就是这段: (为什么是图片不是文字?就是为了不让你们Ctrl-C
    发表于 11-03 10:18

    RA-RTT体验RT-Thead超级简单的hello world!

    在这篇帖子上,我们增加自己的代码,实现串口输出hello world等功能
    的头像 发表于 10-12 14:36 280次阅读
    RA-RTT体验RT-Thead超级简单的<b class='flag-5'>hello</b> <b class='flag-5'>world</b>!

    使用MPLAB Harmony v3的MPLAB Harmony配置器在PIC32单片机上创建Hello World应用程序

    电子发烧友网站提供《使用MPLAB Harmony v3的MPLAB Harmony配置器在PIC32单片机上创建Hello World应用程序.pdf》资料免费下载
    发表于 09-20 14:52 1次下载
    使用MPLAB Harmony v3的MPLAB Harmony配置器在PIC32单片机上创建<b class='flag-5'>Hello</b> <b class='flag-5'>World</b>应用程序

    使用MPLAB Harmony配置器(MHC)在SAM单片机上创建Hello World应用程序

    电子发烧友网站提供《使用MPLAB Harmony配置器(MHC)在SAM单片机上创建Hello World应用程序.pdf》资料免费下载
    发表于 09-20 10:58 1次下载
    使用MPLAB Harmony配置器(MHC)在SAM单片机上创建<b class='flag-5'>Hello</b> <b class='flag-5'>World</b>应用程序

    【风火轮YY3568开发板免费体验】第三章:在 buildroot 框架中添加本地的 hello_world 软件包以及给包打patch

    提高逐渐显示出来这种做法的优越性。所以,本章就演示下如何根据 The Buildroot User Manual.pdf 的指导一步步完成 hello_world 工程到 builderoot
    发表于 09-11 15:35

    创建一个简单Hello World Linux应用程序的过程

    本教程将向您介绍创建一个简单的Hello World Linux应用程序的过程,然后将该应用程序加载到运行ARM嵌入式Linux的Cortex-A9固定虚拟平台(FVP)模型上。 Cortex-A9固定虚拟平台(FVP)模型随ARM开发工作室(ARM DS)所有版本提供。
    发表于 08-28 06:32

    如何使用ARM编译器构建Hello World

    在本教程中,我们将展示如何使用Arm构建一个名为hello_world.C的简单C程序DS-5中的编译器工具链。 您可以找到Arm编译器工具链的概述。本教程假定您已安装并获得Arm DS-5的许可。有关详细信息,请参阅获取从Arm DS-5 Development Studio开始。
    发表于 08-08 07:55

    如何使用Arm Compiler 6构建Hello World

    Virtual上调试站台 本Arm®DS-5 Development Studio教程介绍了一个基本的Hello World C程序。它将是 如果您想在Armv8平台上进行裸机软件开发,这将非常有用,并显示
    发表于 08-08 07:41

    我的第一个UVM代码—Hello world

    你刚开始是怎么学UVM的?白皮书还是红皮书?而我是从hello world实验开始的。
    的头像 发表于 06-15 10:49 547次阅读
    我的第一个UVM代码—<b class='flag-5'>Hello</b> <b class='flag-5'>world</b>