ESP8266 Arduino-驱动SSD1306 OLED-使用ESP8266 and ESP32 Oled Driver for SSD1306 display库

  • Post author:
  • Post category:其他



一、下载外设库


工具->管理库,搜索ssd1306,安装ESP8266 and ESP32 Oled Driver for SSD1306 display


二、实现代码

#include <Wire.h>

#include “SSD1306Wire.h”

#include “images.h”

// Initialize the OLED display using SPI

// D5 -> CLK

// D7 -> MOSI (DOUT)

// D0 -> RES

// D2 -> DC

// D8 -> CS

// SSD1306Spi        display(D0, D2, D8);

// or

// SH1106Spi         display(D0, D2);

// Initialize the OLED display using brzo_i2c

// D3 -> SDA

// D5 -> SCL

// SSD1306Brzo display(0x3c, D1, D2);

// or

// SH1106Brzo  display(0x3c, D1, D2);

// 设置IIC地址及OLED管脚

SSD1306Wire  display(0x3c, D1, D2);

#define DEMO_DURATION 3000

typedef void (*Demo)(void);

int demoMode = 0;

int counter = 1;

void setup() {

// 初始化OLED

display.init();

// 设置屏幕显示为垂直方向

display.flipScreenVertically();

// 设置字体大小

display.setFont(ArialMT_Plain_10);

}

void drawFontFace() {

// 字符显示实例

// 访问

http://oleddisplay.squix.ch/

获取字体生成工具

// 设置文字显示方式为左对齐

display.setTextAlignment(TEXT_ALIGN_LEFT);

// 设置字体大小

display.setFont(ArialMT_Plain_10);

// 指定位置输出文字

display.drawString(0, 0, “Hello world”);

// 设置字体大小

display.setFont(ArialMT_Plain_16);

// 指定位置输出文字

display.drawString(0, 10, “Hello ESP8266”);

// 设置字体大小

display.setFont(ArialMT_Plain_24);

// 指定位置输出文字

display.drawString(0, 26, “************”);

}

void drawTextFlow() {

// 设置字体大小

display.setFont(ArialMT_Plain_10);

// 设置文字左对齐

display.setTextAlignment(TEXT_ALIGN_LEFT);

// 设置字符串显示宽度

display.drawStringMaxWidth(0, 0, 64,

“Lorem ipsum\n dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore.” );

}

void drawTextAlignment() {

// 设置文字大小

display.setFont(ArialMT_Plain_10);

// 设置文本为左对齐

display.setTextAlignment(TEXT_ALIGN_LEFT);

// 输出文本内容

display.drawString(0, 10, “Left aligned (0,10)”);

// 设置文本为居中对齐

display.setTextAlignment(TEXT_ALIGN_CENTER);

// 输出文本内容

display.drawString(64, 22, “Center aligned (64,22)”);

// 设置文本为右对齐

display.setTextAlignment(TEXT_ALIGN_RIGHT);

// 输出文本内容

display.drawString(128, 33, “Right aligned (128,33)”);

}

void drawRect() {

// 在指定位置绘制像素点

for (int i = 0; i < 10; i++) {

display.setPixel(i, i);

display.setPixel(10 – i, i);

}

// 在指定位置绘制空心矩形

display.drawRect(12, 12, 20, 20);

// 在在指定位置绘制实心矩形

display.fillRect(14, 14, 17, 17);

// 绘制水平直线

display.drawHorizontalLine(0, 40, 20);

// 绘制垂直直线

display.drawVerticalLine(40, 0, 20);

}

void DrawCircle() {

for (int i = 1; i < 8; i++) {

display.setColor(WHITE);

display.drawCircle(32, 32, i * 3);

if (i % 2 == 0) {

display.setColor(BLACK);

}

display.fillCircle(96, 32, 32 – i * 3);

}

}

void drawProgressBar() {

int progress = (counter / 5) % 100;

// 绘制进度条

display.drawProgressBar(0, 32, 120, 10, progress);

// 显示百分比

display.setTextAlignment(TEXT_ALIGN_CENTER);

display.drawString(64, 15, String(progress) + “%”);

}

void drawImage() {

// 访问

http://blog.squix.org/2015/05/esp8266-nodemcu-how-to-create-xbm.html

查看如何生成xbm文件

// 显示图片

display.drawXbm(34, 14, WiFi_Logo_width, WiFi_Logo_height, WiFi_Logo_bits);

}

Demo demos[] = {drawFontFace, drawTextFlow, drawTextAlignment, drawRect, DrawCircle, drawProgressBar, drawImage};

int demoLength = (sizeof(demos) / sizeof(Demo));

long timeSinceLastModeSwitch = 0;

void loop() {

// 清空屏幕显示

display.clear();

// draw the current demo method

demos[demoMode]();

display.setTextAlignment(TEXT_ALIGN_RIGHT);

display.drawString(10, 128, String(millis()));

// 显示缓存中的内容

display.display();

// 切换显示下一个实例

if (millis() – timeSinceLastModeSwitch > DEMO_DURATION) {

demoMode = (demoMode + 1)  % demoLength;

timeSinceLastModeSwitch = millis();

}

counter++;

delay(10);

}



版权声明:本文为lee198717原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。