I think I found it. Seems to be a difference between the old LiquidCrystal and LiquidCrystal_I2C.
Original code from blog:
void setup() {
delay(100);
lcd.createChar(0, p1);
lcd.createChar(1, p2);
lcd.createChar(2, p3);
lcd.createChar(3, p4);
lcd.createChar(4, p5);
lcd.begin(16, 2);
}
I moved lcd.begin(16,2); up so it is executed before lcd.createChar set of commands, like so:
void setup() {
delay(100);
lcd.begin(16, 2); // moved to here, works with LiquidCrystal_I2C
lcd.createChar(0, p1);
lcd.createChar(1, p2);
lcd.createChar(2, p3);
lcd.createChar(3, p4);
lcd.createChar(4, p5);
// lcd.begin(16, 2);
}