日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/4/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lua编程简单实用入门教程,用NodeMCU在OLED上显示温湿度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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_U8G2 ,u8g2模塊 已經將常見的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 PinESP8266 Pin
D0GPIO16
D1GPIO5
D2GPIO4
D3GPIO0
D4GPIO2
D5GPIO14

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

OLED模塊NodeMCU PinESP8266
VCC(帶3.3V穩壓)VCC(3.3V或5V)VCC
GNDGNDGND
SCLD6GPIO12
SDAD5GPIO14

注:

  • 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 PinESP8266
VCC3.3VVCC
GNDGNDGND
DATAD4GPIO2

先將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上显示温湿度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。