Arduino使用OLED显示内容

本文介绍如何使用U8g2库控制SSD1306 OLED显示屏,包括基本配置、显示文本和位图的方法。同时对比了U8glib库,并介绍了U8g2提供的更强大的功能如对话框等。

之前买了一块OLED,128×64,芯片为SSD1306,IIC接口

给的资料很少,网上找到支持库为U8glib,貌似这个已经很久不更新了

新的库叫U8g2,可以直接在Arduino库中找到并下载


下载了U8glib,发现例子基本都是SPI接口的,IIC的

U8glib例子中没有IIC的接口使用方法,到处找资料

硬件连接为A5-SCL,A4-SDA,并且定义如下

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);


几个常用的方法:

u8g.setRot90();     //旋转90°
u8g.setRot180();    //旋转180°
u8g.setRot270();    //旋转270°
u8g.undoRotation(); //取消旋转
u8g.setFont(u8g_font_osb18);    //设置字体
u8g.drawStr(0, 20, "ABC");      //画出字符在(0,20)的位置
u8g.setPrintPos(0,15);          //设置位置
u8g.print("Error Code: ");      //打印内容
u8g.drawBitmapP( 0, 0, 1, 9, bitmap);     //画位图,每行一个字节(8个点),总共9行,数据定义在bitmap[]
u8g.drawXBMP( 0, 0, 38, 24, bitmap);      //画位图,38×24,数据定义在bitmap[]

//  还有一个需要注意的地方,u8g有缓存,所以一般显示要使用下面的方法,将绘图函数放到draw()中
void loop(void) {
  // picture loop
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
  
  // rebuild the picture after some delay
  delay(1000);
}

后面又下载了U8g2,功能更强大了,提供了对话框什么的,直接使用例子就行,非常方便

#include <u8x8lib.h>
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);


void setup(void)
{
  // 定义输入按键
  u8x8.begin(/*Select=*/ 7, /*Right/Next=*/ A1, /*Left/Prev=*/ A2, /*Up=*/ A0, /*Down=*/ A3, /*Home/Cancel=*/ 8);
}

void loop(void)
{
  uint8_t r;
  u8x8.setFont(u8x8_font_chroma48medium8_r);
  r = u8x8_UserInterfaceMessage(u8x8.getU8x8(), "Message", "Box", NULL, " Ok \n Cancel ");
  if ( r == 0 )
  {
    u8x8.userInterfaceMessage("You pressed the", "Home/Quit", "Button", " Ok ");  
  }
  else if ( r == 1 )
  {
    u8x8.userInterfaceMessage("You selected the", "Ok", "Button", " Ok ");  
  }
  else if ( r == 2 )
  {
    u8x8.userInterfaceMessage("You selected the", "Cancel", "Button", " Ok ");  
  }
}

### 使用ArduinoOLED显示显示中文的方法 #### 硬件准备 为了实现这一功能,需要准备好以下硬件组件[^1]: - Arduino开发板(推荐使用Arduino UNO) - 支持I2C接口的OLED显示屏(如SSD1306型号) - 杜邦线若干根 #### 软件环境配置 确保安装了必要的库文件来支持OLED屏幕的操作以及字符集的支持。可以考虑使用`Adafruit_SSD1306`库配合`u8g2`库中的UTF-8字体支持来进行开发。 #### 关键技术点概述 整个过程的关键在于汉字取模技术和相应的代码整合工作。具体来说: - **汉字取模**: 利用专门工具将所需的汉字转化为适合于OLED显示使用的位图格式。这一步骤可以通过在线服务或者本地应用程序完成。 - **代码编写与上传**: 将转换后的字形数据嵌入到Arduino程序中,并设置好对应的坐标位置以便正确渲染文字内容。 下面给出一段简单的示例代码片段用于演示如何让Arduino控制下的OLED屏幕上显示出指定的中文字符串: ```cpp #include <Wire.h> #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_SSD1306.h>// Hardware-specific library for SSD1306 displays #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration required for using the I2C interface (SCL=Pin A5 SDA=Pin A4 on Uno) #define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); void setup() { if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for(;;); } delay(2000); // Pause after any output errors // Clear buffer and screen. display.clearDisplay(); } void loop() { display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0,0); // Print Chinese characters as UTF-8 encoded string literals const char* chineseText = u8"你好世界"; display.print(chineseText); display.display(); // Actually send the data to the hardware } ``` 这段代码展示了基本框架,在实际应用时可能还需要调整参数以适应不同尺寸或类型的OLED屏,并且对于更复杂的界面布局,则需进一步优化绘图逻辑。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值