在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            博客專欄

            EEPW首頁(yè) > 博客 > 「電子DIY」使用帶ESP32的16×2I2C液晶顯示器

            「電子DIY」使用帶ESP32的16×2I2C液晶顯示器

            發(fā)布人:電子資料庫(kù) 時(shí)間:2023-02-14 來(lái)源:工程師 發(fā)布文章

            幾周前,研究了一下ESP32模塊建立了一個(gè)簡(jiǎn)單的hello world程序來(lái)熟悉板子。今天,我們將繼續(xù)在更高的層次上探索ESP32,我們將研究如何將16×2液晶顯示器與它連接起來(lái)。

            image.png


            I2C 16×2液晶顯示器

            這可能是最受歡迎的液晶顯示器制造商之一,也是最受歡迎的液晶顯示器制造商之一。在今天的教程中,我們將使用I2C基于16×2液晶顯示器顯示器,因?yàn)樗枰奖愕牟季€。它只使用四個(gè)管腳,而其他版本的顯示器需要至少7個(gè)管腳連接到微控制器板上。

            image.png


            必須是ESP32 DevKit V1

            ESP32以模塊形式出現(xiàn),就像它的前身ESP-12e一樣,因?yàn)槭褂迷撃K通常需要一個(gè)轉(zhuǎn)接板。因此,當(dāng)它要在沒(méi)有定制PCB的應(yīng)用程序中使用時(shí),使用基于它的開(kāi)發(fā)板會(huì)更容易。在今天的教程中,我們將使用必須是ESP32 DevKit V1它是最受歡迎的ESP32開(kāi)發(fā)板之一。

            為了演示I2C驅(qū)動(dòng)的LCD和NodeMCU的使用,我們將研究如何在LCD上顯示靜態(tài)和滾動(dòng)消息。

            所需組件

            建設(shè)本項(xiàng)目需要以下組成部分:;

            1. 必須是ESP32 DevKit V1板

            2. 試驗(yàn)板

            3. 16×2i2c液晶顯示器

            4. 跨接導(dǎo)線

            試驗(yàn)板要求是可選的,因?yàn)槟梢赃x擇使用母跳線將LCD直接連接到DOIT devkit板。

            示意圖

            這個(gè)項(xiàng)目的原理圖相對(duì)簡(jiǎn)單,因?yàn)槲覀冎粚CD連接到doitdevkitv1。因?yàn)槲覀兪褂肐2C進(jìn)行通信,所以我們將把LCD的引腳連接到DevKit的I2C引腳上。按如下所示連接部件。

            image.png


            示意圖

            顯示組件連接方式的管腳圖如下所示。

            LCD–ESP32

            GND - GNDVCC - 3.3v/VinSDA - D2(GPIO4)SCL - D1 (GPIO 5)

            由于LCD的電源要求,當(dāng)連接到ESP32的3.3v引腳時(shí),可能亮度不夠。如果是這種情況,請(qǐng)將LCD的VCC引腳連接到ESP32的Vin引腳,這樣它就可以直接從連接的電源獲取電源。

            檢測(cè)LCD的I2C地址

            在這一點(diǎn)上,需要注意的是,需要一個(gè)特殊的設(shè)置,使您能夠使用Arduino IDE編程基于ESP32的電路板。我們?cè)贓SP32教程簡(jiǎn)介幾周前出版。所以,一定要去看看。

            能夠輕松編寫(xiě)與I2C液晶顯示器,我們將使用I2C LCD庫(kù)。該庫(kù)具有使LCD尋址更容易的功能和命令。下載I2C LCD庫(kù)從附加的鏈接安裝到Arduino IDE上,只需將其解壓縮到Arduino的庫(kù)文件夾中即可。

            在為項(xiàng)目編寫(xiě)代碼之前,了解I2C地址因?yàn)闆](méi)有它我們將無(wú)法與顯示器對(duì)話。

            雖然有些液晶顯示器上有顯示的地址或賣(mài)家提供的地址,但在沒(méi)有地址的情況下,您可以使用一個(gè)簡(jiǎn)單的草圖來(lái)確定地址,即****I2C線,以檢測(cè)在其地址旁邊連接的設(shè)備。這個(gè)草圖也是測(cè)試布線正確性或確定LCD是否正常工作的好方法。

            復(fù)制下面的代碼并粘貼到Arduino IDE中。



            #include <Wire.h>

            void setup() {

            Wire.begin();

            Serial.begin(115200);

            Serial.println("nI2C Scanner");

            }

            void loop() {

            byte error, address;

            int nDevices;

            Serial.println("Scanning...");

            nDevices = 0;

            for(address = 1; address < 127; address++ )

            {

            // The i2c_scanner uses the return value of

            // the Write.endTransmisstion to see if

            // a device did acknowledge to the address.

            Wire.beginTransmission(address);

            error = Wire.endTransmission();

            if (error == 0) {

            Serial.print("I2C device found at address 0x");

            if (address<16) {

            Serial.print("0");

            }

            Serial.println(address,HEX);

            nDevices++;

            }

            else if (error==4) {

            Serial.print("Unknow error at address 0x");

            if (address<16) {

            Serial.print("0");

            }

            Serial.println(address,HEX);

            }

            }

            if (nDevices == 0) {

            Serial.println("No I2C devices foundn");

            }

            else {

            Serial.println("donen");

            }

            delay(5000);

            }

            這個(gè)草圖基本上使用一個(gè)“for”循環(huán)來(lái)生成一個(gè)地址列表,然后向地址發(fā)送一個(gè)begin transmission請(qǐng)求。的返回值Write.endTransmission()函數(shù)顯示該地址上是否存在設(shè)備。收到響應(yīng)的地址就是我們要查找的地址。

            驗(yàn)證并將代碼上載到ESP32板并打開(kāi)串行監(jiān)視器。您應(yīng)該看到如下圖所示的地址:

            image.png


            設(shè)備地址

            如果你總是“找不到任何設(shè)備”,那么看看這些連接,以確保你沒(méi)有把事情弄混,你也可以繼續(xù)嘗試0x27個(gè)作為I2C地址. 這是大多數(shù)來(lái)自中國(guó)的I2C LCD模塊的通用地址。

            有了地址,我們現(xiàn)在可以為這個(gè)項(xiàng)目編寫(xiě)代碼了。

            代碼

            我們今天教程的任務(wù)是在LCD上顯示靜態(tài)和滾動(dòng)文本,為了實(shí)現(xiàn)這一點(diǎn),我們將使用I2C LCD庫(kù)來(lái)減少需要編寫(xiě)的代碼量。我們將寫(xiě)兩個(gè)單獨(dú)的草圖;一個(gè)展示靜態(tài)文本另一個(gè)同時(shí)顯示靜態(tài)和滾動(dòng)文本 .

            靜態(tài)文本

            為了從靜態(tài)文本顯示的草圖開(kāi)始,我們通過(guò)包含要用于它的庫(kù)(在本例中是i2clcd庫(kù))來(lái)開(kāi)始代碼。

            #include <LiquidCrystal_I2C.h>

            接下來(lái),我們創(chuàng)建一個(gè)I2CLCD庫(kù)類(lèi)的實(shí)例,其中包含顯示器的地址、顯示器的列數(shù)(本例中為16列)和行數(shù)(本例中為2行)作為參數(shù)。

            LiquidCrystal_I2C lcd(0x27, 16, 2);

            完成后,我們進(jìn)入虛空設(shè)置()功能。在這里,我們初始化顯示器并發(fā)出命令打開(kāi)背光,因?yàn)楦鶕?jù)LCD的不同,背光燈在默認(rèn)情況下可能是關(guān)閉的。

            void setup(){

            // initialize LCD

            lcd.init();

            // turn on LCD backlight

            lcd.backlight();

            }

            接下來(lái)是無(wú)效循環(huán)()功能。循環(huán)代碼背后的思想很簡(jiǎn)單,我們首先將光標(biāo)設(shè)置到顯示的列和行,然后使用lcd.print()功能。為了允許文本在重新加載循環(huán)之前在屏幕上停留一段時(shí)間(因此它是可見(jiàn)的),我們延遲了1000毫秒 .

            void loop(){

            // set cursor to first column, first row

            lcd.setCursor(0, 0);

            // print message

            lcd.print("Hello, World!");

            delay(1000);

            // clears the display to print new message

            }

            項(xiàng)目的完整代碼可以在下面找到,也可以在下載部分下附加。

            #include <LiquidCrystal_I2C.h>

            // set LCD address, number of columns and rows

            // if you don't know your display address, run an I2C scanner sketch

            LiquidCrystal_I2C lcd(0x27, 16, 2);

            void setup(){

            // initialize LCD

            lcd.init();

            // turn on LCD backlight

            lcd.backlight();

            }

            void loop(){

            // set cursor to first column, first row

            lcd.setCursor(0, 0);

            // print message

            lcd.print("Hello, World!");

            delay(1000);

            // clears the display to print new message

            }

            滾動(dòng)文本

            對(duì)于滾動(dòng)文本,我們將使用 壞桑托斯屬于 RandomNerdTutorials.com網(wǎng)站. 此代碼允許在第一行顯示靜態(tài)文本,同時(shí)在第二行顯示滾動(dòng)文本。

            和往常一樣,我們首先包括我們將用于草圖的庫(kù),在本例中是相同的I2C LCD庫(kù) .

            /*********

            Rui Santos

            <blockquote class="wp-embedded-content" data-secret="B8ira1D4ho"><a href="https://randomnerdtutorials.com/">Home</a></blockquote><iframe title="“Home” — Random Nerd Tutorials" class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; clip: rect(1px, 1px, 1px, 1px);" src="https://randomnerdtutorials.com/embed/#?secret=B8ira1D4ho" data-secret="B8ira1D4ho" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>

            *********/

            #include <LiquidCrystal_I2C.h>

            接下來(lái),我們創(chuàng)建一個(gè)I2CLCD庫(kù)類(lèi)的實(shí)例,其中包含顯示器的地址、顯示器的列數(shù)(本例中為16列)和行數(shù)(本例中為2行)作為參數(shù)。

            LiquidCrystal_I2C lcd(0x27, 16, 2);

            接下來(lái),我們創(chuàng)建變量來(lái)保存要顯示的消息。

            String messageStatic = "Static message";

            String messageToScroll = "This is a scrolling message with more than 16 characters";

            接下來(lái),我們創(chuàng)建函數(shù)來(lái)顯示滾動(dòng)文本。該函數(shù)接受四個(gè)參數(shù):顯示滾動(dòng)文本的行、要顯示的文本、字符移動(dòng)之間的延遲時(shí)間以及LCD的列數(shù)。

            void scrollText(int row, String message, int delayTime, int lcdColumns) {

            for (int i=0; i < lcdColumns; i++) {

            message = " " + message;

            }

            message = message + " ";

            for (int pos = 0; pos < message.length(); pos++) {

            lcd.setCursor(0, row);

            lcd.print(message.substring(pos, pos + lcdColumns));

            delay(delayTime);

            }

            }

            接下來(lái)是空虛設(shè)置()功能。當(dāng)我們初始化顯示器并打開(kāi)背光時(shí),該功能與靜態(tài)文本顯示的功能相同。

            void setup(){

            // initialize LCD

            lcd.init();

            // turn on LCD backlight

            lcd.backlight();

            }

            完成后,我們就去無(wú)效循環(huán)()功能。我們首先設(shè)置光標(biāo),然后使用print函數(shù)顯示靜態(tài)文本和 滾動(dòng)文本()函數(shù)來(lái)顯示滾動(dòng)文本

            void loop(){

            // set cursor to first column, first row

            lcd.setCursor(0, 0);

            // print static message

            lcd.print(messageStatic);

            // print scrolling message

            scrollText(1, messageToScroll, 250, lcdColumns);

            }

            下面提供了該草圖的完整代碼,也可以在本教程的下載部分中找到。

            // Adapted from the code by

            // Rui Santos

            // https://randomnerdtutorials.com

            #include <LiquidCrystal_I2C.h>

            // if you don't know your display address, run an I2C scanner sketch

            LiquidCrystal_I2C lcd(0x27, 16, 2);

            String messageStatic = "Static message";

            String messageToScroll = "This is a scrolling message with more than 16 characters";

            // Function to scroll text

            // The function acepts the following arguments:

            // row: row number where the text will be displayed

            // message: message to scroll

            // delayTime: delay between each character shifting

            // lcdColumns: number of columns of your LCD

            void scrollText(int row, String message, int delayTime, int lcdColumns) {

            for (int i=0; i < lcdColumns; i++) {

            message = " " + message;

            }

            message = message + " ";

            for (int pos = 0; pos < message.length(); pos++) {

            lcd.setCursor(0, row);

            lcd.print(message.substring(pos, pos + lcdColumns));

            delay(delayTime);

            }

            }

            void setup(){

            // initialize LCD

            lcd.init();

            // turn on LCD backlight

            lcd.backlight();

            }

            void loop(){

            // set cursor to first column, first row

            lcd.setCursor(0, 0);

            // print static message

            lcd.print(messageStatic);

            // print scrolling message

            scrollText(1, messageToScroll, 250, 16);

            }

            演示

            確保連接正確,連接必須是devkit上傳兩張草圖中的任何一張。您應(yīng)該會(huì)看到這個(gè)顯示出現(xiàn)了如下圖所示的文本。


            演示

            今天的教程就到此為止。感謝您遵循本教程。這種實(shí)用的LCD顯示屏為您的項(xiàng)目提供了一種很好的視覺(jué)反饋方式,即使屏幕大小和顯示質(zhì)量受到限制,通過(guò)滾動(dòng)功能,您可以增加可以顯示的文本/字符量。

            請(qǐng)?jiān)谠u(píng)論區(qū)隨時(shí)聯(lián)系我,與問(wèn)題和教程的意見(jiàn)。


            *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



            關(guān)鍵詞: 液晶 顯示器

            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉