Ardunio + I2C OLED显示文字和小图案

某宝上买了个I2C接口的OLED单色小显示屏,128*64分辨率。光看到卖家说给例程,就没注意到卖家说排插柱要自己焊。好吧反正就四个,用周五下午偷懒等下班的时间动手搞定。

I2C接口的就是方便,VCC和GND分别接Arduino的5V和地,SCL和SDA也直接插在了Arduino的SCL和SDA引脚插座上(AREF边上的那两个)。

商家给的例程用的库就是U8glib,用起来还是很方便的。需要注意的是u8g的定义,如果编译不通过有可能是例程中所有u8g定义都被注释了。例程提供了上百种定义,纵有一款适合你。我最后是尝试了U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI 这一条才编译通过并能正常运行。

导入库之后看看U8glib的Hello world例程基本上连猜带蒙也能看懂个七八成。打印英文文字的套路基本上就是:

 u8g.setFont(u8g_font_unifont);
 u8g.drawStr( 0, 22, "Hello World!");

或者

u8g.setFont(u8g_font_baby);
u8g.setPrintPos(15,70);
u8g.print("Hello World!");

关于U8glib字体的更多信息,请参考 https://github.com/olikraus/u8glib/wiki/fontgroup。

也可以访问 https://github.com/olikraus/u8glib/wiki 获取关于U8glib的更多参考。

汉字还没研究,先研究了下怎么显示图案。

比方说,我要显示这个图案:

(120*64,BMP格式)

卖家给的例程包里有一个“128x64取字软件”的文件夹,给了一个PCtoLCD的工具。用它打开BMP,选项里设置取模方式为“逐行式”,取模走向逆向,自定义C51格式,行前缀留空,行后缀改成一个半角的逗号,然后确定。这时候软件会给出一个预览图,按“生成字模”按钮,自动产生了一串代码,形如:

......
0x00,0xF8,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC8,0x01,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,
......

要的就是这个。

Arduino中的套路是:

#include "U8glib.h"
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI

然后填充这段代码,除了字模内容什么都不要改:

static unsigned char bitmap[] U8G_PROGMEM = {

......
0x00,0xF8,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC8,0x01,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,
......

}

这样就可以调用drawXBMP了:

void draw(void) {

  u8g.drawXBMP(0, 0, 120, 64, bitmap);

}

setup不用动,用示例中自带的就好,

loop里:

void loop(void) {
  // picture loop
  u8g.firstPage();
  do {
    draw();
  } while ( u8g.nextPage() );

  // rebuild the picture after some delay
  delay(500);
}

打完收工,编译上传看效果。

效果图:

Ardunio + I2C OLED显示文字和小图案_第1张图片

嗯,最近也迷上乐高了,这个坑也不小啊。。。










你可能感兴趣的:(树莓派,&,Arduino)