博客專欄

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

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

        發布人:電子資料庫 時間:2023-02-14 來源:工程師 發布文章

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

        image.png


        I2C 16×2液晶顯示器

        這可能是最受歡迎的液晶顯示器制造商之一,也是最受歡迎的液晶顯示器制造商之一。在今天的教程中,我們將使用I2C基于16×2液晶顯示器顯示器,因為它需要方便的布線。它只使用四個管腳,而其他版本的顯示器需要至少7個管腳連接到微控制器板上。

        image.png


        必須是ESP32 DevKit V1

        ESP32以模塊形式出現,就像它的前身ESP-12e一樣,因為使用該模塊通常需要一個轉接板。因此,當它要在沒有定制PCB的應用程序中使用時,使用基于它的開發板會更容易。在今天的教程中,我們將使用必須是ESP32 DevKit V1它是最受歡迎的ESP32開發板之一。

        為了演示I2C驅動的LCD和NodeMCU的使用,我們將研究如何在LCD上顯示靜態和滾動消息。

        所需組件

        建設本項目需要以下組成部分:;

        1. 必須是ESP32 DevKit V1板

        2. 試驗板

        3. 16×2i2c液晶顯示器

        4. 跨接導線

        試驗板要求是可選的,因為您可以選擇使用母跳線將LCD直接連接到DOIT devkit板。

        示意圖

        這個項目的原理圖相對簡單,因為我們只將LCD連接到doitdevkitv1。因為我們使用I2C進行通信,所以我們將把LCD的引腳連接到DevKit的I2C引腳上。按如下所示連接部件。

        image.png


        示意圖

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

        LCD–ESP32

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

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

        檢測LCD的I2C地址

        在這一點上,需要注意的是,需要一個特殊的設置,使您能夠使用Arduino IDE編程基于ESP32的電路板。我們在ESP32教程簡介幾周前出版。所以,一定要去看看。

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

        在為項目編寫代碼之前,了解I2C地址因為沒有它我們將無法與顯示器對話。

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

        復制下面的代碼并粘貼到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);

        }

        這個草圖基本上使用一個“for”循環來生成一個地址列表,然后向地址發送一個begin transmission請求。的返回值Write.endTransmission()函數顯示該地址上是否存在設備。收到響應的地址就是我們要查找的地址。

        驗證并將代碼上載到ESP32板并打開串行監視器。您應該看到如下圖所示的地址:

        image.png


        設備地址

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

        有了地址,我們現在可以為這個項目編寫代碼了。

        代碼

        我們今天教程的任務是在LCD上顯示靜態和滾動文本,為了實現這一點,我們將使用I2C LCD庫來減少需要編寫的代碼量。我們將寫兩個單獨的草圖;一個展示靜態文本另一個同時顯示靜態和滾動文本 .

        靜態文本

        為了從靜態文本顯示的草圖開始,我們通過包含要用于它的庫(在本例中是i2clcd庫)來開始代碼。

        #include <LiquidCrystal_I2C.h>

        接下來,我們創建一個I2CLCD庫類的實例,其中包含顯示器的地址、顯示器的列數(本例中為16列)和行數(本例中為2行)作為參數。

        LiquidCrystal_I2C lcd(0x27, 16, 2);

        完成后,我們進入虛空設置()功能。在這里,我們初始化顯示器并發出命令打開背光,因為根據LCD的不同,背光燈在默認情況下可能是關閉的。

        void setup(){

        // initialize LCD

        lcd.init();

        // turn on LCD backlight

        lcd.backlight();

        }

        接下來是無效循環()功能。循環代碼背后的思想很簡單,我們首先將光標設置到顯示的列和行,然后使用lcd.print()功能。為了允許文本在重新加載循環之前在屏幕上停留一段時間(因此它是可見的),我們延遲了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

        }

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

        #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

        }

        滾動文本

        對于滾動文本,我們將使用 壞桑托斯屬于 RandomNerdTutorials.com網站. 此代碼允許在第一行顯示靜態文本,同時在第二行顯示滾動文本。

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

        /*********

        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>

        接下來,我們創建一個I2CLCD庫類的實例,其中包含顯示器的地址、顯示器的列數(本例中為16列)和行數(本例中為2行)作為參數。

        LiquidCrystal_I2C lcd(0x27, 16, 2);

        接下來,我們創建變量來保存要顯示的消息。

        String messageStatic = "Static message";

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

        接下來,我們創建函數來顯示滾動文本。該函數接受四個參數:顯示滾動文本的行、要顯示的文本、字符移動之間的延遲時間以及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();

        }

        完成后,我們就去無效循環()功能。我們首先設置光標,然后使用print函數顯示靜態文本和 滾動文本()函數來顯示滾動文本

        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上傳兩張草圖中的任何一張。您應該會看到這個顯示出現了如下圖所示的文本。


        演示

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

        請在評論區隨時聯系我,與問題和教程的意見。


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 液晶 顯示器

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 舟曲县| 迁安市| 潮州市| 锡林浩特市| 托里县| 韶关市| 永川市| 平乡县| 九龙坡区| 轮台县| 女性| 饶阳县| 邢台县| 东乡| 双江| 壶关县| 凉城县| 平凉市| 大连市| 大理市| 稻城县| 临朐县| 嘉荫县| 肃南| 松滋市| 寿阳县| 南岸区| 和龙市| 汉阴县| 新田县| 陵水| 泗洪县| 凤山市| 杨浦区| 清新县| 乐山市| 台东市| 迁西县| 哈巴河县| 泽州县| 五寨县|