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

一、下载外设库

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

ESP8266 Arduino-驱动SSD1306 OLED-使用ESP8266 and ESP32 Oled Driver for SSD1306 display库_第1张图片

 

二、实现代码

#include

#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);

}

你可能感兴趣的:(ESP8266,Arduino)