Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import smbus
- import time
- import sys
- import Adafruit_DHT
- import RPi.GPIO as GPIO
- import pymysql
- db = pymysql.connect("***","***","***","testdb")
- cursor = db.cursor()
- LED_PIN=40
- GPIO.setmode(GPIO.BOARD)
- GPIO.setup(LED_PIN,GPIO.OUT)
- I2C_ADDR = 0x3f
- LCD_WIDTH = 20
- LCD_CHR = 1
- LCD_CMD = 0
- LCD_LINE_1 = 0x80
- LCD_LINE_2 = 0xC0
- LCD_LINE_3 = 0x94
- LCD_LINE_4 = 0xD4
- LCD_BACKLIGHT = 0x08
- #LCD_BACKLIGHT = 0x00
- ENABLE = 0b00000100
- E_PULSE = 0.0005
- E_DELAY = 0.0005
- #bus = smbus.SMBus(0)
- bus = smbus.SMBus(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 sql_commit():
- try:
- cursor.execute(sql)
- db.commit()
- print("data uploaded")
- except:
- db.rollback()
- print("data rollback")
- def led_warning():
- GPIO.output(LED_PIN,GPIO.HIGH)
- time.sleep(0.5)
- GPIO.output(LED_PIN,GPIO.LOW)
- time.sleep(0.5)
- GPIO.output(LED_PIN,GPIO.HIGH)
- time.sleep(0.5)
- GPIO.output(LED_PIN,GPIO.LOW)
- time.sleep(0.5)
- GPIO.output(LED_PIN,GPIO.HIGH)
- time.sleep(0.5)
- GPIO.output(LED_PIN,GPIO.LOW)
- time.sleep(0.5)
- GPIO.output(LED_PIN,GPIO.HIGH)
- time.sleep(0.5)
- GPIO.output(LED_PIN,GPIO.LOW)
- time.sleep(0.5)
- GPIO.output(LED_PIN,GPIO.HIGH)
- time.sleep(0.5)
- GPIO.output(LED_PIN,GPIO.LOW)
- time.sleep(0.5)
- def lcd_normal():
- lcd_string(t01,LCD_LINE_1)
- lcd_string(t02,LCD_LINE_2)
- lcd_string(time_n, LCD_LINE_3)
- lcd_string(" RPiSpy I2C LCD", LCD_LINE_4)
- sql_commit()
- time.sleep(5)
- def lcd_warning():
- lcd_string(t01,LCD_LINE_1)
- lcd_string(t02,LCD_LINE_2)
- lcd_string(time_n, LCD_LINE_3)
- lcd_string("WARNING!!!", LCD_LINE_4)
- sql_commit()
- led_warning()
- def main():
- lcd_init()
- lcd_string("RPiSpy <", LCD_LINE_1)
- lcd_string("I2C LCD <", LCD_LINE_2)
- time.sleep(1)
- lcd_string("> RPiSpy", LCD_LINE_1)
- lcd_string("> I2C LCD", LCD_LINE_2)
- time.sleep(1)
- while True:
- global t01,t02,time_n,sql
- humidity, temperature = Adafruit_DHT.read_retry(11, 4)
- t01="Temp: "+str(int(temperature))+"C"
- t02="Humidity: "+str(int(humidity))+"%"
- time_n=str(time.strftime("%Y-%m-%d %H:%M", time.localtime()))
- sql = """INSERT INTO DHT11(rec_temp,rec_hum) VALUES(%s,%s) %("str(temperature)","str(humidity)")"""
- if temperature>=30:
- lcd_warning()
- else :
- lcd_normal()
- if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
- finally:
- lcd_byte(0x01, LCD_CMD)
- db.close()
- GPIO.cleanup()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement