0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【晶心科技ADP-Corvette-T1开发板试用体验】使用GyverOLED库,驱动基于I2C的SSD1306显示屏

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-11 11:29 次阅读

本文来源电子发烧友社区,作者:HonestQiao, 帖子地址:https://bbs.elecfans.com/jishu_2289238_1_1.html

OLED演示(开发板体验视频详见作者原帖子内容)

ADP-Corvette-T1开发板兼容Arduino开发环境,完成基础的测试后,就想着点个屏幕玩玩。

通过官方的资料了解到,官方有一个扩展板:
image.png

这个上面,使用的是LCD1602A显示屏。
去网上查看了一下资料,发现这是一款老掉牙的使用牛屎封装的LCD显示屏:
image.png

另外,详细了解了一下官方的资料,看到硬件上也提供了I2C接口,查看官方资料,可以了解接口的详情:
image.png

我手头也有SSD1306 OLED,支持I2C和SPI的都有,这次刚好拿I2C版本的进行实测。
未命名13.png

按照官方的资料和SSD1306 OLED的资料,按照如下方式连线:
iShot_2022-06-25_09.30.47.png

实物连线如下:
image.png

然后,打开Arduino,找OLED的库,进行编程
测试了好几个之前用过的OLED库,都无法支持这块开发板。
最终,找到了:GyverOLED,顺利使用。
在Arduino,搜索安装即可:
iShot_2022-06-25_08.44.00.png

我把演示的代码,做了中文版本的注释,详细如下:

#include h>

// 显示屏类型:
// SSD1306_128x32
// SSD1306_128x64

// 缓冲区:
// OLED_NO_BUFFER (无缓冲区)
// OLED_BUFFER (有缓冲区) - 默认

// 接口类型:
// OLED_I2C - 默认
// OLED_SPI (需指定 CS, DC, RST/RES)

// 初始化:
//GyverOLED oled;,>
//GyverOLED oled;,>
GyverOLED oled;
//GyverOLED oled;,>
//GyverOLED oled;,>

// 对于 I2C 地址,可以发送: GyverOLED oled(0x3C);

// bitmap数据使用 https://github.com/AlexGyver/imageProcessor 创建
const uint8_t bitmap_32x32[] PROGMEM = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xE0, 0xF0, 0x70, 0x70, 0x30, 0x30, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF0, 0x70, 0x30, 0x30, 0x20, 0x00, 0x00,
  0x00, 0x30, 0x78, 0xFC, 0x7F, 0x3F, 0x0F, 0x0F, 0x1F, 0x3C, 0x78, 0xF0, 0xE0, 0xC0, 0x80, 0x80, 0x80, 0x40, 0xE0, 0xF0, 0xF8, 0xFC, 0xFF, 0x7F, 0x33, 0x13, 0x1E, 0x1C, 0x1C, 0x0E, 0x07, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF9, 0xF7, 0xEF, 0x5F, 0x3F, 0x7F, 0xFE, 0xFD, 0xFB, 0xF1, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x1E, 0x33, 0x33, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x1F, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00,
};

void setup() {
  // 串口初始化 
  Serial.begin(9600);
  randomSeed(analogRead(A0));

  // 显示屏初始化
  oled.init();

  // --------------------------
  // I2C速度设置
  //Wire.setClock(800000L);

  // 清除缓冲区
  oled.clear();

  // 更新显示:适用于OLED_BUFFER
  oled.update();

  // 圆点显示
  oled.home();            // 原点坐标:0,0
  oled.print("Hello!");   // 累充串口输出那样,可以输出任何内容:数字,字符串,浮点数等
  oled.update();
  delay(2000);

  // 指定位置显示
  oled.setCursor(5, 1);   // 指定坐标:x,y
  oled.setScale(2);
  oled.print("Hello!");
  oled.update();
  delay(2000);

  // 指定位置显示
  oled.setCursorXY(15, 30); // 指定坐标:x,y
  oled.setScale(3);
  oled.invertText(true);    // 翻转文本
  oled.print("Hello!");
  oled.update();
  delay(2000);

  // --------------------------
  oled.clear();
  oled.home();
  oled.setScale(1);
  oled.invertText(false);
  oled.autoPrintln(true);   // 自动换行
  oled.print(F("Happy Rain on a Spring Night. (Du Fu) Good rain knows its time right; It will fall when comes spring. With wind it steals in night; Mute, it moistens each thing."));
  oled.update();
  delay(2000);

  // --------------------------
  oled.home();
  oled.textMode(BUF_ADD);
  // BUF_ADD - 覆盖文本
  // BUF_SUBTRACT - 删除文本
  // BUF_REPLACE - 替换文本
  oled.home();
  oled.setScale(3);
  oled.print("OK!");
  oled.update();
  delay(2000);

  // --------------------------
  // СЕРВИС
  //oled.setContrast(10);   // 设置对比度 0..255
  //oled.setPower(true);    // true/false - 开/关 显示
  //oled.flipH(true);       // true/false - 水平翻转
  //oled.flipV(true);       // true/false - 垂直翻转
  //oled.isEnd();           // 如果显示结束,则返回 true - 用于逐字母输出

  // --------------------------
  oled.clear();
  oled.dot(0, 0);     // 画点 x,y
  oled.dot(0, 1, 1);  // 第3个参数表示是否显示:0-不显示,1-显示(默认)
  oled.line(5, 5, 10, 10);        // 划线 x0,y0 - x1,y1
  //oled.line(5, 5, 10, 10, 0);   // 第5个参数:0-擦除,1-绘制(默认)
  oled.fastLineH(0, 5, 10);       // 画水平线 (y, x1, x2)
  //oled.fastLineH(0, 5, 10, 0);  //  第4个参数:0-擦除,1-绘制(默认)
  oled.fastLineV(0, 5, 10);       // 画垂直线 (x, y1, y2)
  oled.rect(20, 20, 30, 25);      // 画矩形 (x0,y0,x1,y1)
  oled.rect(5, 35, 35, 60, OLED_STROKE);      // 画矩形操作 (x0,y0,x1,y1)
  // 形状参数:
  // OLED_CLEAR - 清除
  // OLED_FILL - 填充
  // OLED_STROKE - 画框
  oled.roundRect(50, 5, 80, 25, OLED_STROKE);  // 画圆角矩形
  oled.circle(60, 45, 15, OLED_STROKE);        // 以 (x,y) 为圆心,以с为半径画圆
  oled.circle(60, 45, 5, OLED_FILL);           // 第4个参数:填充

  // 位图
  oled.drawBitmap(90, 16, bitmap_32x32, 32, 32, BITMAP_NORMAL, BUF_ADD);
  //oled.drawBitmap(90, 16, bitmap_32x32, 32, 32);  // 默认. BITMAP_NORMAL 和 BUF_ADD
  // x, y, name, width, height, BITMAP_NORMAL(0)/BITMAP_INVERT(1), BUF_ADD/BUF_SUBTRACT/BUF_REPLACE
  
  oled.update();

  delay(3000);
}

void loop() {
  // 随机位置显示位图
  int x = random(0,128-32);
  int y = random(0,64-32);
  
  oled.clear();
  // 位图
  oled.drawBitmap(x, y, bitmap_32x32, 32, 32, BITMAP_NORMAL, BUF_ADD);
  //oled.drawBitmap(90, 16, bitmap_32x32, 32, 32);  // 默认. BITMAP_NORMAL 和 BUF_ADD
  // x, y, name, width, height, BITMAP_NORMAL(0)/BITMAP_INVERT(1), BUF_ADD/BUF_SUBTRACT/BUF_REPLACE
  
  oled.update();

  delay(1000);
}
,>

上述代码中的注释,非常详细,所以我也就不用再单独解释了。

实际跑起来,效果非常的不错,而且使用硬件I2C,刷新速度也有保障。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 晶心科技
    +关注

    关注

    0

    文章

    104

    浏览量

    18258
  • 开发板试用
    +关注

    关注

    3

    文章

    301

    浏览量

    2166
收藏 人收藏

    评论

    相关推荐

    【瑞萨RA2L1入门学习】SPI点亮16级灰阶OLED显示屏

    前一篇使用 I2C 接口点亮了 SSD1306 驱动的 OLED ,https://bbs.elecfans.com/jishu_2474871_
    发表于 01-27 14:36

    【瑞萨RA2L1入门学习】开箱+Keil环境搭建+点灯+点亮OLED

    );// 拉低 P104 在 main 函数调用的 hal_entry 函数里添加以上代码即可 【点亮OLED显示屏】 瑞萨 RA2L1 支持硬件 I2C,为了省事美观,这里随便找 4 个 IO 口,插入
    发表于 01-25 12:10

    【RA-Eco-RA4E2-64PIN开发板试用I2CI3C通信协议的应用

    【RA-Eco-RA4E2-64PIN开发板试用I2CI3C通信协议的应用。 瑞萨RA4E2
    发表于 01-21 10:40

    【RA-Eco-RA4E2-64PIN-V1.0开发板试用】SPI点亮16级灰阶OLED显示屏

    前一篇使用 I2C 接口点亮了 SSD1306 驱动的 OLED ,https://bbs.elecfans.com/jishu_2469592_
    发表于 01-19 03:28

    RA-Eco-RA4E2-64PIN开发板试用+I2cI3C通信协议的应用。

    【RA-Eco-RA4E2-64PIN开发板试用I2CI3C通信协议的应用。 瑞萨RA4E2
    发表于 01-11 15:06

    【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED

    开发板上有 I2C OLED 接口,可以接入 OLED 使用,如下: 这里使用 IO 模拟 I2C 通信,P100、P101 设置为
    发表于 12-19 23:52

    【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED

    ME32G070 支持硬件 I2C,这里偷个懒,不想使用繁琐的跳线,直接在开发板上随意插入 OLED 显示屏的引脚,如下: 直接插上 OLED 显示屏即可 由于 PB6、PB4
    发表于 12-19 00:25

    恩智浦FRDM-MCXA153 RT-Thread开发实战(六):I2C总线开发与应用

    rt-threadsp xpmcxmcxafrdm-mcxa153 目录下打开scons环境,配置IIC驱动SSD1306 OLED。  I2C配置  恩智浦FRDM-MCXA153开发板
    的头像 发表于 11-21 09:26 1171次阅读
    恩智浦FRDM-MCXA153 RT-Thread<b class='flag-5'>开发</b>实战(六):<b class='flag-5'>I2C</b>总线<b class='flag-5'>开发</b>与应用

    【BearPi-Pico H3863星闪开发板体验连载】GPIO 控制与 IIC OLED 显示

    _master_init(CONFIG_I2C_MASTER_BUS_ID, baudrate, hscode); ​ ssd1306_Init(); ssd1306_Fill(Black); ​ while (
    发表于 10-03 12:47

    【核桃派ZeroW开发板体验连载】小小气象站 04 oled测试

    : sudo pip3 install adafruit-circuitpython-ssd1306 测试 按上一篇接线的SCL、SDA接在I2C1上面,这样体现了I2C的一个特点,就是一个接口可以接
    发表于 08-11 13:33

    【xG24 Matter开发套件试用体验】物联网密码柜之驱动矩阵键盘和OLED显示

    +circuitpython进行开发,矩阵键盘驱动为自行编写,Oled驱动基于Adafruit SSD_1306。 到本阶段为止已实现的功
    发表于 08-04 23:04

    【CH32V208开发板】图形u8g2的oled显示

    *64,I2C接口。u8g2是单色显示的第二个版本,其是开源的。u8g2支持lcd和oled,支持众多
    发表于 07-29 23:11

    在OpenHarmony 3.1版本中,润和hispark hi3861智能家居套件I2C驱动OLED屏幕的驱动如何改写?

    决? 我做了以下操作: 1、首先打开I2C功能的配置文件地址已经改为: device\\soc\\hisilicon\\hi3861v100\\sdk_liteos\\build\\config
    发表于 07-11 16:45

    【GD32F303红枫派开发板使用手册】第二十二讲 IIC-IIC OLED显示实验

    通过本实验主要学习以下内容: •OLED驱动原理 •IIC驱动OLED显示操作 22.2 实验原理 OLED模块的驱动芯片为SSD1306
    的头像 发表于 06-22 09:59 832次阅读
    【GD32F303红枫派<b class='flag-5'>开发板</b>使用手册】第二十二讲  IIC-IIC OLED<b class='flag-5'>显示</b>实验

    ESP32-C3 ESP-IDF4.3.2 I2C驱动异常的原因?

    ESP32-C3,ESP-IDF版本4.3.2 使用I2C驱动OLED(驱动芯片SSD1306),开机正常
    发表于 06-19 07:06