需要的准备工作
硬件
面包板一个, Arduino Nano板, SSD1306的OLED屏(本文采用I2C接口)一个,线材若干
库文件
u8glib ,U8g2 两个库,如果没有的话可以在CSDN里下载。
连接(硬IIC接口)
Arduino | OLED |
---|---|
3V3 | VCC |
GND | GND |
A5 | SCL |
A4 | SDA |
连接(软IIC接口)
如果I2C需要共用的情况下,U8g2的库可以支持用普通的IO做I2C接口驱动OLED,本文中使用D10做SCL接口,D11做SDA接口。
Arduino | OLED |
---|---|
3V3 | VCC |
GND | GND |
D10(可更改) | SCL |
D11(可更改) | SDA |
Hello word 测试
基于u8glib(硬IIC接口)
为了提高可阅读性,无关紧要的内容已删除。
- 添加库文件,打开arduino程序,执行下图1、2、3,找到下载的库文件。
- 执行Demo程序
打开Arduino程序,执行1、2、3、4
如果想继续测试显示结果,可复制下列代码,显示三行。
#include "U8glib.h"
/*I2C协议*/
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
void setup()
{
if ( u8g.getMode() == U8G_MODE_R3G3B2 )
u8g.setColorIndex(255); // white
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
u8g.setColorIndex(3); // max intensity
else if ( u8g.getMode() == U8G_MODE_BW )
u8g.setColorIndex(1); // pixel on
// u8g.setFont(u8g_font_unifont);
Serial.begin(9600);
u8g.setFont(u8g_font_osb18); /*设置字体大小*/
u8g.setFontRefHeightExtendedText();
u8g.setDefaultForegroundColor();
u8g.setFontPosTop();
}
void loop()
{
u8g.firstPage();
do {
u8g.drawStr(0,0,"hello world!");
u8g.drawStr(0,20,"ha ha!");
u8g.drawStr(20,40,"well done!"); /*设置起始位置*/
} while( u8g.nextPage() );
delay(500);
}
基于U8g2(软IIC接口)
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 10, /* data=*/ 11, /* reset=*/ U8X8_PIN_NONE); // 设置D10做SCL,D11做SDA,可以改为其它接口
//U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 16, /* data=*/ 17); // 如果要用硬IIC接口,可以用这句
void setup(void) {
u8g2.begin();
}
void loop(void) {
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_ncenB14_tr); // 这里可以修改字体大小
u8g2.drawStr(0,10,"Hello World!"); // write something to the internal memory
u8g2.sendBuffer(); // transfer internal memory to the display
delay(1000);
}
需要了解更多请查阅相关手册。