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

    文章

    7496

    浏览量

    151082
  • 显示器
    +关注

    关注

    21

    文章

    4956

    浏览量

    139846
  • Arduino
    +关注

    关注

    187

    文章

    6464

    浏览量

    186675
收藏 人收藏

    评论

    相关推荐

    编译IDF example/hello_world例程时,编译报错说找不到lwip inet.h头文件,为什么?

    大家好,我在编译IDF example/hello_world例程时,编译报错说找不到lwip inet.h头文件,但是我到该路径下发现了该头文件,这是为什么?还有组件lwip并没有源码,该如何更新
    发表于 06-26 07:33

    esp32运行make flash烧写hello world遇到的疑问求解

    串口驱动安装正常,连接正常 在demo目录里hello world程序下,运行make all,编译正常, 然后运行 make flash 出现
    发表于 06-26 06:25

    使用make flash命令烧录Hello_world程式失败了,为什么?

    请问我使用 make flash 命令要烧录 Hello_world 程式失败了 看起来像是COM3 Port有连上,但找不到开发板上芯片,无法写入 状况如下e3.JPG (119.44 KiB
    发表于 06-26 06:10

    hello_world例程里面CONFIG_FREERTOS_HZ没定义,但又能编译烧录,为什么?

    hello_world例程里面CONFIG_FREERTOS_HZ没定义,但又能编译烧录,这是什么情况?
    发表于 06-19 07:25

    鸿蒙OpenHarmony【轻量系统 编写“Hello World”程序】 (基于Hi3861开发板)

    下方将通过修改源码的方式展示如何编写简单程序,输出“Hello world”。请在下载的源码目录中进行下述操作。
    的头像 发表于 05-16 18:15 947次阅读
    鸿蒙OpenHarmony【轻量系统 编写“<b class='flag-5'>Hello</b> <b class='flag-5'>World</b>”程序】 (基于Hi3861开发板)

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

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

    鸿蒙OpenHarmony【标准系统 编写“Hello World”程序】(基于RK3568开发板)

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

    鸿蒙OpenHarmony【标准系统编写“Hello World”程序】 (基于RK3568开发板)

    编写“Hello World”程序 下方将展示如何在单板上运行第一个应用程序,其中包括新建应用程序、编译、烧写、运行等步骤,最终输出“Hello World!”。 前提条件 已参考[创
    的头像 发表于 04-24 17:32 702次阅读
    鸿蒙OpenHarmony【标准系统编写“<b class='flag-5'>Hello</b> <b class='flag-5'>World</b>”程序】 (基于RK3568开发板)

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

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

    鸿蒙OpenHarmony【轻量系统编写“Hello World”程序】 (基于Hi3861开发板)

    下方将通过修改源码的方式展示如何编写简单程序,输出“Hello world”。请在下载的源码目录中进行下述操作。
    的头像 发表于 04-21 21:44 289次阅读
    鸿蒙OpenHarmony【轻量系统编写“<b class='flag-5'>Hello</b> <b class='flag-5'>World</b>”程序】 (基于Hi3861开发板)

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

    凌顺实验室(lingshunlab.com)在本示例中,主要运行Arduino_GFX库的Hello World的程序。
    的头像 发表于 03-21 11:38 4150次阅读
    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 575次阅读
    DshanMCU-R128s2 <b class='flag-5'>Hello</b> <b class='flag-5'>World</b>!

    AWTK 串口屏开发(1) - Hello World

    数据类型功能说明温度整数温度。范围(0-100)摄氏度创建项目从模板创建项目,将hmi/template_app拷贝hmi/hello_word即可。第一个项目最好不
    的头像 发表于 12-08 15:52 483次阅读
    AWTK 串口屏开发(1) - <b class='flag-5'>Hello</b> <b class='flag-5'>World</b>