0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

lua编程入门教程:用NodeMCU在OLED上显示温湿度

电子设计 来源:电子设计 作者:电子设计 2020-12-24 09:46 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

OLED模块介绍

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

笔者使用的是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_U8G2 ,u8g2模块 已经将常见的OLED屏驱动都写好了,源码是开源的,可上GitHub查看。模块如下:

#define LUA_USE_MODULES_I2C #define LUA_USE_MODULES_U8G2I2C相关接口

由于使用了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初始化时的id disp = 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 PinESP8266 PinD0GPIO16D1GPIO5D2GPIO4D3GPIO0D4GPIO2D5GPIO14……

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

OLED模块NodeMCU PinESP8266VCC(带3.3V稳压)VCC(3.3V或5V)VCCGNDGNDGNDSCLD6GPIO12SDAD5GPIO14

注:

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 PinNodeMCU PinESP8266VCC3.3VVCCGNDGNDGNDDATAD4GPIO2

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

代码如下:

-- 管脚定义 local sda = 5 -- GPIO14 local scl = 6 -- GPIO12 local 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") -- 将内容发送到oled disp:sendBuffer() end -- 主函数 function main() init_oled() oled_show_msg() end -- 运行程序 main()

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

实际显示效果:

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

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

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    19128

    浏览量

    403936
  • OLED
    +关注

    关注

    121

    文章

    6371

    浏览量

    234302
  • 编程
    +关注

    关注

    90

    文章

    3723

    浏览量

    97438
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用STM32F103ZET6采集DHT11温湿度串口显示

    DHT11是一款数字温湿度传感器,DHT11是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有可靠的稳定性,响应快,抗干扰能力强。传感器包括一
    的头像 发表于 03-18 17:06 3639次阅读
    使用STM32F103ZET6采集DHT11<b class='flag-5'>温湿度</b>串口<b class='flag-5'>显示</b>

    纺织车间温湿度数据采集远程监控系统方案

    对精细化的纺织工业来说,确保适宜的温湿度是保证成纱质量的关键。保持适宜的温湿度条件,可以有效提高纤维刚性和弹性,减少纤维与机器部件之间的摩擦及堵塞现象。如果车间相对湿度过低,不仅容易产生静电,导致棉
    的头像 发表于 02-05 15:07 331次阅读
    纺织车间<b class='flag-5'>温湿度</b>数据采集远程监控系统方案

    冷库温湿度监控系统物联网解决方案

    冷库作为生鲜食品、医药试剂、化工原料等物资的核心存储载体,温湿度的稳定性直接决定物资品质与安全。传统冷库温湿度管理存在诸多痛点:人工巡检效率低、误差大,难以实现 24 小时全覆盖监测;温湿度异常后
    的头像 发表于 01-19 16:57 716次阅读

    全无线物联网库房温湿度自动监控系统设计与实施解决方案

    食品、药品、电子元件、仓储物流、文物馆藏等众多领域,库房内的温湿度环境是影响物资存储质量的关键因素。传统库房温湿度管理多采用人工定时巡检、纸质记录的方式,存在效率低下、误差大、实时性差、漏检误报等问题。一旦
    的头像 发表于 01-15 17:49 1189次阅读

    【瑞萨RA6E2地奇星开发板试用】DHT11 测量温湿度

    传感器:DHT11 温湿度传感器 显示屏:I2C 接口 OLED12864(128×64 分辨率,SSD1306 驱动)​ 辅助工具:杜邦线、5V 电源(或开发板供电)、万表(可选
    发表于 12-19 18:50

    温湿度传感器HTU31D温湿度控器中的应用优势

    温湿度控制器是一种用于监测和调节环境温度与湿度的设备,广泛应用于农业、仓储、工业生产、家庭等多个领域。其主要功能是维持特定环境条件,以确保产品质量和舒适的居住环境。 温湿度控制器的工作过程是传感器
    的头像 发表于 11-06 14:38 447次阅读
    <b class='flag-5'>温湿度</b>传感器HTU31D<b class='flag-5'>在</b><b class='flag-5'>温湿度</b>控器中的应用优势

    如何对电能质量在线监测装置进行温湿度环境适应性测试?

    对电能质量在线监测装置进行温湿度环境适应性测试,核心是通过 高低温湿热箱模拟目标场景的极端温湿度条件 ,验证装置 “低温启动、高温运行、湿热耐受” 下的 运行稳定性、测量精度、硬件可
    的头像 发表于 10-22 17:50 1540次阅读

    基于LORA无线通讯的祥控多点式烟叶温湿度监测系统

    XKCON祥控多点式烟叶温湿度监测系统基于LORA无线通讯技术,无需复杂的布线工作,缩短了工期,节省了成本;系统可以根据烟厂的实际布局和需求进行灵活配置,实现对各单点无线温湿度检测杆测量信号的采集接收,大大提升了系统监测和调控能力,确保烟叶
    的头像 发表于 09-23 17:02 914次阅读
    基于LORA无线通讯的祥控多点式烟叶<b class='flag-5'>温湿度</b>监测系统

    一款适用于粉尘、易结露等恶劣环境温湿度监控中的温湿度传感芯片

    温湿度监控系统恶劣环境中通过传感器实时监测温湿度参数,当达到预设阈值时自动触发预警或调节机制,确保环境状态维持安全范围内。
    的头像 发表于 07-09 09:41 883次阅读
    一款适用于粉尘、易结露等恶劣环境<b class='flag-5'>温湿度</b>监控中的<b class='flag-5'>温湿度</b>传感芯片

    常见的温湿度传感器类型?

    ),温度精度为±0.2℃(典型)。湿度和温度数据可以通过MCU、蓝牙芯片或SoC芯片通过数字接口直接读取。它与SMBus、I2C接口兼容。非常适合用于暖通空调、环境监测等。 选择温湿度传感器时,应根据具体的使用场景和需求综合考
    发表于 06-24 09:24

    Fluke 972温湿度测量仪的使用体验

    作为药厂的设备工艺工程师,我的主要职责是维护制药设备的稳定运行和监测生产区域、连接走廊的温湿度,要严格符合企业规范(温度20-25℃,湿度40%~60%RH)。日常的巡检工作中,我需要每日三次定点检查并详细记录数据,同时还要应
    的头像 发表于 06-11 17:32 1299次阅读

    温湿度变送器功能有哪些?一文详细解析

    功能就是精准测量环境中的温度和湿度。它采用高精度的传感器,能够快速、准确地感知环境温湿度的变化,并将这些数据转化为可识别的电信号。无论是实验室、仓库,还是在生产车间,都能为用户提供可靠的温湿
    发表于 06-03 10:56

    智能仓储:温湿度监控方案应用

    随着仓储环境要求提高,温湿度监控对保障货物品质至关重要。本文介绍一个工厂仓库温湿度监控方案,利用温湿度变送器、LoRa技术和智能监测平台,为仓库业主提供高效、可靠的监测解决方案。仓库温湿度
    的头像 发表于 05-29 11:35 921次阅读
    智能仓储:<b class='flag-5'>温湿度</b>监控方案应用

    树莓派RP2350 DIY 桌面动态温湿度

    桌面动态温湿度计本文介绍了DFrobotBeetleRP2350开发板结合DHT11模块、锂电池模块、随机眨眼动画,实现OLED显示的桌面动态温湿度计的项目设计。一、项目介绍本项目包括
    的头像 发表于 05-27 08:05 1105次阅读
    <b class='flag-5'>用</b>树莓派RP2350 DIY 桌面动态<b class='flag-5'>温湿度</b>计

    LoRa无线技术的温湿度监测预警系统

    LoRa无线技术的温湿度监测预警系统采用LoRa采集器和LoRa网关实现监控区域内的全覆盖,同时仓储区各个数据采集节点安装温湿度传感器,实现对监测区域的温湿度数据动态全采集,并根据仓
    的头像 发表于 05-14 16:06 994次阅读
    LoRa无线技术的<b class='flag-5'>温湿度</b>监测预警系统