text: #!/usr/bin/python
  # https://raspberrytips.nl/i2c-lcd-scherm/
  
  import smbus
  import time
  import socket
  
  I2C_ADDR = 0x38  # I2C device address
  LCD_WIDTH = 16   # Maximum characters per line
  
  # Define some device constants
  LCD_CHR = 1  # Mode - Sending data
  LCD_CMD = 0  # Mode - Sending command
  
  LCD_LINE_1 = 0x80  # LCD RAM address for the 1st line
  LCD_LINE_2 = 0xC0  # LCD RAM address for the 2nd line
  
  LCD_BACKLIGHT = 0x08  # On 0X08 / Off 0x00
  
  ENABLE = 0b00000100  # Enable bit
  
  E_PULSE = 0.0005
  E_DELAY = 0.0005
  
  bus = smbus.SMBus(1)  # Rev 2 Pi uses 1
  
  
  def lcd_init():
      lcd_byte(0x33, LCD_CMD)  # 110011 Initialise
      lcd_byte(0x32, LCD_CMD)  # 110010 Initialise
      lcd_byte(0x06, LCD_CMD)  # 000110 Cursor move direction
      lcd_byte(0x0C, LCD_CMD)  # 001100 Display On,Cursor Off, Blink Off
      lcd_byte(0x28, LCD_CMD)  # 101000 Data length, number of lines, font size
      lcd_byte(0x01, LCD_CMD)  # 000001 Clear display
      time.sleep(E_DELAY)
  
  
  def lcd_byte(bits, mode):
  
      bits_high = mode | (bits & 0xF0) | LCD_BACKLIGHT
      bits_low = mode | ((bits << 4) & 0xF0) | LCD_BACKLIGHT
  
      bus.write_byte(I2C_ADDR, bits_high)
      lcd_toggle_enable(bits_high)
  
      bus.write_byte(I2C_ADDR, bits_low)
      lcd_toggle_enable(bits_low)
  
  
  def lcd_toggle_enable(bits):
      time.sleep(E_DELAY)
      bus.write_byte(I2C_ADDR, (bits | ENABLE))
      time.sleep(E_PULSE)
      bus.write_byte(I2C_ADDR, (bits & ~ENABLE))
      time.sleep(E_DELAY)
  
  
  def lcd_string(message, line):
  
      message = message.ljust(LCD_WIDTH, " ")
  
      lcd_byte(line, LCD_CMD)
  
      for i in range(LCD_WIDTH):
          lcd_byte(ord(message[i]), LCD_CHR)
  
  
  def main():
  
      lcd_init()
      lcd_string("if network known", LCD_LINE_1)
      lcd_string("IP address in60s", LCD_LINE_2)
      time.sleep(60)
      while True:
          myIP = str(((
              [ip for ip in socket.gethostbyname_ex(socket.gethostnaquit()me())[2] if not ip.startswith("127.")] or [[(s.connect(
                  ("8.8.8.8", 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1]]) + ["no IP found"])[0])
          lcd_string(myIP, LCD_LINE_1)
          lcd_string("TIJD:" + str(now.hour) + ":" + str(now.minute), LCD_LINE_2)
          time.sleep(30)
  
  
  if __name__ == '__main__':
  
      try:
          main()
      except KeyboardInterrupt:
          pass
      finally:
          lcd_byte(0x01, LCD_CMD)
  