If you look at the schematic that I posted on the LCD backpack, has a nasty bug. If you look at the transistor, it is connected to P3. When P3 goes high (which is what you do), it will make the transistor to conduct through the base without any resistor to limit the current. If you look at how much that backpack consumes with the backlight on, you will be surprised!
In any case, if you what to use the backlight on that backpack after this comment, the New LiquidCrystal library does have support for backlight. Take a look at the methods in the base abstract class LCD. What you can do is:
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd ( 0x27, 2, 1, 0, 4, 5, 6, 7, 3, NEGATIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity
void setup ( )
{
lcd.begin ( 16, 2 ); // Size of the LCD
lcd.backlight ( );
delay (1000);
lcd.nobacklight ( );
}
There are other methods you can use like setBacklight. All these are available in the base abstract LCD class and are inherited by the particular driver.
You can also call the creation as in the previous post and use the setBacklightPin method in the LCD base class too:
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C lcd ( 0x27, 2, 1, 0, 4, 5, 6, 7); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity
void setup ( )
{
lcd.begin ( 16, 2 ); // Size of the LCD
lcd.setBacklightPin ( 3, NEGATIVE );
lcd.backlight ( );
delay (1000);
lcd.nobacklight ( );
}
The cool thing about the library is that if you use a pointer to the base class in you library as I mentioned in previous posts, it will work with a wide range of LCD drivers without a single line of code being changed and being so targeted to a particular module.
The init method is not necessary at all with any LCD. Calling the init method is done directly from the constructor or from the begin method and they are private. No one should use init even with the standard LiquidCrystal Library. With the other I2C library that you are using it is necessary because somehow they needed to initialize the I2C that can't be done during object creation (as the standard), therefore, as opposed to calling it from within begin, they added a new function that needs to be called (that is not very standard).
Hope it helps.