Arduino esp8266, more than 8 custom characters. Is it possible, and how?


I was hoping there will be some Arduino nerds amongst you?
I have created a bunch of custom characters, that together draws a penguin head on the right side of the 20 x 4 2004A LCD, with a i2c “module”. Or so I would like it to do.

I have values and text going on the screen, but as far as I tell, it’s not possible to make more than 8 custom characters? The custom characters needed for the penguin head, surpasses 8 characters by far.
Is there a way to easily display all of them in the correct order, or is it impossible?

  • 20 x 4 2004A LCD, with i2c module.
  • esp8266 NodeMCU 1.0
1 Like

Hard to say where that 8 character limit is coming from. Could be the microcontroller in the display itself HD47xxx (for example), which then, you’re not going to easily fix. Or it could be a limit in whatever microcontroller is in the “backpack” turning a parallel display into a serial one (i2c).

Could start with finding the source code for the backpack, likely they’re using a small PIC or AVR microcontroller.

Plan B is move over to an OLED or dot matrix display and something like the Adafruit GFX library, and draw your penguin dot by dot.


I just have a feeling, that it must be possible to “stream” the characters to the LCD. I do however, have no clue as how to do it.

google didn’t turn up a datasheet for a “2005A” lcd, but the datasheet for the 2004A display indictates it uses a ST7066 controller. Which is a popular HD44780 compatible controller. And the datasheet for the ST7066 lists the equivalent of 64 bytes of CGRAM or enough to hold 8 8x5 dot custom characters. That’s not surprising since that’s what the hitachi has too.

You can probably alter the cgram after drawing your first set of custom characters, but that will probably update the already displayed characters.

So you are probably going to have to google for something that has more than the equivalent of 64 bytes of cgram; but if you need a different display anyway, your best bet might be to switch to a graphical display like already suggested.

1 Like

I am sorry. I typed in the wrong number… Doooh. It’s a 2004"A" with an i2c modules converter, for the parallel input pins:

I feared that I had to move away from “standard LCDs” TFT and OLED are often more expensive and too small for what I had in mind.

Thank you all for donating time for my quest.

Will you show us what your character penguin looks like?

Sure, I have a visual .bmp of it too. But the site wont accept it? jpg and such, blurs it out.

I have the character code too, of cause. I just thought this would make more sense.
I also understand that this looks like any bird, really. It’s my first try, so I am OK with it. :stuck_out_tongue:

1 Like

8 characters is so little. I mean, to make a bar graph you would already have used up 5 out the eight available… And I have a bar graph…

I don’t think the 8 custom characters are meant to be combined together to make a graphic. I think they are meant to be used as singular characters to augment the permanent rom with a smily face character or something equivalently trivial.

I think you are right. But it would have been awesome if I could. Having the King Penguin on the right, and the “product name” and version at the left. All neatly in a nice splash screen for starting up, while the innards initiate.

I wonder if I could get this to work with only i2c?:

The ESP8266 that you mentioned says it has hardware spi support. Why wouldn’t you just use spi?

That’s a good option. Of course depending on which esp8266 breakout, pins could be at a premium.

I believe this is the answer. All of these generic alphanumeric displays like the 16x2 and 20x4 all use the classic 44780 and they all have the 8 character limit. However, the dot matrix displays like the 128x64 are just what they say they are… an array of memory that represents each pixel. The only limit is what your microcontroller puts on it.

1 Like

Since others established for your the controller on your display is the limitation, how about OLED?

I am a novice at these things. I am just learning, as I am going along.

They are. I am out of them already. That is the weakness of the Express chip solution. they don’t have many programmable pins, that isn’t reserved for other purposes.

But it’s fast and have Wifi build in.

I guess I have to figure out how to program them… My head already hurts at times, from what I am doing now. :slight_smile:

Using a bus like SPI, you need three pins (in, out, clock) plus one pin for each SPI slave (chip select). There are i2c enabled graphical LCD/OLED,you would only need two pins (data, clock).

by using an i2c IO expander, you can add more inputs/outputs too, using the same two pins you’re using for the display.

But as I think you would agree, using i2c or SPI for everything, somewhat complicate things?
Regardless, it wont bring me closer to making the impossible on this LCD. :stuck_out_tongue:

Should be easier, many good library exist for gfx displays.

1 Like