nodemcu lcd display free sample

LCD Displays are a fast and inexpensive way to display simple information. This tutorial will demonstrate how to connect a 16x2 LCD display using I2C to an ESP8266 NodeMCU dev kit.
The LCD display I"m going to use is fairly common and can be picked up for a couple of bucks from Amazon. It uses I2C to communicate with the NodeMCU. I2C is nice because it only required two wires for communication.
Connect the VCC pin on the LCD display to the VIN pin on the NodeMCU. The VIN pin on the NodeMCU is tied directly to the 5V pin on the incoming USB port. If you plan on powering the NodeMCU with something other than USB, you"ll have to find another way to provide 5V to the display.
Thanks to the LiquidCrystal_I2C library, communicating with these displays is simple. First use the Arduino"s library manager to the install the LiquidCrystal_I2C library if you haven"t already.
The first thing we do is construct a LiquidCrystal_I2C object and pass it the I2C address, width in characters, and height in characters. The address is likely always 0x3F for NodeMCUs. If you apply these instructions to other types of boards, the address may be different. Arduino provides an example sketch that scans for I2C addresses if you"re having difficulty finding it.
The LCD display works by first moving the cursor to where you want to start and then printing some characters. In my example, I wanted HELLO and WORLD to be centered on each line. For "HELLO", the cursor needed to be 5 characters from the right and zero characters down, so I moved it (5, 0). For "WORLD", I needed it to be 5 characters to the right and one character down, so I moved it (5, 1).

Than displays are the way to go. There are different kinds of displays like 7 Segment LED display, 4 Digit 7 Segment display, 8×8 Dot Matrix display, OLED display or the easiest and cheapest version the liquid crystal display (LCD).
Most LCD displays have either 2 rows with 16 characters per row or 4 rows with 20 characters per row. There are LCD screen with and without I2C module. I highly suggest the modules with I2C because the connection to the board is very easy and there are only 2 instead of 6 pins used. But we will cover the LCD screen with and without I2C module in this article.
The LCD display has an operating voltage between 4.7V and 5.3V with a current consumption of 1mA without backlight and 120mA with full backlight. There are version with a green and also with a blue backlight color. Each character of the display is build by a 5×8 pixel box and is therefore able to display custom generated characters. Because each character is build by (5×8=40) 40 pixels a 16×2 LCD display will have 16x2x40= 1280 pixels in total. The LCD module is able to operate in 8-bit and 4-bit mode. The difference between the 4-bit and 8-bit mode are the following:
If we use the LCD display version without I2C connection we have to add the potentiometer manually to control the contrast of the screen. The following picture shows the pinout of the LCD screen.
Also I added a table how to connect the LCD display with the Arduino Uno and the NodeMCU with a description of the LCD pin. To make it as easy as possible for you to connect your microcontroller to the display, you find the corresponding fritzing connection picture for the Arduino Uno and the NodeMCU in this chapter.
3VEEPotentiometerPotentiometerAdjusts the contrast of the display If this pin is grounded, you get the maximum contrast. We will connect the VEE pin to the potentiometer output to adjust the contrast by changing the resistance of the potentiometer.
4RSD12D2Select command register to low when we are sending commands to the LCD like set the cursor to a specific location, clear the display or turn off the display.
8Data Pin 1 (d1)Data pins 0 to 7 forms an 8-bit data line. The Data Pins are connection to the Digital I/O pins of the microcontroller to send 8-bit data. These LCD’s can also operate on 4-bit mode in such case Data pin 4,5,6 and 7 will be left free.
Of cause we want to try the connection between the microcontroller and the LCD display. Therefore you find an example sketch in the Arduino IDE. The following section shows the code for the sketch and a picture of the running example, more or less because it is hard to make a picture of the screen ;-). The example prints “hello, world!” in the first line of the display and counts every second in the second row. We use the connection we described before for this example.
Looks very complicated to print data onto the LCD screen. But don’t worry like in most cases if it starts to get complicated, there is a library to make the word for us. This is also the case for the LCD display without I2C connection.
Like I told you, I would suggest the LCD modules with I2C because you only need 2 instead of 6 pins for the connection between display and microcontroller board. In the case you use the I2C communication between LCD and microcontroller, you need to know the I2C HEX address of the LCD. In this article I give you a step by step instruction how to find out the I2C HEX address of a device. There is also an article about the I2C communication protocol in detail.
The following picture shows how to connect an I2C LCD display with an Arduino Uno. We will use exact this connection for all of the examples in this article.
To use the I2C LCD display we have to install the required library “LiquidCrystal_I2C” by Frank de Brabander. You find here an article how to install an external library via the Arduino IDE. After you installed the library successful you can include the library via: #include < LiquidCrystal_I2C.h>.
The LiquidCrystal library has 20 build in functions which are very handy when you want to work with the LCD display. In the following part of this article we go over all functions with a description as well as an example sketch and a short video that you can see what the function is doing.
LiquidCrystal_I2C()This function creates a variable of the type LiquidCrystal. The parameters of the function define the connection between the LCD display and the Arduino. You can use any of the Arduino digital pins to control the display. The order of the parameters is the following: LiquidCrystal(RS, R/W, Enable, d0, d1, d2, d3, d4, d5, d6, d7)
If you are using an LCD display with the I2C connection you do not define the connected pins because you do not connected to single pins but you define the HEX address and the display size: LiquidCrystal_I2C lcd(0x27, 20, 4);
xlcd.begin()The lcd.begin(cols, rows) function has to be called to define the kind of LCD display with the number of columns and rows. The function has to be called in the void setup() part of your sketch. For the 16x2 display you write lcd.begin(16,2) and for the 20x4 lcd.begin(20,4).
xxlcd.clear()The clear function clears any data on the LCD screen and positions the cursor in the upper-left corner. You can place this function in the setup function of your sketch to make sure that nothing is displayed on the display when you start your program.
xxlcd.setCursor()If you want to write text to your LCD display, you have to define the starting position of the character you want to print onto the LCD with function lcd.setCursor(col, row). Although you have to define the row the character should be displayed.
xxlcd.print()This function displays different data types: char, byte, int, long, or string. A string has to be in between quotation marks („“). Numbers can be printed without the quotation marks. Numbers can also be printed in different number systems lcd.print(data, BASE) with BIN for binary (base 2), DEC for decimal (base 10), OCT for octal (base 8), HEX for hexadecimal (base 16).
xlcd.println()This function displays also different data types: char, byte, int, long, or string like the function lcd.print() but lcd.println() prints always a newline to output stream.
xxlcd.display() / lcd.noDisplay()This function turn on and off any text or cursor on the display but does not delete the information from the memory. Therefore it is possible to turn the display on and off with this function.
xxlcd.scrollDisplayLeft() / lcd.scrollDisplayRight()This function scrolls the contents of the display (text and cursor) a one position to the left or to the right. After 40 spaces the function will loops back to the first character. With this function in the loop part of your sketch you can build a scrolling text function.
Scrolling text if you want to print more than 16 or 20 characters in one line, than the scrolling text function is very handy. First the substring with the maximum of characters per line is printed, moving the start column from the right to the left on the LCD screen. Than the first character is dropped and the next character is printed to the substring. This process repeats until the full string is displayed onto the screen.
xxlcd.autoscroll() / lcd.noAutoscroll()The autoscroll function turn on or off the functionality that each character is shifted by one position. The function can be used like the scrollDisplayLeft / scrollDisplayRight function.
xxlcd. leftToRight() / lcd.rightToLeft()The leftToRight and rightToLeft functions changes the direction for text written to the LCD. The default mode is from left to right which you do not have to define at the start of the sketch.
xxlcd.createChar()There is the possibility to create custom characters with the createChar function. How to create the custom characters is described in the following chapter of this article as well as an example.
xlcd.backlight()The backlight function is useful if you do not want to turn off the whole display (see lcd.display()) and therefore only switch on and off the backlight. But before you can use this function you have to define the backlight pin with the function setBacklightPin(pin, polarity).
xlcd.moveCursorLeft() / lcd.moveCursorRight()This function let you move the curser to the left and to the right. To use this function useful you have to combine it with lcd.setCursor() because otherwise there is not cursor to move left or right. For our example we also use the function lcd.cursor() to make the cursor visible.
xlcd.on() / lcd.off()This function switches the LCD display on and off. It will switch on/off the LCD controller and the backlight. This method has the same effect of calling display/noDisplay and backlight/noBacklight.
Show or hide a cursor (“_”) that is useful when you create a menu as navigation bar from the left to the right or from the top to the bottom, depending on a horizontal of vertical menu bar. If you are interested how to create a basic menu with the ESP or Arduino microcontroller in combination with the display, you find here a tutorial.
The following code shows you the Arduino program to use all three LCD display functions of the library divided into three separate functions. Also the video after the program shows the functions in action.
The creation of custom characters is very easy if you use the previous mentioned libraries. The LiquidCrystal and also the LiquidCrystal_I2C library have the function “lcd.createChar()” to create a custom character out of the 5×8 pixels of one character. To design your own characters, you need to make a binary matrix of your custom character from an LCD character generator or map it yourself. This code creates a wiggling man.
In the section of the LCD display pinout without I2C we saw that if we set the RS pin to how, that we are able to send commands to the LCD. These commands are send by the data pins and represented by the following table as HEX code.

This tutorial shows how to use the I2C LCD (Liquid Crystal Display) with the ESP32 using Arduino IDE. We’ll show you how to wire the display, install the library and try sample code to write text on the LCD: static text, and scroll long messages. You can also use this guide with the ESP8266.
Additionally, it comes with a built-in potentiometer you can use to adjust the contrast between the background and the characters on the LCD. On a “regular” LCD you need to add a potentiometer to the circuit to adjust the contrast.
Before displaying text on the LCD, you need to find the LCD I2C address. With the LCD properly wired to the ESP32, upload the following I2C Scanner sketch.
After uploading the code, open the Serial Monitor at a baud rate of 115200. Press the ESP32 EN button. The I2C address should be displayed in the Serial Monitor.
Displaying static text on the LCD is very simple. All you have to do is select where you want the characters to be displayed on the screen, and then send the message to the display.
The next two lines set the number of columns and rows of your LCD display. If you’re using a display with another size, you should modify those variables.
Then, you need to set the display address, the number of columns and number of rows. You should use the display address you’ve found in the previous step.
To display a message on the screen, first you need to set the cursor to where you want your message to be written. The following line sets the cursor to the first column, first row.
Scrolling text on the LCD is specially useful when you want to display messages longer than 16 characters. The library comes with built-in functions that allows you to scroll text. However, many people experience problems with those functions because:
The messageToScroll variable is displayed in the second row (1 corresponds to the second row), with a delay time of 250 ms (the GIF image is speed up 1.5x).
In a 16×2 LCD there are 32 blocks where you can display characters. Each block is made out of 5×8 tiny pixels. You can display custom characters by defining the state of each tiny pixel. For that, you can create a byte variable to hold the state of each pixel.
In summary, in this tutorial we’ve shown you how to use an I2C LCD display with the ESP32/ESP8266 with Arduino IDE: how to display static text, scrolling text and custom characters. This tutorial also works with the Arduino board, you just need to change the pin assignment to use the Arduino I2C pins.

In this tutorial, we will learn how to interface an I2C LCD with ESP8266 NodeMCU Development Board. The PCF8574 I2C LCD is a special module for 16×2 and 20×4 Character LCD Displays. We will learn how the ESP8266 NodeMCU I2C LCD interface works, how to configure I2C in ESP8266 NodeMCU and display some data on 16×2 LCD.
The ESP8266 NodeMCU is a great development board for Wi-Fi related applications. Another advantage of this board is the GPIO Pins. After taking out all the dedicated GPIO pins (for SPI Flash IC and UART) we get around 9 GPIO Pins free to use.
But what if you want to interface a 16×2 Character LCD Display with ESP8266 NodeMCU? Even in 4-bit Parallel communication mode, the 16×2 LCD will take up 6 GPIO Pins of the microcontroller (four for Data, one for RS and one for E).
This is where the I2C LCD Module comes handy. It is designed specially for 16×2 and 20×4 Character LCD Displays and communicates through, well, I2C interface. Thus from 6 GPIO Pins, we have come down to two GPIO Pins (SDA and SCL of I2C).
As the name suggests, the PCF8574 I2C LCD Module is based on the PCF8574 GPIO Expander IC. Originally, it is used in modules to expand the GPIO Pins of a Microcontroller and it communicated with the microcontroller through I2C Interface.
Instead of GPIO expansion, the I2C LCD Module is dedicated to drive a character LCD. So, its pinout coincides with a typical 16×2 LCD, it contains a potentiometer to adjust the contrast and also a jumper to enable or disable the backlight.
Let us now understand how the ESP8266 NodeMCU I2C LCD Interface works. If you remember the pinout of ESP8266 NodeMCU, D1 and D2 i.e., GPIO 5 and GPIO 4 are frequently used for I2C Communication.
There are no other connections between I2C LCD Module and the actual LCD itself as the Module simply plugs into the pins of the LCD Display. You only need to provide the supply and I2C connections.
NOTE: The LCD Display works on a supply voltage between 4.7 V and 5.3 V. So, even though PCF8574 IC works at 2.5 V to 6 V supply, instead of giving 3.3V from the NodeMCU, we are giving 5V.
If you haven’t worked with I2C LCD Module before, then you have to download a special library. Open Arduino IDE and go to Tools -> Manage Libraries. . .
Now, make all the necessary connections as mentioned before and plug in the ESP8266 NodeMCU to the computer. Make sure that NodeMCU is selected in the boards and also set the right COM Port.
Before writing the actual code to display stuff on the LCD, we have to first determine the Slave Address of the PCF8574 I2C LCD Module. If you remember basics of I2C Communication, a master can communicate with a slave only if it knows the slave address.
So, let us use the following code to get the slave address of the I2C LCD Module. After making all the connections, upload the code to ESP8266 NodeMCU and open the serial monitor.
Now, let us see how to display a simple text on the 16×2 LCD using ESP8266 and I2C LCD Module. There are no extra connections as the previously made connections are all that we need.
As a bonus, I made a small circuit in which a 10 KΩ Potentiometer is connected to the ADC pins of NodeMCU (labelled A0) and display the result of ADC on the LCD using the I2C LCD Module.
Also note that ESP8266 has only one ADC Channel. On the NodeMCU board, the ADC Pin is marked as A0. The wiper pin of the 10 KΩ Potentiometer is connected to A0 of NodeMCU. Other two pins of the potentiometer are connected to 3.3V and GND respectively.
A simple tutorial on interfacing PCF8574 I2C LCD Module with ESP8266 NodeMCU Development Board. You learned the important of I2C LCD Module, how the ESP8266 NodeMCU I2C LCD Interface works, how to display some text on the LCD.

The ST7789 TFT module contains a display controller with the same name: ST7789. It’s a color display that uses SPI interface protocol and requires 3, 4 or 5 control pins, it’s low cost and easy to use.
This display is an IPS display, it comes in different sizes (1.3″, 1.54″ …) but all of them should have the same resolution of 240×240 pixel, this means it has 57600 pixels. This module works with 3.3V only and it doesn’t support 5V.
The ST7789 display module shown in project circuit diagram has 7 pins: (from right to left): GND (ground), VCC, SCL (serial clock), SDA (serial data), RES (reset), DC (or D/C: data/command) and BLK (back light).
The first library is a driver for the ST7789 TFT display which can be installed from Arduino IDE library manager (Sketch —> Include Library —> Manage Libraries …, in the search box write “st7789” and install the one from Adafruit).

Arduino 16×2 I2C LCD, Nodemcu 16×2 i2c LCD Code & Library- I have been using 16×2 LCD in different projects. For displaying the Date and time information, In a password-protected door security system, and so on. A regular 16×2 LCD module needs a lot of wires, due to which maximum of the controller I/O pins are wasted.
The wiring can be reduced; by replacing a regular 16×2 LCD with the I2C supported 16×2 LCD. The i2c 16×2 LCD is in fact the same LCD but it comes with the i2c driver module soldered on the backside of the LCD;
In this tutorial, you will learn how to display text on the i2c 16×2 LCD using Arduino. In this tutorial you will also learn how the same i2c 16×2 LCD can be interfaced with the Nodemcu ESP8266 Wifi Module which used in IOT based projects.
This is just a normal 16×2 LCD which is converted into an i2c supported type LCD by using the PCF8574 i2c Driver module. The four male headers are clearly labeled as GND, VCC, SDA, and SCL. A 10K variable resistor which is used for the adjustment of the LCD contrast.
As you can see the driver module is also provided with A0, A1, and A2 links which can be used to set the i2c address. As you can see no links are fitted the 7-bit address is 0x27 which you have to confirm in the datasheet, may be your LCD have a different i2c address. The links control the least significant 3 bits, fitting the link sets the bit low.
As you can see the circuit diagram is really simple. All the 16 pins of the PCF8574 driver module are connected with the LCD pins. Using these connections you can convert any 16×2 LCD into an i2c supported LCD. The VCC pin is connected with the Arduino’s 5 volts, the SDA pin is connected with the Arduino’s Analog pin A4, the SCL pin is connected with the Arduino’s Analog pin A5, while the GND pin is connected with the Arduino’s ground. Using only two pins A4 and A5 we can control the 16×2 LCD.
The 4 pins of the i2c LCD driver module are connected as per the circuit diagram. The VCC and GND pins are connected with the Arduino 5 volts and ground, while the SDA and SCL pins are connected with the Arduino’s Analog pins A4 and A5. Now, let’s have a look at the Arduino programming.
The 0x27 is the i2c address if your LCD doesn’t work change this address which you can find in the datasheet. The values 16 and 2 means, that I am using a 16×2 LCD. If you are using a 16×4 LCD then simply replace 2 with 4, and similarly for the other same series LCDs.
In the void setup() function we simply initialize the lcd. Activate the LCD backlight. And Finally, we set the cursor at the top left corner of the 16×2 LCD. You can also use the lcd.setCursor() function. Even if you don’t use this function it’s ok, the default location is already the first row and first column.
As you know the LCD I am using is a 16×2 LCD which means it has 16 columns and 2 rows. Using the lcd.setCursor function you can select any of the two rows and any column. 0 and 1 means, the first column of the second row.
Again I cleared the lcd, selected the first column and first row, printed electroniclinic. And then the same for loop but this time I have used the lcd.setCursor() function. which keeps the cursor at 1 column and 2nd row.
Now I am going to explain how you can interface the same LCD with the Nodemcu ESP8266 wifi module which is quite popular for making IOT based projects.
The 16×2 LCD connection with the PCF8574 I2C driver remains the same. This time the SCL and SDA pins of the I2C LCD converter are connected with the Nodemcu digital pins D3 and D4. A regulated power supply based on the LM7805 voltage regulator is used to power up the Nodemcu ESP8266 Wifi module and 16×2 I2C supported LCD. Now let’s have a look at the Nodemcu programming.
This is exactly the same program with a little modification, this time in the void setup function I used the wire.begin() function. 2 and 0 are the gpio 2 and gpio 0 pins on the nodemcu module which are actually the D4 and D3 pins.
![]()
In this lesson, we will show how to use the NodeMCU to subscribe to messages that published by MQTT client,then display these messages on a 1602 I2C LCD display.
*0x27 means the address of this 1602 I2C LCD display,different LCD may have different address,if the LCD do not work,please connect your 1602 I2C LCD dispaly to your NodeMCU,then upload below code to your NodeMCU, you will get the I2C address from the Serial Monitor.You can check following link to get more usages about 1602 I2C LCD dispaly : https://osoyoo.com/2014/12/07/16×2-i2c-liquidcrystal-displaylcd/.
The NodeMCU serial monitor will show the IP address and the connection satatus,then print the “publish data”.As you can see from the sketch,the initial data is 1.

As you all know the are a few variants of the 1.8" TFT on the internet. With the genuine Adafruit lcd-s there are usually no problems. But when using fake ones(usually from Aliexpress) you have to make some adjustments.

I think the Wire.begin() syntax is Wire.begin(SDA, SCL);. So, for the code to match the diagram it would be Wire.begin(4,3);. I also connected my display"s LCD Vcc to Vin on the NodeMCU which differs from the diagram. It works for me with these changes.
Wire.begin(2.0) is same with Wire.begin(D4,D3), the different is (2.0) is GPIO pin, only name is different but is referring to the same pin, u can google the pin out of nodeMCU.
i know it"s late but..i"ve found some solution for this problem..at least it was for me..try change "lcd.backlight();" to "lcd.setBacklight((uint8_t)1);0
he copiado el programa en un nodemcu v3 de lolin en el IDE y cuando lo clequeo me aparece el siguiente error: Tampoco me funciona lo de dar corriente a traves del pin Vin a la lcd, le proporciono corriente a traves de un pin 3,3V

The Arduino family of devices is features rich and offers many capabilities. The ability to interface to external devices readily is very enticing, although the Arduino has a limited number of input/output options. Adding an external display would typically require several of the limited I/O pins. Using an I2C interface, only two connections for an LCD character display are possible with stunning professional results. We offer both a 4 x 20 LCD.
The character LCD is ideal for displaying text and numbers and special characters. LCDs incorporate a small add-on circuit (backpack) mounted on the back of the LCD module. The module features a controller chip handling I2C communications and an adjustable potentiometer for changing the intensity of the LED backlight. An I2C LCD advantage is that wiring is straightforward, requiring only two data pins to control the LCD.
A standard LCD requires over ten connections, which can be a problem if your Arduino does not have many GPIO pins available. If you happen to have an LCD without an I2C interface incorporated into the design, these can be easily
The LCD displays each character through a matrix grid of 5×8 pixels. These pixels can display standard text, numbers, or special characters and can also be programmed to display custom characters easily.
Connecting the Arduino UNO to the I2C interface of the LCD requires only four connections. The connections include two for power and two for data. The chart below shows the connections needed.
The I2C LCD interface is compatible across much of the Arduino family. The pin functions remain the same, but the labeling of those pins might be different.
Located on the back of the LCD screen is the I2C interface board, and on the interface is an adjustable potentiometer. This adjustment is made with a small screwdriver. You will adjust the potentiometer until a series of rectangles appear – this will allow you to see your programming results.
The Arduino module and editor do not know how to communicate with the I2C interface on the LCD. The parameter to enable the Arduino to send commands to the LCD are in separately downloaded LiquidCrystal_I2C library.
Several examples and code are included in the Library installation, which can provide some reference and programming examples. You can use these example sketches as a basis for developing your own code for the LCD display module.
The I2c address can be changed by shorting the address solder pads on the I2C module. You will need to know the actual address of the LCD before you can start using it.
Once you have the LCD connected and have determined the I2C address, you can proceed to write code to display on the screen. The code segment below is a complete sketch ready for downloading to your Arduino.
The code assumes the I2C address of the LCD screen is at 0x27 and can be adjusted on the LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27,16,2); as required.
Similar to the cursor() function, this will create a block-style cursor. Displayed at the position of the next character to be printed and displays as a blinking rectangle.
This function turns off any characters displayed to the LCD. The text will not be cleared from the LCD memory; rather, it is turned off. The LCD will show the screen again when display() is executed.
Scrolling text if you want to print more than 16 or 20 characters in one line then the scrolling text function is convenient. First, the substring with the maximum of characters per line is printed, moving the start column from right to left on the LCD screen. Then the first character is dropped, and the next character is displayed to the substring. This process repeats until the full string has been displayed on the screen.
The LCD driver backpack has an exciting additional feature allowing you to create custom characters (glyph) for use on the screen. Your custom characters work with both the 16×2 and 20×4 LCD units.
A custom character allows you to display any pattern of dots on a 5×8 matrix which makes up each character. You have full control of the design to be displayed.
To aid in creating your custom characters, there are a number of useful tools available on Internet. Here is a LCD Custom Character Generator which we have used.

NodeMCU and Arduino information continue to evolve, and we intend to produce several reference articles on all aspects of their usage. This includes everything from setup, driver installation information to code examples, and peripheral additions. Watch for more items as we produce them.

What you’ll build in less that 20 minutes of soldering is a device, that (with demo sketch for Arduino IDE) is able to connect to your WiFi and fetch current WeatherStation data for pre-defined location. On first start, it will require to calibrate touch display used to control the device.
The Arduino sketch has 438k built so there’s still plenty of room to add more features. However, I’m looking to dive deeply into existing example code in order to reuse as much as possible. There’s NNTP, visual WiFi display, display carousel, icons, fonts, colours and last but not least the touch screen support.
Ms.Josey
Ms.Josey