本帖最后由 dfrobot 于 2019-5-30 21:53 编辑
简介 这个ESP32教程旨在解释我们如何使用运行在ESP32开发板上的Arduino核心改变SSD1306 OLED显示屏所绘字符串的值。为了展示制作过程,我们将通过每秒递增一次的简单计数器进行显示。您可以通过上一篇文章查看如何将ESP32连接到SSD1306 OLED显示器以及如何安装与之交互所需的库。本教程使用Elecrow版本SSD1306 OLED显示器。使用的ESP32 开发板型号为NodeMCU。
代码
我们将启动包含Wire.h库的代码,Wire.h库将应用于I2C与显示器的交互过程。我们还将囊括SSD1306.h库,它将公开显示器绘制所需的功能。
[mw_shl_code=applescript,true]#include <Wire.h>
#include "SSD1306.h"[/mw_shl_code]
接下来,我们将创建一个SSD1306类的对象,它拥有我们如何在显示器上进行绘制的方法。
请记住,在上一篇文章中,该类的构造函数接收显示器的I2C地址作为第一个输入信号,并且第二个和第三个输入端分别接收I2C SDA和SCL引脚的编号。
在我们的案例中,我们将继续沿用前一篇文章所示的连接图,因此SDA引脚将为21,SCL将为22。
[mw_shl_code=applescript,true]SSD1306 display(0x3c, 21, 22);[/mw_shl_code]
我们还将计数器声明为全局变量,因此我们可以稍后在Arduino循环函数的多次迭代中对其进行递增。
[mw_shl_code=applescript,true]int counter = 0;[/mw_shl_code]
接下来设置函数,我们将通过调用显示对象的init方法对显示进行初始化。
[mw_shl_code=applescript,true]void setup() {
display.init();
}
[/mw_shl_code]
由于我们希望动态更改将在显示器上显示的字符串内容,我们将在Arduino循环函数上执行剩余代码。
因为在每次循环迭代中我们将显示新的内容,我们首先通过调用clear方法清除显示。此方法不接收任何参数并返回void。
[mw_shl_code=applescript,true]display.clear();[/mw_shl_code]
然后我们通过调用显示对象的drawString方法编写我们希望显示的字符串。
我们将把字符串绘制的坐标保持为零(drawString方法的第一个和第二个参数分别是x和y位置)。
对于第三个参数,我们将传递要绘制的字符串,它将通过我们的全局计数器进行构建。
[mw_shl_code=applescript,true]display.drawString(0,0, "Counter: " + String(counter));[/mw_shl_code]
接下来,为了在显示器上发送需要绘制的实际内容,我们在对象上调用display方法。
[mw_shl_code=applescript,true]display.display();[/mw_shl_code]
为了最终确定Arduino循环,我们将递增计数器并在每次迭代之间执行1秒的微小延迟。因此,显示器所示内容应每秒刷新一次,并显示计数器的新值。
[mw_shl_code=applescript,true]counter ++;
delay(1000);[/mw_shl_code]
最终完整代码如下所示
[mw_shl_code=applescript,true]#include <Wire.h>
#include "SSD1306.h"
SSD1306 display(0x3c, 21, 22);
int counter = 0;
void setup() {
display.init();
}
void loop() {
display.clear();
display.drawString(0,0, "Counter: " + String(counter));
display.display();
counter ++;
delay(1000);
}[/mw_shl_code]
测试代码
在显示器和ESP32之间接线后,仅需使用Arduino IDE编译并上传代码即可。您可以在以下视频中查看预期结果。
注:本文作者是Nuno Santos,他是一位和蔼可亲的电子和计算机工程师,住在葡萄牙里斯本 (Lisbon)。 他写了200多篇有关ESP32、ESP8266的有用的教程和项目。
查看更多ESP32/ESP8266教程和项目:
|