Dr_Quark:
All my units are single display. I have 13 of them in running controllers throughout the house, no problems.
You have been extremely lucky.
This line:
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
configures that library.
It tells the library not only the i2c address but also how the PCF8574 chips is wired to the LCD.
If any of that information is incorrect for the device you have, it won't work.
You have been lucky so far that all the devices you have purchased had matching i2c address AND pin mappings.
Different manufacturers use not only different i2c addresses but also different pin mappings.
The issue you are having is that the library configuration you are using is incorrect for your new devices since your LCD new devices are different from your previous devices and will require different constructor parameters.
i.e. you are telling the library incorrect initialization parameters for the new devices you have.
To use that library, you will need correct the constructor to match the device you have.
You must make sure the parameters exactly match your device h/w.
This means you must:
- figure out the i2c address (requires using an i2c scanner sketch)
- look carefully at the backpack to figure out how the PCF8574 pins are wired to the LCD to verify the pin mapping.
- look carefully at the back-light circuit to see if uses active high or active low transistor and then pick
POSITIVE/NEGATIVE polarity accordingly.
The 2nd two are doable by visual inspection and through the use of a ohm meter.
The reason Don said to use my hd44780 library is that it can auto detect the i2c address, pin mappings, and backlight active level by probing the backpack.
This means you don't have to hard code the configuration to a specific h/w.
And because the auto configuration is done at run time, you can swap out devices and the library will figure it out the next time the Arduino powers up.
It also includes a diagnostic sketch that will test the i2c signals and the internal LCD RAM to make sure the library and LCD device are communicating.
The library is available in the IDE library manager.
I would highly encourage reading about the library before blindly trying to install/use it as this library is a library package that supports multiple h/w interfaces.
You can read more about it here: GitHub - duinoWitchery/hd44780: Extensible hd44780 LCD library
The library also includes a "Documentation" sketch that provides links to lots of additional information.
You can bring int up in the IDE after installation.
The i/o class for a PCF8574 backpack is hd44780_I2Cexp
The documentation & wiki explains where to locate the examples for that i/o class as well as the diagnostic sketch.
BTW as an aside, these lines of code should not be used:
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
setBAcklightPin() is obsolete and should no longer be used. The full constructor should be used which includes the backlight pin and polarity.
setBacklight() does not take a HIGH/LOW argument but rather a dimlevel 0-255.
When sending it HIGH you are asking the library to create a very dim backlight. The only reason the backlight is on, is that the backpack does not support dimming and so it gives the dimmest it can do which is full on.
Unless you want dimming, you should use backlight() and noBacklight() API functions.