0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

lua編程入門教程,用NodeMCU在OLED上顯示溫濕度

jf_pJlTbmA9 ? 來源:jf_pJlTbmA9 ? 作者:jf_pJlTbmA9 ? 2023-07-23 15:01 ? 次閱讀

OLED模塊介紹

OLED顯示屏是指有機電激發(fā)光二極管Organic Light-Emitting Diode,OLED),具備自發(fā)光,所以不需背光源,對比度高,厚度薄,視角廣,反應速度快等特性,被認為是下一代的平面顯示器新興應用技術(shù)。

筆者使用的是0.96寸,白色,I2C總線的OLED模塊顯示屏,分辨率128x64,OLED常用接口有I2C和SPI。轉(zhuǎn)接板自己畫的,和某寶的上購買的模塊接口基本一致。模塊有5V轉(zhuǎn)3.3V電路,可以兼容外接3.3V和5V電壓。硬件部分這里就不多說了,購買oled模塊后客服都會給模塊相關(guān)資料。

poYBAGDejj6AWpPxAAIMdG9ylPc391.jpg

注: 在購買OLED模塊時,要查看該模塊是否被 u8g2庫 所支持,只有被 u8g2庫 支持的OELD屏才能使用該庫。

啟用I2C和OLED模塊

在往期文章《 ESP8266之NodeMCU固件編譯 》中,其實已經(jīng)介紹了如何啟用NodeMCU所支持的各種模塊,啟用對應的模塊后,需要重新編譯固件,燒錄到ESP8266才能使用,一般根據(jù)自己的需求開啟對應的模塊,以減少固件的大小。

1)啟用I2C模塊,需要打開 user_modules.h 文件中的 LUA_USE_MODULES_I2C ,使用筆者之前編譯的固件,默認是已經(jīng)開啟了。

ESP8266芯片沒有硬件I2C接口,所以模塊使用軟件接口驅(qū)動程序。可包括GPIO16在內(nèi)的任何GPIO引腳上設置。模塊支持主模式,每條總線上可具有不同速度,最多10條總線。
速度標準:

慢速:100kHz;

快速:400kHz;

FastPlus:1MHz
也可設置任意時鐘。GPIO16引腳可以作為SCL引腳使用,但所選的總線將被限制為不超過FAST速度。
模塊不支持高速模式(3.5MHz時鐘)和10位尋址方案。

2)啟用OLED模塊,需要打開 user_modules.h 文件中的 LUA_USE_MODULES_U8G2 ,u8g2模塊 已經(jīng)將常見的OLED屏驅(qū)動都寫好了,源碼是開源的,可上GitHub查看。模塊如下:

#define LUA_USE_MODULES_I2C #define LUA_USE_MODULES_U8G2I2C相關(guān)接口

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

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

參數(shù)

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頻率下產(chǎn)生600kHz的I2C時鐘速度,要得到1MHz的I2C時鐘速度,要使用接口 node.setcpufreq(node.CPU160MHZ) 改變CPU頻率到160MHz。

返回值:

speed:成功則返回設置的speed;失敗則返回0。

想了解其他接口,可見NodeMCU官方文檔。

U8G2庫相關(guān)接口SSD1306驅(qū)動的初始化

使用I2C接口,調(diào)用以下代碼初始化:

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

其他驅(qū)動類型的OLED初始化,見NodeMCU官方文檔。

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

x:x軸坐標

y:y軸坐標

str:要顯示的字符串

u8g2.disp:sendBuffer(void)

將內(nèi)存幀緩沖區(qū)的內(nèi)容發(fā)送到顯示器,執(zhí)行該函數(shù),OLED才會顯示設置的內(nèi)容。

OLED字體設置

字體設置在 app/include 目錄下的 u8g2_fonts.h 文件,需要什么字體,只需在 U8G2_FONT_TABLE_ENTRY(font_wqy16_t_chinese3) 后面加入對應的字體宏即可,由于全中文字庫很大,編譯出的固件大小將會很大,可能會導致燒錄失敗或者ESP8266啟動不了。筆者就直接使用默認的字體了。u8g2的字體設計又是一門技術(shù),網(wǎng)上也有大佬出教程,有興趣的可以搜搜。

// 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官網(wǎng)。

點亮OLED模塊

首先要搞清楚ESP8266和NodeMCU引腳之間的關(guān)系,很多新手容易搞混。ESP8266和NodeMCU對應引腳關(guān)系如下圖:

pYYBAGDejkSAD9Z-AAT7PzyDOcI330.jpg

對應關(guān)系,比如下表:

NodeMCU PinESP8266 PinD0GPIO16D1GPIO5D2GPIO4D3GPIO0D4GPIO2D5GPIO14……

筆者的OLED模塊引出腳是4個(有的是IIC和SPI兼容模塊可能是7個引腳),OLED模塊和NodeMCU之間連接關(guān)系如下:

OLED模塊NodeMCU PinESP8266VCC(帶3.3V穩(wěn)壓)VCC(3.3V或5V)VCCGNDGNDGNDSCLD6GPIO12SDAD5GPIO14

注:

ESP8266單模塊的VCC是3.3V的。

若OLED模塊還有RES,DC,CS引腳,可按照說明在程序中控制,或直接在硬件上配置好,具體看oled模塊資料。

若OLED模塊不帶3.3V穩(wěn)壓,則OLED的VCC連接到NodeMCU的3.3V引腳上,因為0.96寸OLED屏大多是3.3V電源,具體以OLED屏規(guī)格書為準。

DHT11模塊和NodeMCU之間連接關(guān)系:

DHT11 PinNodeMCU PinESP8266VCC3.3VVCCGNDGNDGNDDATAD4GPIO2

先將OLED和NodeMCU開發(fā)板連接好,然后接上將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 -- 顯示函數(shù) function oled_show_msg() -- 設置顯示內(nèi)容 disp:drawStr(0, 0, "1 Hello OLED") disp:drawStr(0, 16, "2234567890ABCDEF") disp:drawStr(0, 32, "3234567890ABCDEF") disp:drawStr(0, 48, "4234567890ABCDEF") -- 將內(nèi)容發(fā)送到oled disp:sendBuffer() end -- 主函數(shù) function main() init_oled() oled_show_msg() end -- 運行程序 main()

將代碼保存到 oled.lua 文件,通過 ESPlorer工具 上傳到ESP8266模塊,刷新ESPlorer文件列表,點擊 oled.lua 就可以看到oled屏顯示信息了。如下圖:

pYYBAGDejkmAV5GTAAI1Zd5us_Y281.jpg

實際顯示效果:

pYYBAGDejlGAGdqNAAS5dINeNgw881.jpg

將溫濕度動態(tài)的顯示在OLED上

溫濕度模塊使用的是DHT11模塊,關(guān)于DHT11模塊的使用,之前寫過一篇文章。這里就直接使用了

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • OLED
    +關(guān)注

    關(guān)注

    119

    文章

    6130

    瀏覽量

    223106
  • 顯示屏
    +關(guān)注

    關(guān)注

    28

    文章

    4400

    瀏覽量

    73735
  • 發(fā)光二極管
    +關(guān)注

    關(guān)注

    13

    文章

    1179

    瀏覽量

    66004
  • NODEMCU
    +關(guān)注

    關(guān)注

    13

    文章

    289

    瀏覽量

    21187
收藏 人收藏

    評論

    相關(guān)推薦

    STM32外接DHT11溫濕度傳感器并通過OLED進行數(shù)據(jù)顯示的設計電路與程序

    本篇介紹了如何在STM32外接溫濕度DHT11實現(xiàn)溫濕度數(shù)據(jù)的讀取,并通過OLED進行數(shù)據(jù)顯示
    的頭像 發(fā)表于 06-07 09:09 ?1.1w次閱讀
    STM32外接DHT11<b class='flag-5'>溫濕度</b>傳感器并通過<b class='flag-5'>OLED</b>進行數(shù)據(jù)<b class='flag-5'>顯示</b>的設計電路與程序

    【STM32F103試用體驗】OLED顯示及DHT11溫濕度測量實驗

    , 先顯示基本信息至OLED屏, 然后每1秒通過DHT11獲取溫濕度數(shù)據(jù), 并實時OLED
    發(fā)表于 09-25 10:11

    七行代碼實現(xiàn)一個溫濕度計(Oled顯示

    組合同時運行。二、制作材料1. shineblink core開發(fā)板一個2. sht30溫濕度傳感器模塊一個3. 0.96寸oled顯示屏一個4. TYPE00-0000003F 電路板一個,該電路板
    發(fā)表于 11-16 14:32

    如何使用nodemcu開發(fā)板與DHT11溫濕度傳感器獲取溫濕度數(shù)值?

    如何使用nodemcu開發(fā)板與DHT11溫濕度傳感器獲取溫濕度數(shù)值?
    發(fā)表于 10-28 06:12

    NodeMcu是如何使用OLED顯示溫濕度

    NodeMcu使用OLED顯示溫濕度1、用到模塊:(1)SHT20溫濕度傳感器 ![沒有焊槍只能拿鐵絲加膠槍焊了](?x-oss-proce
    發(fā)表于 11-01 06:51

    如何通過NodeMCU和DHT11收集溫濕度

    使用 NodeMCU 和 DHT11 傳感器通過 MQTT 上傳溫濕度數(shù)據(jù)簡介本示例將演示如何通過 NodeMCU, DHT11 收集溫濕度并通過 MQTT 協(xié)議將數(shù)據(jù)上報到 EMQX
    發(fā)表于 11-24 08:08

    如何在串口實驗基礎添加OLED顯示溫濕度?

    如何在串口實驗基礎添加OLED顯示溫濕度?
    發(fā)表于 12-16 06:39

    如何用DHT11溫濕度傳感器獲取溫濕度信息

    :https://pan.baidu.com/s/1J6AuQpoDJbjMko3kSD4aZw提取碼:81f5取走點個贊~一、課題1、 DHT11 溫濕度傳感器獲取溫濕度信息,顯示
    發(fā)表于 01-06 06:40

    如何利用STM32C8T6+DHT11OLED顯示溫濕度

    如何利用STM32C8T6+DHT11OLED顯示溫濕度呢?有哪些步驟?
    發(fā)表于 01-21 06:41

    怎樣通過IIC和SPI實現(xiàn)在OLED顯示溫濕度及滾動效果呢

    SPI與I2C接口下的OLED顯示該怎樣去實現(xiàn)呢?怎樣通過IIC和SPI實現(xiàn)在OLED顯示
    發(fā)表于 01-27 06:06

    lua編程入門教程NodeMCUOLED顯示溫濕度

    OLED模塊介紹OLED顯示屏是指有機電激發(fā)光二極管(Organic Light-Emitting Diode,OLED),具備自發(fā)光,所以不需背光源,對比度高,厚度薄,視角廣,反應速
    的頭像 發(fā)表于 12-24 09:46 ?1108次閱讀

    nodemcu使用OLED顯示溫濕度

    NodeMcu使用OLED顯示溫濕度1、用到模塊:(1)SHT20溫濕度傳感器 ![沒有焊槍只能拿鐵絲加膠槍焊了](https://
    發(fā)表于 10-25 21:06 ?12次下載
    <b class='flag-5'>nodemcu</b>使用<b class='flag-5'>OLED</b><b class='flag-5'>顯示</b><b class='flag-5'>溫濕度</b>

    lua編程簡單實用入門教程NodeMCUOLED顯示溫濕度

    OLED模塊介紹OLED顯示屏是指有機電激發(fā)光二極管(Organic Light-Emitting Diode,OLED),具備自發(fā)光,所以不需背光源,對比度高,厚度薄,視角廣,反應速
    發(fā)表于 10-26 14:35 ?6次下載
    <b class='flag-5'>lua</b><b class='flag-5'>編程</b>簡單實用<b class='flag-5'>入門教程</b>,<b class='flag-5'>用</b><b class='flag-5'>NodeMCU</b><b class='flag-5'>在</b><b class='flag-5'>OLED</b><b class='flag-5'>上</b><b class='flag-5'>顯示</b><b class='flag-5'>溫濕度</b>

    MSP432 P401R 單片機 讀取DHT11 串口發(fā)送溫濕度 OLED顯示溫濕度 溫濕度檢測

    MSP432P401R讀取DHT11串口發(fā)送溫濕度OLED顯示溫濕度
    發(fā)表于 12-16 16:54 ?33次下載
    MSP432 P401R 單片機  讀取DHT11 串口發(fā)送<b class='flag-5'>溫濕度</b> <b class='flag-5'>OLED</b><b class='flag-5'>顯示</b><b class='flag-5'>溫濕度</b> <b class='flag-5'>溫濕度</b>檢測

    Arduino Nano 和 NodeMCU ESP8266 讀取 DHT11 環(huán)境溫濕度數(shù)據(jù)及 OLED顯示

    Arduino Nano 和 NodeMCU ESP8266 讀取 DHT11 環(huán)境溫濕度數(shù)據(jù)及 OLED顯示
    的頭像 發(fā)表于 08-13 18:04 ?617次閱讀
    Arduino Nano 和 <b class='flag-5'>NodeMCU</b> ESP8266 讀取 DHT11 環(huán)境<b class='flag-5'>溫濕度</b>數(shù)據(jù)及 <b class='flag-5'>OLED</b><b class='flag-5'>顯示</b>