日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          "); //-->

          博客專欄

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

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

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

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

          image.png


          I2C 16×2液晶顯示器

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

          image.png


          必須是ESP32 DevKit V1

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

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

          所需組件

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

          1. 必須是ESP32 DevKit V1板

          2. 試驗板

          3. 16×2i2c液晶顯示器

          4. 跨接導(dǎo)線

          試驗板要求是可選的,因為您可以選擇使用母跳線將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地址

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

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

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

          雖然有些液晶顯示器上有顯示的地址或賣家提供的地址,但在沒有地址的情況下,您可以使用一個簡單的草圖來確定地址,即****I2C線,以檢測在其地址旁邊連接的設(shè)備。這個草圖也是測試布線正確性或確定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);

          }

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

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

          image.png


          設(shè)備地址

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

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

          代碼

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

          靜態(tài)文本

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

          #include <LiquidCrystal_I2C.h>

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

          LiquidCrystal_I2C lcd(0x27, 16, 2);

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

          void setup(){

          // initialize LCD

          lcd.init();

          // turn on LCD backlight

          lcd.backlight();

          }

          接下來是無效循環(huán)()功能。循環(huán)代碼背后的思想很簡單,我們首先將光標設(shè)置到顯示的列和行,然后使用lcd.print()功能。為了允許文本在重新加載循環(huá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

          }

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

          #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網(wǎng)站. 此代碼允許在第一行顯示靜態(tài)文本,同時在第二行顯示滾動文本。

          和往常一樣,我們首先包括我們將用于草圖的庫,在本例中是相同的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>

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

          LiquidCrystal_I2C lcd(0x27, 16, 2);

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

          String messageStatic = "Static message";

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

          接下來,我們創(chuàng)建函數(shù)來顯示滾動文本。該函數(shù)接受四個參數(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);

          }

          }

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

          void setup(){

          // initialize LCD

          lcd.init();

          // turn on LCD backlight

          lcd.backlight();

          }

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

          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)該會看到這個顯示出現(xiàn)了如下圖所示的文本。


          演示

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

          請在評論區(qū)隨時聯(lián)系我,與問題和教程的意見。


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



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

          相關(guān)推薦

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

          關(guān)閉