Browse Source

erster Commit

master
Olli Graf 1 year ago
parent
commit
d112201710
  1. 114
      LCD1602.py
  2. 40
      degdisp.py
  3. 66
      wdisp.py

114
LCD1602.py

@ -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

@ -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

@ -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
Loading…
Cancel
Save