#!/usr/bin/env python
########################################################################
# Filename    : I2CLCD1602.py
# Description : Use the LCD display data
# Author      : freenove
# modification: 2017/04/18
########################################################################
from PCF8574 import PCF8574_GPIO
from Adafruit_LCD1602 import Adafruit_CharLCD

from time import sleep, strftime
from datetime import datetime
 
def get_cpu_temp():     # get CPU temperature and store it into file "/sys/class/thermal/thermal_zone0/temp"
    tmp = open('/sys/class/thermal/thermal_zone0/temp')
    cpu = tmp.read()
    tmp.close()
    return '{:.2f}'.format( float(cpu)/1000 ) + ' C'
 
def get_datetime_now():     # get system time
    return datetime.now().strftime('%m/%d %H:%M:%S')

def setupLCD():
    mcp.output(3,1)
    lcd.begin(16,2)

def sendMessage1(message):
    lcd.setCursor(0,0)
    lcd.message(message)

def LCDOn():
    mcp.output(3,1)

def sendMessage2(message):
    lcd.setCursor(0,1)
    lcd.message(message)

def clearLCD():
    lcd.clear()
    mcp.output(3,0)

def loopLCD():
    mcp.output(3,1)     # turn on LCD backlight
    lcd.begin(16,2)     # set number of LCD lines and columns
    while(True):         
        #lcd.clear()
        lcd.setCursor(0,0)  # set cursor position
        lcd.message( 'CPU: ' + get_cpu_temp()+'\n' )# display CPU temperature
        lcd.message( get_datetime_now() )   # display the time
        sleep(1)
        
def destroyLCD():
    lcd.clear()
    mcp.output(3,0)
    
PCF8574_address = 0x27  # I2C address of the PCF8574 chip.
PCF8574A_address = 0x3F  # I2C address of the PCF8574A chip.
# Create PCF8574 GPIO adapter.
try:
	mcp = PCF8574_GPIO(PCF8574_address)
except:
	try:
		mcp = PCF8574_GPIO(PCF8574A_address)
	except:
		print 'I2C Address Error !'
		exit(1)
# Create LCD, passing in MCP GPIO adapter.
lcd = Adafruit_CharLCD(pin_rs=0, pin_e=2, pins_db=[4,5,6,7], GPIO=mcp)

if __name__ == '__main__':
    print 'Program is starting ... '
    try:
        loopLCD()
    except KeyboardInterrupt:
        destroyLCD()

