Noob’s Guide to Nextion Displays with ESP8266 | NodeMCU | WeMos D1 Mini

Software Serial support has been added. Now connect Nextion HMI display to any two pins of ESP8266. Check out our Github Repository for modified Nextion library for ESP8266 (Tutorial work is in progress).

Nextion is a Seamless Human Machine Interface (HMI) solution that provides a control and visualization interface between a human and a process, machine, application or appliance. Nextion is mainly applied to IoT or consumer electronics field. It is the best solution to replace the traditional LCD and LED.

Nextion includes hardware part (A series of TFT boards) and software part (Nextion editor). The Nextion TFT board uses only one serial port to communicate. It lets you avoid the hassle of wiring. Nextion editor has mass components such as button, text, progress bar, slider, instrument panel etc. to enrich your interface design. And the drag-and-drop function ensures that you spend less time in programming, which will reduce 99% of your development workloads. With the help of this Nextion editor, designing a GUI is a piece of cake.

Interesting? So let’s make the working combination of Nextion and ESP8266, Just FOLLOW ME  😛

Hardware Needed:

Software Needed:

Nextion Editor:

Nextion Editor is a Windows based drag and drop tool for creation Nextion GUI in real time, as you can see what you are building. Here is the fun begins, so let’s get started  😎 . Download Nextion Editor and install it. Download Nextion HMI file for current project and open it with Nextion Editor. Follow the video tutorial for rest of demonstration.


Arduino IDE:

Download Nextion Library and install it. Download .ino file from Nextion Example Sketch zip file. If you are using your own sketch, use the baud rate of 9600 in “void setup” function i.e.   Serial.begin(9600); Follow the video for rest of the demonstration.

Connection Diagram:


Demonstration Video:

Youtube: A Noob’s Guide to Nextion Displays

22 thoughts on “Noob’s Guide to Nextion Displays with ESP8266 | NodeMCU | WeMos D1 Mini

  1. fabio says:

    hello friend,
    great tutorial!
    Could you write code for nextion display enhanced and arduino controller for me?
    I have an existing project to modify


    I would help to adapt it to my use.
    Hope you can thanks, Fabio


    assalamualaikum ahmed..
    nice tutorial from you. everything completed.
    if you dont mind, can u share the node flows code?
    Really interested to know so that i can simulate all those thing as a completed tutorial/example.

    thanks n regards

    • Waqas Ahmed says:

      Waleikum Salam. Thank you so much for appreciating us. We are using our ESPMetRED Library for communicating Node Red and ESP8266. There are simple MQTT IN and MQTT OUT Nodes involve in this whole back and forth communication. Being an old article, We cannot assure you providing the Nodered flow, however, We’ll try our best to provide a more clean tutorial in our blog as soon as possible. Just stay tuned.

  3. Naveen Shetty says:

    Hi Ahmed,
    A query , you have put a link for Nextion library here, but there is another linked termed as Nextion-master ; which of these would work with nodemcu 1.0 .
    Also can we connect the tx , rx of nextion with rx,tx of nodemcu which is gpio3 and gpio1 as compared to yours as you are using a software serial.
    can i connection without level shifter to gpio3 and gpio1 if using hardware serial.
    can i connection without level shifter to gpio5 and gpio4 if using software serial.

    • Waqas Ahmed says:

      Hello Naveen,
      I have corrected the link for downloading library. Library at our github repository is the new one in which we have added support for software serial. It is a modified version of original Itead Studio Library with ESP8266 support included in it.
      Nextion displays are of 5v logic and ESP8266 or Nodemcu (A development board of ESP8266) pins have 3.3v logic. RX and TX pins are not tolerant to 5v. However, all other pins have tolerance to 5v up to some extent. A logic shifter is compulsory otherwise, your ESP8266 will be destroyed after sometime.

  4. Bob Cohen says:

    Good afternoon gentlemen, Thank you for you nextion library adjusted to be used with NodeMCU. All looks fine but there’s no .cpp or .h code for Dual State Buttons. I’ve been using the original itead version on a Mega with great success but when I use your library the DS Button code is missing. I copied the code across from the original itead library but still problems …error: ‘NexDSButton’ does not name a type. Just wondering if this should work (Ie just copying DS Button across or am I missing something? Would a solution be, to use the original itead library with your NexHardware.h and the .cpp copied across to the original folder. Thanks

    • Waqas Ahmed says:

      Hello Bob, We are pleased to know that our mod was helpful for you. Actually Nextion Library (modified by us) has not been updated for quite a while and any new features added to original Nextion Library may not been added yet. I cannot provide you with exact timeline for all these new features addition in our modified library but it will be covered soon.

  5. virendra says:

    i tried your setup it up as instructed on a nodemcu 1.0 and nextion screen.. and got the below compile error pls help..

    C:\Users\Ginger Brown Design\Documents\Arduino\libraries\Nextion-master\NexHardware.cpp:18:25: error: conflicting declaration ‘SoftwareSerial Serial’

    SoftwareSerial nexSerial(5, 4); // TXblue, RXyellow


    In file included from C:\Users\Ginger Brown Design\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.1\cores\esp8266/Arduino.h:260:0,

    from C:\Users\Ginger Brown Design\Documents\Arduino\libraries\Nextion-master\NexHardware.h:17,

    from C:\Users\Ginger Brown Design\Documents\Arduino\libraries\Nextion-master\NexHardware.cpp:15:

    C:\Users\Ginger Brown Design\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.1\cores\esp8266/HardwareSerial.h:146:23: error: ‘Serial’ has a previous declaration as ‘HardwareSerial Serial’

    extern HardwareSerial Serial;

    • Waqas Ahmed says:

      There seems problem with software serial library. Which Nextion library are you using? Original one or modified by us?

    • Waqas Ahmed says:

      Javier, Links are working. However, I have updated the direct links in place of categorizing them under Downloads section. Moreover, We are going to update this tutorial very soon to simplify it’s each and every step. Stay tuned.

  6. Glenn Pearston says:

    Hi – thank you for the work you have done on this. The Nextion UI can consume a lot of a person’s time trying to work through it. Your efforts have helped.

    Question – I am using an ESP8266-12E and a Nextion (obviously). My code works using SoftwareSerial and your library (I can put stuff on the Nextion display). When I go in to NexConfig.h and comment (disable) the debugging (//#define DEBUG_SERIAL_ENABLE) enable I no longer get any Serial.print to my console (Serial.println(“Hello World”).

    #define DEBUG_SERIAL_ENABLE Nextion debug Messages Regular Serial.print Messages
    Not Commented Out YES YES
    Commented Out NO NO

    I have tried playing with various combinations in the NexConfig.h but to no avail. Is this expected behavior or is it something on my setup? Any ideas on a work around?

    • Waqas Ahmed says:

      Dear Pearston,
      You are not receiving any debug information on your Serial Console because you have disable it . You have to instantiate the Serial library manually by issuing the following command in your Setup function.

      • Glenn Pearston says:

        Thanks for getting back to me.
        My sketch has/had the Serial.begin(115200) command and it had no impact. What is very odd is that the call to nextInit() actually overrode the Serial.begin(115200) setting and set Serial to 9600. The monitor screen’s baud rate had to be changed to see the incoming messages. That led me to believe that somewhere Serial and Serial1 were tied together – could not find that. I finally found that if I changed the #ifdef DEBUG_SERIAL_ENABLE statements I could get Serial (at 115200 even) and no Nextion db output, which is what I wanted. The changes I made were:

        #ifdef DEBUG_SERIAL_ENABLE
        #define dbSerialPrint(a) do{}while(0)
        #define dbSerialPrintln(a) do{}while(0)
        #define dbSerialBegin(a) dbSerial.begin(a)
        #define dbSerialPrint(a) do{}while(0)
        #define dbSerialPrintln(a) do{}while(0)
        #define dbSerialBegin(a) do{}while(0)

        I kept the original statements and commented them out so I all I have to do is copy/paste the original statements in if I want debug turned on OR I use the above statements when I don’t want nextion debug output. Worth mentioning, I tried using the #define dbSerialBegin(a) do{}while(0)
        statement in the non-debug printing config and when that statement is called in the NexConfig.h that is when no Serial (nextion or Serial.println) output is shown. I looked through the libraries for a call that tied dbSerial and Serial together but could not find it. The changes above are a workable solution for my situation. Thank you getting back to me and your library.

Leave a Reply

Your email address will not be published. Required fields are marked *

For better user experience, please clear your browser cookies and cache at least for once. Dismiss