erster Commit
This commit is contained in:
		
							
								
								
									
										114
									
								
								LCD1602.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								LCD1602.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,114 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					from smbus import SMBus
 | 
				
			||||||
 | 
					b = SMBus(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#Device I2C Arress
 | 
				
			||||||
 | 
					LCD_ADDRESS   =  (0x7c>>1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LCD_CLEARDISPLAY = 0x01
 | 
				
			||||||
 | 
					LCD_RETURNHOME = 0x02
 | 
				
			||||||
 | 
					LCD_ENTRYMODESET = 0x04
 | 
				
			||||||
 | 
					LCD_DISPLAYCONTROL = 0x08
 | 
				
			||||||
 | 
					LCD_CURSORSHIFT = 0x10
 | 
				
			||||||
 | 
					LCD_FUNCTIONSET = 0x20
 | 
				
			||||||
 | 
					LCD_SETCGRAMADDR = 0x40
 | 
				
			||||||
 | 
					LCD_SETDDRAMADDR = 0x80
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#flags for display entry mode
 | 
				
			||||||
 | 
					LCD_ENTRYRIGHT = 0x00
 | 
				
			||||||
 | 
					LCD_ENTRYLEFT = 0x02
 | 
				
			||||||
 | 
					LCD_ENTRYSHIFTINCREMENT = 0x01
 | 
				
			||||||
 | 
					LCD_ENTRYSHIFTDECREMENT = 0x00
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#flags for display on/off control
 | 
				
			||||||
 | 
					LCD_DISPLAYON = 0x04
 | 
				
			||||||
 | 
					LCD_DISPLAYOFF = 0x00
 | 
				
			||||||
 | 
					LCD_CURSORON = 0x02
 | 
				
			||||||
 | 
					LCD_CURSOROFF = 0x00
 | 
				
			||||||
 | 
					LCD_BLINKON = 0x01
 | 
				
			||||||
 | 
					LCD_BLINKOFF = 0x00
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#flags for display/cursor shift
 | 
				
			||||||
 | 
					LCD_DISPLAYMOVE = 0x08
 | 
				
			||||||
 | 
					LCD_CURSORMOVE = 0x00
 | 
				
			||||||
 | 
					LCD_MOVERIGHT = 0x04
 | 
				
			||||||
 | 
					LCD_MOVELEFT = 0x00
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#flags for function set
 | 
				
			||||||
 | 
					LCD_8BITMODE = 0x10
 | 
				
			||||||
 | 
					LCD_4BITMODE = 0x00
 | 
				
			||||||
 | 
					LCD_2LINE = 0x08
 | 
				
			||||||
 | 
					LCD_1LINE = 0x00
 | 
				
			||||||
 | 
					LCD_5x8DOTS = 0x00
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LCD1602:
 | 
				
			||||||
 | 
					  def __init__(self, col, row):
 | 
				
			||||||
 | 
					    self._row = row
 | 
				
			||||||
 | 
					    self._col = col
 | 
				
			||||||
 | 
					    self._showfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
 | 
				
			||||||
 | 
					    self.begin(self._row,self._col)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					  def command(self,cmd):
 | 
				
			||||||
 | 
					    b.write_byte_data(LCD_ADDRESS,0x80,cmd)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def write(self,data):
 | 
				
			||||||
 | 
					    b.write_byte_data(LCD_ADDRESS,0x40,data)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  def setCursor(self,col,row):
 | 
				
			||||||
 | 
					    if(row == 0):
 | 
				
			||||||
 | 
					      col|=0x80
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					      col|=0xc0;
 | 
				
			||||||
 | 
					    self.command(col)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def clear(self):
 | 
				
			||||||
 | 
					    self.command(LCD_CLEARDISPLAY)
 | 
				
			||||||
 | 
					    time.sleep(0.002)
 | 
				
			||||||
 | 
					  def printout(self,arg):
 | 
				
			||||||
 | 
					    if(isinstance(arg,int)):
 | 
				
			||||||
 | 
					      arg=str(arg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for x in bytearray(arg,'utf-8'):
 | 
				
			||||||
 | 
					      self.write(x)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def display(self):
 | 
				
			||||||
 | 
					    self._showcontrol |= LCD_DISPLAYON 
 | 
				
			||||||
 | 
					    self.command(LCD_DISPLAYCONTROL | self._showcontrol)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  def begin(self,cols,lines):
 | 
				
			||||||
 | 
					    if (lines > 1):
 | 
				
			||||||
 | 
					        self._showfunction |= LCD_2LINE 
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					    self._numlines = lines 
 | 
				
			||||||
 | 
					    self._currline = 0 
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					    time.sleep(0.05)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # Send function set command sequence
 | 
				
			||||||
 | 
					    self.command(LCD_FUNCTIONSET | self._showfunction)
 | 
				
			||||||
 | 
					    #delayMicroseconds(4500);  # wait more than 4.1ms
 | 
				
			||||||
 | 
					    time.sleep(0.005)
 | 
				
			||||||
 | 
					    # second try
 | 
				
			||||||
 | 
					    self.command(LCD_FUNCTIONSET | self._showfunction);
 | 
				
			||||||
 | 
					    #delayMicroseconds(150);
 | 
				
			||||||
 | 
					    time.sleep(0.005)
 | 
				
			||||||
 | 
					    # third go
 | 
				
			||||||
 | 
					    self.command(LCD_FUNCTIONSET | self._showfunction)
 | 
				
			||||||
 | 
					    # finally, set # lines, font size, etc.
 | 
				
			||||||
 | 
					    self.command(LCD_FUNCTIONSET | self._showfunction)
 | 
				
			||||||
 | 
					    # turn the display on with no cursor or blinking default
 | 
				
			||||||
 | 
					    self._showcontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF 
 | 
				
			||||||
 | 
					    self.display()
 | 
				
			||||||
 | 
					    # clear it off
 | 
				
			||||||
 | 
					    self.clear()
 | 
				
			||||||
 | 
					    # Initialize to default text direction (for romance languages)
 | 
				
			||||||
 | 
					    self._showmode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT 
 | 
				
			||||||
 | 
					    # set the entry mode
 | 
				
			||||||
 | 
					    self.command(LCD_ENTRYMODESET | self._showmode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										40
									
								
								degdisp.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										40
									
								
								degdisp.py
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env python3
 | 
				
			||||||
 | 
					# encoding: utf-8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					import configparser
 | 
				
			||||||
 | 
					import logging
 | 
				
			||||||
 | 
					import LCD1602
 | 
				
			||||||
 | 
					try:
 | 
				
			||||||
 | 
					    import smbus2
 | 
				
			||||||
 | 
					except ImportError: # Wenn smbus2 nicht zu importieren ist, nehmen wir smbus
 | 
				
			||||||
 | 
					    from smbus import SMBus
 | 
				
			||||||
 | 
					import mysql.connector
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					port = 1
 | 
				
			||||||
 | 
					adresse_lcd1602 = 0x25
 | 
				
			||||||
 | 
					deg = 0o1212
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					logging.basicConfig( format='%(asctime)s [%(levelname)s] %(funcName)s: %(message)s', level=logging.DEBUG)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def info(msg):
 | 
				
			||||||
 | 
					  logging.info(msg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def debug(msg):
 | 
				
			||||||
 | 
					  logging.debug(msg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def print_weather():
 | 
				
			||||||
 | 
					  lcd.setCursor(0, 0)
 | 
				
			||||||
 | 
					  lcd.printout('0o{0:o}'.format(deg))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#LCD1602 initialisieren
 | 
				
			||||||
 | 
					lcd=LCD1602.LCD1602(16,2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					try:
 | 
				
			||||||
 | 
					  while True:
 | 
				
			||||||
 | 
					   print_weather()
 | 
				
			||||||
 | 
					except(KeyboardInterrupt):
 | 
				
			||||||
 | 
					    lcd.clear()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										66
									
								
								wdisp.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										66
									
								
								wdisp.py
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,66 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env python3
 | 
				
			||||||
 | 
					# encoding: utf-8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					import configparser
 | 
				
			||||||
 | 
					import logging
 | 
				
			||||||
 | 
					import bme280
 | 
				
			||||||
 | 
					import LCD1602
 | 
				
			||||||
 | 
					try:
 | 
				
			||||||
 | 
					    import smbus2
 | 
				
			||||||
 | 
					except ImportError: # Wenn smbus2 nicht zu importieren ist, nehmen wir smbus
 | 
				
			||||||
 | 
					    from smbus import SMBus
 | 
				
			||||||
 | 
					import mysql.connector
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					port = 1
 | 
				
			||||||
 | 
					adresse_bme280 = 0x76
 | 
				
			||||||
 | 
					adresse_lcd1602 = 0x25
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					logging.basicConfig( format='%(asctime)s [%(levelname)s] %(funcName)s: %(message)s', level=logging.DEBUG)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def info(msg):
 | 
				
			||||||
 | 
					  logging.info(msg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def debug(msg):
 | 
				
			||||||
 | 
					  logging.debug(msg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def print_weather(temperature, humidity, pressure):
 | 
				
			||||||
 | 
					  lcd.setCursor(0, 0)
 | 
				
			||||||
 | 
					  lcd.printout('{:05.2f}\223C'.format(temperature)
 | 
				
			||||||
 | 
					  lcd.printout(' {:05.2f}hPa'.format(pressure))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  lcd.setCursor(0, 1)
 | 
				
			||||||
 | 
					  lcd.printout('{:05.2f}%'.format(humidity))
 | 
				
			||||||
 | 
					# Datenbankverbindung herstellen.
 | 
				
			||||||
 | 
					config = configparser.ConfigParser()
 | 
				
			||||||
 | 
					config.read('db.ini')
 | 
				
			||||||
 | 
					mydb = mysql.connector.connect(host=config['weatherdb']['host'], user=config['weatherdb']['user'],password=config['weatherdb']['password'],database =config['weatherdb']['database'])
 | 
				
			||||||
 | 
					mycursor = mydb.cursor()
 | 
				
			||||||
 | 
					debug('Datenverbindung hergestellt.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#LCD1602 initialisieren
 | 
				
			||||||
 | 
					lcd=LCD1602.LCD1602(16,2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# BME280 initialisieren
 | 
				
			||||||
 | 
					bus = smbus2.SMBus(port)
 | 
				
			||||||
 | 
					calibration_params = bme280.load_calibration_params(bus, adresse_bme280)
 | 
				
			||||||
 | 
					debug('Sensor kalibriert.')
 | 
				
			||||||
 | 
					try:
 | 
				
			||||||
 | 
					  while True:
 | 
				
			||||||
 | 
					   data = bme280.sample(bus, adresse_bme280, calibration_params)
 | 
				
			||||||
 | 
					   temperature = data.temperature
 | 
				
			||||||
 | 
					   pressure = data.pressure
 | 
				
			||||||
 | 
					   humidity = data.humidity
 | 
				
			||||||
 | 
					   info('{:05.2f}°C {:05.2f}hPa {:05.2f}%'.format(temperature, pressure, humidity))
 | 
				
			||||||
 | 
					   print_weather(temperature,humidity, pressure)
 | 
				
			||||||
 | 
					   sql = 'INSERT into stats (datum,temperature, humidity, pressure) VALUES(now(), %s, %s, %s)'
 | 
				
			||||||
 | 
					   val = (temperature, humidity, pressure)
 | 
				
			||||||
 | 
					   mycursor.execute(sql, val)
 | 
				
			||||||
 | 
					   mydb.commit()
 | 
				
			||||||
 | 
					   time.sleep(10)
 | 
				
			||||||
 | 
					except(KeyboardInterrupt):
 | 
				
			||||||
 | 
					    mydb.close()
 | 
				
			||||||
 | 
					    lcd.clear()
 | 
				
			||||||
 | 
					    del lcd
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Reference in New Issue
	
	Block a user