本文介紹了聯盛德 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 顯示廣告的項目設計,包括項目簡介、硬件連接、工程測試、具體廣告設計、關鍵代碼、效果展示等,為相關產品的開發設計提供參考。
Here is an example with Chinese and Japanese support https://github.com/board707/w80x_arduino_iot/tree/master/libraries/Basic/examples/test_u8g_oled_i2c_adc_chinese