OLED模块介绍

OLED显示屏是指有机电激发光二极管(Organic Light-Emitting Diode,OLED),具备自发光,所以不需背光源,对比度高,厚度薄,视角广,反应速度快等特性,被认为是下一代的平面显示器新兴应用技术。

笔者使用的是0.96寸,白色,I2C总线的OLED模块显示屏,分辨率128x64,OLED常用接口有I2C和SPI。转接板自己画的,和某宝的上购买的模块接口基本一致。模块有5V转3.3V电路,可以兼容外接3.3V和5V电压。硬件部分这里就不多说了,购买oled模块后客服都会给模块相关资料。

注: 在购买OLED模块时,要查看该模块是否被 u8g2库 所支持,只有被 u8g2库 支持的OELD屏才能使用该库。

启用I2C和OLED模块

在往期文章《 ESP8266之NodeMCU固件编译 》中,其实已经介绍了如何启用NodeMCU所支持的各种模块,启用对应的模块后,需要重新编译固件,烧录到ESP8266才能使用,一般根据自己的需求开启对应的模块,以减少固件的大小。

1)启用I2C模块,需要打开 user_modules.h 文件中的 LUA_USE_MODULES_I2C ,使用笔者之前编译的固件,默认是已经开启了。

ESP8266芯片没有硬件I2C接口,所以模块使用软件接口驱动程序。可包括GPIO16在内的任何GPIO引脚上设置。模块支持主模式,每条总线上可具有不同速度,最多10条总线。
速度标准:

  • 慢速:100kHz;

  • 快速:400kHz;

  • FastPlus:1MHz
    也可设置任意时钟。GPIO16引脚可以作为SCL引脚使用,但所选的总线将被限制为不超过FAST速度。
    模块不支持高速模式(3.5MHz时钟)和10位寻址方案。

2)启用OLED模块,需要打开 user_modules.h 文件中的 LUA_USE_MODULES_U8G2u8g2模块 已经将常见的OLED屏驱动都写好了,源码是开源的,可上GitHub查看。模块如下:

    #define LUA_USE_MODULES_I2C#define LUA_USE_MODULES_U8G2

I2C相关接口

由于使用了u8g2库,这里就只需要了解 i2c.setup() 接口。

i2c.setup(id, pinSDA, pinSCL, speed)

参数:

  • id:0~9,总线编号,NodeMCU支持10个I2C总线。

  • pinSDA:1~12,SDA的IO口编号

  • pinSCL:1~12, SCL的IO口编号

  • speed:i2c.SLOW (100kHz), i2c.FAST (400kHz), i2c.FASTPLUS (1MHz)或者在25000 ~ 1000000Hz之间的任意时钟频率。FASTPLUS模式在默认80MHz的CPU频率下产生600kHz的I2C时钟速度,要得到1MHz的I2C时钟速度,要使用接口 node.setcpufreq(node.CPU160MHZ) 改变CPU频率到160MHz。

返回值:

  • speed:成功则返回设置的speed;失败则返回0。

想了解其他接口,可见NodeMCU官方文档。

U8G2库相关接口

SSD1306驱动的初始化

使用I2C接口,调用以下代码初始化:

    sla = 0x3c    -- oled的I2C地址-- id:I2C初始化时的iddisp = u8g2.ssd1306_i2c_128x64_noname(id, sla)

其他驱动类型的OLED初始化,见NodeMCU官方文档。

u8g2.disp:drawStr(x, y, *str)

  • x:x轴坐标

  • y:y轴坐标

  • str:要显示的字符串

u8g2.disp:sendBuffer(void)

将内存帧缓冲区的内容发送到显示器,执行该函数,OLED才会显示设置的内容。

OLED字体设置

字体设置在 app/include 目录下的 u8g2_fonts.h 文件,需要什么字体,只需在 U8G2_FONT_TABLE_ENTRY(font_wqy16_t_chinese3) 后面加入对应的字体宏即可,由于全中文字库很大,编译出的固件大小将会很大,可能会导致烧录失败或者ESP8266启动不了。笔者就直接使用默认的字体了。u8g2的字体设计又是一门技术,网上也有大佬出教程,有兴趣的可以搜搜。

    // Add a U8G2_FONT_TABLE_ENTRY for each font you want to compile into the image// See https://github.com/olikraus/u8g2/wiki/fntlistall for a complete list of// available fonts. Drop the 'u8g2_' prefix when you add them here.#define U8G2_FONT_TABLE \U8G2_FONT_TABLE_ENTRY(font_6x10_tf) \U8G2_FONT_TABLE_ENTRY(font_unifont_t_symbols) \U8G2_FONT_TABLE_ENTRY(font_wqy16_t_chinese3)

u8g2支持的字体见u8g2官网。

点亮OLED模块

首先要搞清楚ESP8266和NodeMCU引脚之间的关系,很多新手容易搞混。ESP8266和NodeMCU对应引脚关系如下图:

对应关系,比如下表:

NodeMCU Pin ESP8266 Pin
D0 GPIO16
D1 GPIO5
D2 GPIO4
D3 GPIO0
D4 GPIO2
D5 GPIO14

笔者的OLED模块引出脚是4个(有的是IIC和SPI兼容模块可能是7个引脚),OLED模块和NodeMCU之间连接关系如下:

OLED模块 NodeMCU Pin ESP8266
VCC(带3.3V稳压) VCC(3.3V或5V) VCC
GND GND GND
SCL D6 GPIO12
SDA D5 GPIO14

注:

  • ESP8266单模块的VCC是3.3V的。

  • 若OLED模块还有RES,DC,CS引脚,可按照说明在程序中控制,或直接在硬件上配置好,具体看oled模块资料。

  • 若OLED模块不带3.3V稳压,则OLED的VCC连接到NodeMCU的3.3V引脚上,因为0.96寸OLED屏大多是3.3V电源,具体以OLED屏规格书为准。

DHT11模块和NodeMCU之间连接关系:

DHT11 Pin NodeMCU Pin ESP8266
VCC 3.3V VCC
GND GND GND
DATA D4 GPIO2

先将OLED和NodeMCU开发板连接好,然后接上将usb接到电脑端,上传点亮oled的lua代码。

代码如下:

    -- 管脚定义local sda = 5 -- GPIO14local scl = 6 -- GPIO12local sla = 0x3c  -- oled的地址,一般为0x3c-- 初始化function init_oled()-- iic总线 和 oled初始化i2c.setup(0, sda, scl, i2c.SLOW)disp = u8g2.ssd1306_i2c_128x64_noname(0, sla)-- 设置字体disp:setFont(u8g2.font_unifont_t_symbols)disp:setFontRefHeightExtendedText()--disp:setDrawColor(1)disp:setFontPosTop()--disp:setFontDirection(0)-- 画边框--disp:drawFrame(0, 0, 128, 64)end-- 显示函数function oled_show_msg()-- 设置显示内容disp:drawStr(0, 0,  "1 Hello OLED")disp:drawStr(0, 16, "2234567890ABCDEF")disp:drawStr(0, 32, "3234567890ABCDEF")disp:drawStr(0, 48, "4234567890ABCDEF")-- 将内容发送到oleddisp:sendBuffer()end-- 主函数function main()init_oled()oled_show_msg()end-- 运行程序main()

将代码保存到 oled.lua 文件,通过 ESPlorer工具 上传到ESP8266模块,刷新ESPlorer文件列表,点击 oled.lua 就可以看到oled屏显示信息了。如下图:

实际显示效果:

将温湿度动态的显示在OLED上

温湿度模块使用的是DHT11模块,关于DHT11模块的使用,之前写过一篇文章。这里就直接使用了

lua编程简单实用入门教程,用NodeMCU在OLED上显示温湿度相关推荐

  1. Lua最简单的入门教程

    首先介绍下我自己,  某二本渣渣电子专业,然后开始转行做软件开发了. 本来想做服务端开发. 莫名其妙地进了游戏开发行业,然后开始学习Lua. 作为想入门游戏开发的同学. 不需要了解太多. 基本就可以了 ...

  2. python快速编程入门黑马-新手如何快速入门Python编程?/开发python入门教程

    Python从入门到实践的教程是什么? 第一阶段Python与Linux数据这是Python的入段,也是帮助零基础学员打好基础的重要阶段,让零基础学员可以具备基础的编程能力,并掌握MySQL进阶内容. ...

  3. C++ 高性能计算之多线程简单基础入门教程

    C/C++ 高性能计算之多线程简单基础入门教程 比起别人的盲目罗列函数接口,鹦鹉学舌式的解释每一个输入参数和输出参数,一味求全而无重点,我的文章更侧重于入门知识的讲解,宁缺毋滥,只有一些最简单的入门用 ...

  4. JsRender实用入门教程

    这篇文章主要介绍了JsRender实用入门实例,包含了tag else使用.循环嵌套访问父级数据等知识点,并提供了完整的实例下载,非常具有实用价值,需要的朋友可以参考下 本文是一篇JsRender的实 ...

  5. MongoDB最简单的入门教程之五-通过Restful API访问MongoDB

    通过前面四篇的学习,我们已经在本地安装了一个MongoDB数据库,并且通过一个简单的Spring boot应用的单元测试,插入了几条记录到MongoDB中,并通过MongoDB Compass查看到了 ...

  6. MongoDB最简单的入门教程之四:使用Spring Boot操作MongoDB

    Spring Boot 是一个轻量级框架,可以完成基于 Spring 的应用程序的大部分配置工作.Spring Boot的目的是提供一组工具,以便快速构建容易配置的Spring应用程序,省去大量传统S ...

  7. MongoDB最简单的入门教程之二 使用nodejs访问MongoDB

    在前一篇教程 MongoDB最简单的入门教程之一 环境搭建** 里,我们已经完成了MongoDB的环境搭建.** 在localhost:27017的服务器上,在数据库admin下面创建了一个名为per ...

  8. PS初学简单实用磨皮教程

    PS初学简单实用磨皮教程 先看一下对比 1.打开图片,"ctrl+shift+L"自动色调,能够让图片更清晰.这个根据选择的图片进行调整,有的图片不加也许会更好哦 2.这一步一般用 ...

  9. ecshop二次开发的简单快速入门教程

    ecshop二次开发的简单快速入门教程,具体请下载文档 ecshop_dwt_lbi_详解.rar (106 KB) 下载次数: 9 转载于:https://my.oschina.net/u/3360 ...

最新文章

  1. Josephus问题
  2. python实现tsne
  3. 基于HMM的中文分词
  4. C++之inline函数使用总结
  5. at java.net.url init,java.net 基本测试
  6. [vb]On Error GoTo 0和On Error resume区别
  7. 计算机考试专业知识题库,计算机考试题库:计算机考试练习题(113)
  8. 当杭州为人称道的美丽遇见了华为云!
  9. 地产行业信息化建设分析
  10. 修改Arduino IDE背景和字体颜色
  11. 前端PS切片 常用不同格式图片区别
  12. 求导: H61 集成主板 装10.15超级黑苹果
  13. 佳能尼康新旧炮镜群比照
  14. 台湾大学林轩田机器学习技法课程学习笔记11 -- Gradient Boosted Decision Tree
  15. 伪随机数和随机数C语言
  16. recyclerview在Q平台的最新使用方法
  17. 分享一篇 Science 里不同批次的单细胞数据整合及批次校正方法
  18. 自费访问学者申请的流程
  19. VMware Workstation Pro各版本免登录下载
  20. 小米android8.0新功能,性能大优化:小米A1已向所有用户推Android 8.0更新!

热门文章

  1. 一种新的Heap区溢出技术分析[转贴]
  2. 无法识别的属性 configProtectionProvider的解决方案
  3. 在一个sql分组查询中使用多个聚集函数
  4. 3d max 安装和导入rvt模型失败
  5. 在共享DLL中使用MFC 和在静态库中使用MFC的区别
  6. javascript闭包简单实例
  7. 【学习总结】GirlsInAI ML-diary day-3-数据类型
  8. 致年轻的创业者:人脉没那么重要
  9. 【Python】 tempfile模块 临时文件和目录的处理
  10. 【bzoj1179】 Apio2009—Atm