本文演示在零知-ESP8266上使用OLED的例子,为后面其他显示相关电子制作打个基础。
需要的模块
零知ESP8266开发板
OLED SSD1306模块
接线很简单,I2C接口对应连接即可:
接好后实物图如下:
本次使用了OLED相关的软件库,因此需要安装如下两个库:
下载这两个库,然后安装到硬件型号-零知-ESP8266:
3、然后在零知开发工具中就可以看到SSD1306相关例子,打开它:
该例子核心代码如下:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define NUMFLAKES 10
#define LOGO_HEIGHT 16
#define LOGO_WIDTH 16
static const unsigned char PROGMEM logo_bmp[] =
{ B00000000, B11000000,
B00000001, B11000000,
B00000001, B11000000,
B00000011, B11100000,
B11110011, B11100000,
B11111110, B11111000,
B01111110, B11111111,
B00110011, B10011111,
B00011111, B11111100,
B00001101, B01110000,
B00011011, B10100000,
B00111111, B11100000,
B00111111, B11110000,
B01111100, B11110000,
B01110000, B01110000,
B00000000, B00110000 };
void setup() {
Serial.begin(9600);
Serial.println("SSD1306 i2c example");
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
delay(2000);
display.clearDisplay();
display.drawPixel(10, 10, WHITE);
display.display();
delay(2000);
testdrawline();
testdrawrect();
testfillrect();
testdrawcircle();
testfillcircle();
testdrawroundrect();
testfillroundrect();
testdrawtriangle();
testfilltriangle();
testdrawchar();
testdrawstyles();
testscrolltext();
testdrawbitmap();
display.invertDisplay(true);
delay(1000);
display.invertDisplay(false);
delay(1000);
testanimate(logo_bmp, LOGO_WIDTH, LOGO_HEIGHT);
}
void loop() {
}
这里注意的是:由于这个OLED模块在不同厂家购买会有一些差别,因此代码中有时候也会需要改动,不然你使用这个代码没有任何反应;一个是复位引脚,这里使用IIC接口不需要复位脚,同时使用的IIC地址是0x3c;具体细节需要咨询你相应购买的厂家。