话不多说,直接入正题:
常见的OLED通常有两种样式,如下图所示,分别是4线和6线控制


本人几乎浏览了网上所有关于控制OLED模块的教程,并都经过了项目实测:大力推荐u8g2这个库函数来控制,文章末尾给出了安装包,请自取(其余的库函数要么安装很费力,要么使用起来不友好,再个就是参考资料不齐全)

- 不管是4线还是6线都可以用u8g2这个库函数来控制,非常方便

在此,读者先熟悉两种通讯方式,这两种将用在控制OLED上,只需要了解原理即可,不需要了解很深入。

  • I2C通讯:I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。

  • SPI通讯:SPI总线是一种4线总线,因其硬件功能很强,所以与SPI有关的软件就相当简单,使中央处理器(Central Processing Unit,CPU)有更多的时间处理其他事务。

好戏开场啦!

一、u8g2库控制4线OLED屏幕

对于4线OLED,直接使用I2C通讯。(u8g2库)

第一步,接线:5V、GND大家都知道如何连接,另外两根SCL、SDA需要连接到Arduino指定的IO口上面,不能用户自定义。

SCL和SDA直接对应连接至开发板即可,SCL和SDA对应于哪两个IO,如下图所示:



第二步,上代码:

个人觉得用OLED模块显示英文用的最多,显示汉字、显示图片,这类不常用的,本文不介绍,文章末尾会给出链接,本文都是干货!下面给出让OLED显示“HELLO WORLE”,悟性高的读者,通过此例程可以显示任意英文。

#include <Arduino.h>
#include <U8g2lib.h>#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endifU8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0,SCL,SDA,U8X8_PIN_NONE);void setup(void)
{u8g2.begin();
}void loop(void)
{u8g2.clearBuffer();  //清除缓存         u8g2.setFont(u8g2_font_ncenB08_tr); u8g2.drawStr(0,10,"Hello World!");  u8g2.drawStr(0,20,"This is bro cainiao!");  u8g2.drawStr(0,30,"Welcome to U8G2!");  u8g2.sendBuffer();  //显示      delay(1000);
}

二、u8g2库控制6线OLED屏幕

对于6线OLED,直接使用SPI通讯。(u8g2库)

第一步,接线:

U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

通过这段程序的定义,我们知道:
OLED模块上的 SCL 对应于 clock
OLED模块上的 SDA 对应于 data
OLED模块上的 RES 对应于 reset
OLED模块上的 DC 对应于 dc

其中CS不管,CS是应用在7线OLED屏幕上面的,用的少!

对于使用SPI通讯控制6线OLED,OLED与主控板的连线可以自定义,读者可以自己编辑。 但这些需要连接到数字IO 上面

第二步,上程序:

#include <Arduino.h>
#include <SPI.h>
#include <U8g2lib.h>U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);void setup(void)
{u8g2.begin();   //选择U8G2模式,或者U8X8模式
}void loop(void)
{u8g2.clearBuffer();         // 清除内部缓冲区u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable fontu8g2.drawStr(0,10,"Hello World!");  // write something to the internal memoryu8g2.drawStr(0,20,"This is EHANG!");  // write something to the internal memoryu8g2.drawStr(0,30,"Welcome to U8G2!");  // write something to the internal memoryu8g2.sendBuffer();          // transfer internal memory to the displaydelay(1000);
}

效果图:

三、总结

网上很多类似这种的语法,个人建议不要这样使用,代码的移植性会很差的:不要按照此例程来书写!!!

void loop(void) {u8g2.firstPage();do {u8g2.setFont(u8g2_font_ncenB14_tr);u8g2.drawStr(0,15,"Hello World!");} while ( u8g2.nextPage() );delay(1000);
}

用Arduino控制OLED,就用U8G2这个库函数就可以了,直接点击“加载库”,就可以在IDE里面自行安装库函数的。

推荐几篇好文章,确实写的可以,笔者这几天查资料非常气愤,很多人抄袭人家的文章,抄的又不准确,最起码要附带原文链接吧。此类文章很容易误导读者。

关于U8G2库函数的语法,详见此文:点击进入!
关于4线OLED的控制,详见此文:点击进入
关于6线OLED的控制,详见此文:点击进入

四、注意事项

使用上述例程就能达到显示多行英文的目的,如果读者做实验出现显示不全等现象,可能是:

U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

这个引脚定义出了问题。关于如何定义,参考此篇文章:点击进入

前面的一串英文定义很讲究的**(U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI)**
显示不全,就去检查这个函数。

通过SPI通讯时,引脚可以自定义,但是需要接在数字引脚上;使用I2C通讯时,OLED上面的引脚必须要和开发板上面的I2C引脚对应起来接线!

U8G2这个库功能强大,目前在github上超过1K star,1800次commit,可以说维护热度很高,读者大可放心使用。

详情请关注亿航创客官方抖音账号:EhangGroup

Arduino使用u8g2库函数驱动4线/6线OLED屏幕(I2C/SPI通讯)附带库函数详解相关推荐

  1. java中多线程之CAS(compareAndSet),Unsafe类大白话详解.

    java中多线程之CAS(compareAndSet),Unsafe类大白话详解 什么是CAS CAS原理 Unsafe类:     什么是CAS 比较并交换 在学习CAS之前,我们先了解一下JMM. ...

  2. IntelliJ IDEA for Mac如何配置数据源(Data Source)和用户驱动(User Driver)及数据库控制台_数据源配置(Console)详解

    文章目录 直接添加数据源(Data Source) 添加驱动和数据源(Driver and Data Source) 驱动 数据库控制台 直接添加数据源(Data Source) 直接添加数据源,ID ...

  3. 线下 Meetup 预告|从原理到实战,详解 Database Plus 的互联网最佳实践

    ‍ ‍| 作者:Apache ShardingSphere | 责编:沈于蓝 | 编辑:胡欣元 9 月 3 日 Apache ShardingSphere 社区线下 Dev Meetup 正式启动,首 ...

  4. 耳机四根线的图解_type c数据线拆解及接线图文详解

    不少新一代手机开始支持Type-C接口,比如乐视.PPTV.努比亚Z11.小米4C和三星Note7等.和普通Micro USB相比,Type-C数据线因为正反插的关系对品质要求更高,不然随时有短路烧毁 ...

  5. matlab日线转周线的做法,技术贴一一趋势线应用技巧:月线、周线、日线、小时、30分钟详解(三)...

    三.趋势线应用法则 1.趋势线的应用法则之一 在上升行情中,股价回落到上升趋势线附近获得支撑,股价可能反转向上:而在下跌行情中,股价反弹到下跌趋势线附近将受到阻力,股价可能再次回落.也就是说:在上升趋 ...

  6. 手把手教Linux驱动4-进程、文件描述符、file、inode关系详解

    https://blog.csdn.net/daocaokafei/article/details/108219511?utm_medium=distribute.wap_relevant_bbs_d ...

  7. sapmto生产模式配置及操作详解_硬岩制砂线怎么设计?300t/h的生产流程与设备配置详解...

    点击上方"蓝字"关注我们 说到硬岩,花岗岩.辉绿岩都不陌生,关于花岗岩的生产线配置小编曾介绍过,感兴趣的可直接点阅: <硬质岩破碎很发愁?从原料到成品,看花岗岩的破碎制砂生产 ...

  8. 线上发版如何做到分批发的?详解蓝绿部署,滚动升级,A/B 测试,灰度发布/金丝雀发布

    过去的 10 年里,很多大公司都在使用蓝绿部署,安全.可靠是这种部署方式的特点.蓝绿部署虽然算不上" Sliver Bullet ",但确实很实用.在有关于"微服务&qu ...

  9. STM32F103C8T6驱动6线OLED(SPI通讯)

    传送门:Arduino使用u8g2库函数驱动4线/6线OLED屏幕(I2C/SPI通讯)附带库函数详解 [点击进入] 一.0.96寸SSD1306原理图(默认为SPI) 二.OLED硬件介绍及控制方式 ...

最新文章

  1. Android LayoutInflater详解(转)
  2. 初次使用Eclipse,坑一二
  3. 世界四大重要检索系统简介
  4. 设计模式学习笔记九:原型模式(Prototype Pattern)
  5. .NET和Docker ,比翼双飞
  6. 写入null_ArrayList并发写出现Null值
  7. wireshark 十六进制过滤_CTF流量分析之wireshark使用
  8. javascript中事件
  9. vb计算机安装教程,windows10系统安装vb6.0图文教程 Win10攻略
  10. 《机器学习-原理、算法与应用》出版了
  11. python --opencv图像处理轮廓(寻找轮廓、绘制轮廓)详解
  12. Pixhawk-姿态解算源码注释
  13. 【笔记】两个根因分析方法:5WHYamp;10WHY
  14. 安装小豚当家监控摄像头
  15. dubbo 监控中心配置
  16. Java操作数据库方式(六)DataSource详解
  17. MSP430单片机原理及应用 实验
  18. 装detectron2报错:nvcc fatal : No input files specified; use option --help for more information
  19. 生产者消费者模型的作用
  20. DB查询分析器7.01新增的周、月SQL执行计划功能

热门文章

  1. redis setIfAbsent和 setnx 的区别与使用
  2. 数据库安全防护之防止被黑客攻击的策略
  3. Java - 谷歌邮箱发送邮件详解
  4. 树莓派:基于flask的远程视频监控
  5. C语言程序设计编程题[一](山西大学876)
  6. php atlas,使用Atlas实现读写分离
  7. overleaf / latex 批量添加参考文献
  8. java system.nanotime_java - System.nanoTime()完全没用吗?
  9. 澳大利亚计划兴建首个海上风电场
  10. 快捷生成HTML代码的实现