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