本文介绍了联盛德 W803 Pico 基于 Arduino IDE 实现 IIC 协议驱动 OLED 显示广告的项目设计。
OLED 显示屏在家电和消费电子产品中应用广泛,通过单片机实现 OLED 驱动是人机互动相关项目设计的基本且常见的解决方案。在此背景下,结合 Arduino 丰富的函数库资源,实现模块化编程,不失为一种极具性价比的方案,极大缩减了产品开发和功能验证的时间成本,对于相关产品的快速应用提供了极大便利。
根据开发板引脚定义,PA4 和 PA1 分别对应 IIC-SDA 和 IIC-SCL,因此将其与 IIC OLED 模块的对应引脚相连。
下载并安装 Arduino IDE
开发板管理器中添加附加支持链接 http://dl.isme.fun/w80x_arduino/package_w80x_index.json
打开示例程序
注意修改工程中的 OLED 驱动选项为 SSD1306
#include <GyverOLED.h>
GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;
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);
oled.init();
oled.clear(); // очистить дисплей (или буфер)
oled.update(); // обновить. Только для режима с буфером! OLED_BUFFER
// --------------------------
oled.home(); // курсор в 0,0
oled.print("Hello!"); // печатай что угодно: числа, строки, float, как Serial!
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("Привет!");
oled.update();
delay(2000);
// --------------------------
oled.clear();
oled.home();
oled.setScale(1);
oled.invertText(false);
oled.autoPrintln(true); // автоматически переносить текст
oled.update();
delay(2000);
// --------------------------
oled.home();
oled.textMode(BUF_ADD);
oled.home();
oled.setScale(3);
oled.print("KEK!");
oled.update();
delay(2000);
// --------------------------
oled.clear();
oled.dot(0, 0); // точка на x,y
oled.dot(0, 1, 1); // третий аргумент: 0 выкл пиксель, 1 вкл пиксель (по умолч)
oled.line(5, 5, 10, 10); // линия x0,y0,x1,y1
oled.fastLineH(0, 5, 10); // горизонтальная линия (y, x1, x2)
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.roundRect(50, 5, 80, 25, OLED_STROKE);
oled.circle(60, 45, 15, OLED_STROKE);
oled.circle(60, 45, 5, OLED_FILL);
oled.drawBitmap(90, 16, bitmap_32x32, 32, 32, BITMAP_NORMAL, BUF_ADD);
oled.update();
}
void loop() {
}
选择目标串口设备端口号,点击上传
当终端提示等待串口连接时,短按板载 RESET 键,即可完成固件烧录。
使用 PowerPoint 组合 Winner Micro 文字和 logo 并另存为 BMP 格式图片;
裁剪并修改像素大小为 128 x 64
使用 Image2LCD 软件
调整亮度,将图片导出为适用于单色 IIC OLED 的标准 BMP 文件;
使用 PC2LCD 软件,导入前面生成的标准 BMP 文件,并对字模选项进行设定;
点击 生成字模
选项,复制对话框中生成的代码,修改并保存为 .h
格式的头文件
const uint8_t ad[] PROGMEM = {
0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
...,
...,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
};
将头文件与目标工程放置于同一文件夹。
#include <GyverOLED.h>
#include "ad.h" // 图片编码文件
GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;
void setup() {
Serial.begin(9600);
oled.init(); // 初始化
oled.clear(); // 清晰显示(或缓冲区)
oled.update(); // 刷新 - 仅限缓冲模式 OLED_BUFFER
oled.drawBitmap(0, 0, ad, 128, 64, BITMAP_NORMAL, BUF_ADD);
oled.update();
}
void loop() {
}
编译并上传至开发板。
本文介绍了联盛德 W803 Pico 开发板基于 Arduino IDE 实现 IIC 协议驱动 OLED 显示广告的项目设计,包括项目简介、硬件连接、工程测试、具体广告设计、关键代码、效果展示等,为相关产品的开发设计提供参考。