MRB3971 on NodeMcu

Hello everyone.

My goal is to use TFT-LCD (MRB3971) with a NodeMcu module

The TFT is a 3.97inch 16BIT Module OTM8009A SKU:MRB3971

I am simply looking for a schematic on how to connect the TFT-LCD (MRB3971) and NodeMcu

I have spent the last couple of hours searching the net but no luck.

Can anyone please tell me how to connect? I attached the pin labels and bottom view.

Thank you.


Screen Shot 2020-04-14 at 19.10.27.png

I found articles on the unit but not relating to NodeMcu. I don't have enough specific knowledge to figure out the connections myself unfortunately.

  1. Remove your shoes and socks.

  2. Count the TFT pins for 16-bit.

  3. Ask your neighbour to provide her fingers for extra counting.

  4. Count the available pins on your NodeMcu.

  5. Change the interface to 8-bit.

  6. You have sufficient fingers and toes without involving your neighbour.

  7. Compare the "pins needed" with the "pins available"

The ESP32 does have enough pins for an 8-bit parallel TFT. Buy an ESP32.
I am not aware of any TFT library that supports the OTM8009A. You will have to write your own.



There is a library that works with some TFTs with OTM8009A with some processor boards: GxTFT.

But each TFT with OTM8009A may be different, so there is not a general solution.

I tried to change one such TFT to 8bit parallel interface, but could not get it to work.
The one I tried to change looks exactly like the first picture of the OP.
The TFTs with OTM8009A I have need 16bit commands. The 8bit MIPI commands don't work with these.

For history you could search for OTM8009A in this forum.


Thank you David Prentice for your extremely funny reply. Once I stopped laughing, I appreciated ZinggJM's comment more as he actually replied to help, not to insult.

There is a library for the display, that was not the question and I found documentation for other processors connecting to the display that only use 8 wires?

If you felt a bit smarter and bigger after you replied to me, at least it helped you.

ZinggJM requires 16-bit parallel interface e.g. STM32
ZinggJM did not have any success with 8-bit parallel interface.

Your display module has no access to SPI interface. It only offers 8-bit or 16-bit parallel.
If you buy an OTM8009A display with access to the IM# pins you could use SPI.

Looking at the OTM8009A datasheet, you might be able to select SPI with R2, R3, R6, R4.
In which case your ESP8266 could control it.
I would feel more comfortable with this OTM8009A with 8/16/24 bit selection

Note that "larger" displays like 800x480 will be slower with SPI than parallel.

I don't have an OTM8009A display. If anyone has success with selecting SPI via those resistors, I might buy a display and write the SPI driver for ESP8266. (and 8-bit parallel for Zero, Due, ...)


Thank you David.

I found the information relating to the STM32 and learnt some more. However, I found a shield for the display and will use that with an EtherTen board I have lying around.

When I have more time, I will have a go at manipulating the resistors and see what I get. If I have success in marrying it to the NodeMcu, I will come back here and loop you in.

The display I have, is the unit you suggested "this OTM8009A with 8/16/24 bit selection"? I had the pic attached. I will not be trying for large graphics so speed does not bother me too much.


I am guessing that R5, R7, R2 are weak pullups e.g. 103 (10k0) and R4, R6, R3 are optional pulldowns e.g. 0 (0R)

       0     1
IM0   R4    R5
IM1   R6    R7
IM2   R3    R2

I can't read the values from the image in my link. If my guess is correct, you can select RGB+SPI by removing R4

The photo in the link and the component numbering do not seem to be consistent.
Does the item on your desk match the photo in my link ? i.e. mounted resistors, values, ...



Hi David,

I appreciate your work. And the way you help users with TFTs. And most of your comments.

Many Newbies don't understand what it means to provide libraries and support them, and to support Newbies and even experienced users.

I would be very interested to learn if anybody finds an OTM8009A TFT with 8bit parallel interface with a working library. And I would also be interested in a OTM8009A TFT with SPI.
I think the one you linked is just a new variant with the same issues. It doesn't support SPI, I guess.
The 4 jumpers are for 2 IM lines. I don't remember which ones.



I have edited you profile.

The advert is considered SPAM and the tag line had profanaties.

Could you take a few moments to Learn How To Use The Forum.
Other general help and troubleshooting advice can be found here.
It will help you get the best out of the forum in the future.


It looks as if the 8080-8 interface is fairly easy e.g.

Fig. 8080-Series parallel bus protocol, Write to register or display RAM

It looks as if you require one WR strobe for each "bus-width"
But SPI would be painful e.g.

Figure SPI Protocol for register write mode

but writing pixels is worse:

Figure SPI Protocol for GRAM write (Separate byte mode)

I am intrigued. When fatman1961 reports the R2-R7 values I will buy a display if I can select different IM# modes.

Incidentally, the picture in the original (8/16 bit) from #0 looks as if it is the same component layout as the 8/16/24 bit display in #5.


Hi everyone!
After a long struggle I have just managed to run 4.0" IPS LCD (both variants: OTM8009A MRB3971 and NT35510 MRB3973) in 8-bit mode with ESP32 :slight_smile: :slight_smile:

Key points:

  1. switch lcd hardware to 8-bit mode by desoldering R3 resistor and resoldering it as R2
  2. send 16-bit commands / data to lcd as two 8-bit writes:
void LCD_WR_REG(uint WriteAddr)
  DC_C; //command, DC low

  CS_L; //CS low
  //tft_Write_8((WriteAddr>>8)&0xFF); //WR low; Write 8 bits to TFT; WR high
  //tft_Write_8(WriteAddr&0xFF); //WR low; Write 8 bits to TFT; WR high
  CS_H; //CS high

void LCD_WR_DATA(uint WriteData )
  DC_D; //data, DC high
  CS_L; //CS low
  //tft_Write_8((WriteData>>8)&0xFF); //WR low; Write 8 bits to TFT; WR high
  //tft_Write_8(WriteData&0xFF); //WR low; Write 8 bits to TFT; WR high
  CS_H; //CS high
  1. Use proper LCD init code, form code examples found on lcdwiki pages:



function void LCD_Init(void) in LCD.c files.

  1. Before drawing anything set lcd window to full screen:
#define Byte8H(ByteH) ((uint8_t)(((uint16_t)(ByteH)&0xFF00)>>8))
#define Byte8L(ByteL) ((uint8_t)( (uint16_t)(ByteL)&0x00FF))

void LCD_SetWindow( uint StartX, uint StartY, uint EndX, uint EndY )








#define LCD_W 800
#define LCD_H 480

LCD_SetWindow(0, 0, LCD_W-1, LCD_H-1);

The starting point for me was this: GitHub - Bodmer/TFT_eSPI: Arduino and PlatformIO IDE compatible TFT library optimised for the Raspberry Pi Pico (RP2040), STM32, ESP8266 and ESP32 that supports different driver chips project (as inspiration and source of parallel 8-bit write functions for ESP32).

I will try to integrate OTM8009A and NT35510 as lcd drivers into this great project.



how is your progress on this? i have one of these LCDs also and am eager to get it running. Is spi an option also?