聯盛德 W803 Pico 試用 - IIC 協議驅動 OLED 廣告牌

發布於 2025-03-27 18:24:08

【聯盛德 W803 Pico 測評】IIC 協議驅動 OLED 廣告牌

本文介紹了聯盛德 W803 Pico 基於 Arduino IDE 實現 IIC 協議驅動 OLED 顯示廣告的項目設計。

介紹

OLED 顯示屏在家電和消費電子產品中應用廣泛,通過單片機實現 OLED 驅動是人機互動相關項目設計的基本且常見的解決方案。在此背景下,結合 Arduino 豐富的函數庫資源,實現模塊化編程,不失為一種極具性價比的方案,極大縮減了產品開發和功能驗證的時間成本,對於相關產品的快速應用提供了極大便利。

硬件連接

根據開發板引腳定義,PA4 和 PA1 分別對應 IIC-SDA 和 IIC-SCL,因此將其與 IIC OLED 模塊的對應引腳相連。

board_OLED_connect.jpg

工程測試

下載並安裝 Arduino IDE

開發板管理器中添加附加支持鏈接 http://dl.isme.fun/w80x_arduino/package_w80x_index.json

打開示例程序

example-oled-demo.jpg

代碼

注意修改工程中的 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() {
}

編譯上傳

選擇目標串口設備端口號,點擊上傳

upload.jpg

當終端提示等待串口連接時,短按板載 RESET 鍵,即可完成固件燒錄。

效果

show_oled-demo.jpg

廣告牌設計

使用 PowerPoint 組合 Winner Micro 文字和 logo 並另存為 BMP 格式圖片;

裁剪並修改像素大小為 128 x 64

AD_color.bmp

使用 Image2LCD 軟件

image2lcd.jpg

調整亮度,將圖片導出為適用於單色 IIC OLED 的標準 BMP 文件;

使用 PC2LCD 軟件,導入前面生成的標準 BMP 文件,並對字模選項進行設定;

pc2lcd-setting.jpg

點擊 生成字模 選項,複制對話框中生成的代碼,修改並保存為 .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() {
}

編譯並上傳至開發板。

效果

oled_board_AD.jpg

AD_show.jpg

總結

本文介紹了聯盛德 W803 Pico 開發板基於 Arduino IDE 實現 IIC 協議驅動 OLED 顯示廣告的項目設計,包括項目簡介、硬件連接、工程測試、具體廣告設計、關鍵代碼、效果展示等,為相關產品的開發設計提供參考。

1 條評論

發布
問題