本文将详细介绍使用ESP8266_and_ESP32_OLED_driver_for_SSD1306_displays库文件,控制SH1106、SSD1306、SSD1315驱动的OLED显示屏,实现显示文字、图片、绘图等功能。
ESP32_C3驱动报错请参考本人另外一篇文章:使用Arduino开发ESP32:(报错及解决)IIC接口控制SH1106、SSD1306或SSD1315驱动的OLED显示屏
基本函数介绍
display.init();//显示初始化
display.flipScreenVertically();//垂直翻转屏幕
display.display();//显示
//普通文本显示
display.setFont(ArialMT_Plain_10);//设置字体高度为10个像素,也可以设置为16、24
display.drawString(0, 0, "Hello world");//坐标以及打印的文字
//显示长文本并自动换行
display.setFont(ArialMT_Plain_10);//同上,设置字体大小
display.setTextAlignment(TEXT_ALIGN_LEFT);//设置对齐方式,可以为TEXT_ALIGN_LEFT左对齐,TEXT_ALIGN_RIGHT右对齐,TEXT_ALIGN_CENTER居中,TEXT_ALIGN_CENTER_BOTH(这个不确定)
display.drawStringMaxWidth(0, 0, 128,"Lorem ipsum\n dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore." );//前两个参数为x/y坐标,注意左对齐时是左上角坐标,右对齐时右上角坐标,第三个参数是最大宽度,最后是要显示的文本。
//display.setTextAlignment函数同样可以用于display.drawString的显示。
//绘图
display.setPixel(5, 5);在给定位置绘制一个像素,参数为坐标
display.drawRect(12, 12, 20, 20);//画一个矩形,参数为坐标、宽度、高度
display.fillRect(14, 14, 17, 17);//填充矩形,,参数为坐标、宽度、高度
display.drawHorizontalLine(0, 40, 20);//画一条水平线,参数为坐标、长度
display.drawVerticalLine(40, 0, 20);//画一条垂直线,参数为坐标、长度
display.drawCircle(32, 32, 3);//画一个圆,参数为坐标、半径
display.fillCircle(96, 32, 32 - i * 3);//填充一个圆,参数为坐标、半径
display.setColor(BLACK);//设置颜色,可以为WHITE、BLACK
//显示进度条
display.drawProgressBar(0, 32, 120, 10, progress);参数为坐标、宽度、高度、进度
//可以结合上述文本显示,打印相关进度的文字说明
//图片显示
display.drawXbm(34, 14, 64, 32, WiFi_Logo_bits);//参数为坐标xy,宽度,高度,图片数据。
//图片数据示例
const uint8_t WiFi_Logo_bits[] PROGMEM = {
0x00, 0x00, 0xF8,0xFF, 0x07, 0x00, 0x00, 0x00,...//后面省略
};
图片取模
上述显示图片的函数,使用的是XBM格式的图片数据。可以使用取模软件进行数据取模。
这里以软件“字模提取V2.2”演示,如下图所示:
软件下载链接:字模提取V2.2,或在本人博客中查找下载软件
点击“打开图像图标”打开一副图片,
在参数设置->其他选项中,分别选择横向取模、字节倒序、保留、任何时候都加0。如下图所示:
然后点击取模方式->C51格式,下方即显示图像数据,然后放进数组中即可。
注意图片宽度和高度一定要对应。显示效果如下: